径向基函数插值

一、径向基函数的定义

如果 ∣ ∣ x 1 ∣ ∣ = ∣ ∣ x 2 ∣ ∣ ||x_1||=||x_2|| ∣∣x1∣∣=∣∣x2∣∣,那么 ϕ ( x 1 ) = ϕ ( x 2 ) \phi(x_1)=\phi(x_2) ϕ(x1)=ϕ(x2) 的函数 ϕ \phi ϕ 就是径向函数,即仅由 r = ∣ ∣ x ∣ ∣ r=||x|| r=∣∣x∣∣ 控制的函数(径向基函数是一个取值仅仅依赖于离原点距离的实值函数,或者还可以是到任意一点 c c c 的距离)。

给定一个一元函数 ϕ : R + → R \phi:R_+\rightarrow R ϕR+R,在定义域 x ∈ R d x\in R^d xRd 上,所有形如 ψ ( x ) = ϕ ( ∣ ∣ x − c ∣ ∣ ) \psi(x)=\phi(||x-c||) ψ(x)=ϕ(∣∣xc∣∣) 及其线性组合张成的函数空间称为由函数 ϕ \phi ϕ 导出的径向基函数空间

在一定的条件下,只要取 { x j } \{x_j\} {xj} 两两不同, { ϕ ( x − x j ) } \{\phi(x-x_j)\} {ϕ(xxj)} 就是线性无关的,从而形成径向基函数空间中某子空间的一组基。当 { x j } \{x_j\} {xj} 几乎充满 R R R 时, { x j } \{x_j\} {xj} 几乎充满 R R R 时, { ϕ ( x − x j ) } \{\phi(x-x_j)\} {ϕ(xxj)} 及其线性组合可以逼近几乎任何函数。

各类文献中常用的径向基函数有:

  1. Kriging 方法的 Gauss 分布函数: ϕ ( r ) = e − c 2 r 2 \phi(r)=e^{-c^2r^2} ϕ(r)=ec2r2
  2. Kriging 方法的 Markoff 分布函数: ϕ ( r ) = e − c ∣ r ∣ \phi(r)=e^{-c|r|} ϕ(r)=ecr,及其他概率分布函数;
  3. Hardy 的 Multi-Quadric 函数: ϕ ( r ) = ( c 2 + r 2 ) β \phi(r)=(c^2+r^2)^\beta ϕ(r)=(c2+r2)β(其中 β \beta β 是正的实数);
  4. Hardy 的逆 Multi-Quadric 函数: ϕ ( r ) = ( c 2 + r 2 ) − β \phi(r)=(c^2+r^2)^{-\beta} ϕ(r)=(c2+r2)β(其中 β \beta β 是正的实数);
  5. Duchon 的薄板样条: d d d 为偶数时, ϕ ( r ) = r 2 k − d log ⁡ r \phi(r)=r^{2k-d}\log r ϕ(r)=r2kdlogr d d d 为奇数时, ϕ ( r ) = r 2 k − d \phi(r)=r^{2k-d} ϕ(r)=r2kd

二、径向基函数插值

定义:径向基函数插值是对于给定的多元散乱数据 { x j , f j } j = 1 n , x j ∈ R n , f j ∈ R , j = 1 , ⋯ , n \{x_j,f_j\}^n_{j=1},x_j\in R^n,f_j\in R,j=1,\cdots,n {xj,fj}j=1n,xjRn,fjR,j=1,,n。选取径向函数 ϕ : R + → R \phi:R_+\rightarrow R ϕ:R+R 来构造函数系 { ϕ ( ∣ ∣ x − x j ∣ ∣ ) } j = 1 n \{\phi(||x-x_j||)\}_{j=1}^n {ϕ(∣∣xxj∣∣)}j=1n 并寻找形如 S ( x ) = ∑ j = 1 n λ j ϕ ( ∣ ∣ x − x j ∣ ∣ ) S(x)=\sum_{j=1}^n\lambda_j\phi(||x-x_j||) S(x)=j=1nλjϕ(∣∣xxj∣∣) 的插值函数 S ( x ) S(x) S(x),使其满足条件 S ( x j ) = f j , j = 1 , ⋯ , n S(x_j)=f_j,j=1,\cdots,n S(xj)=fj,j=1,,n

为了方便,我们定义
{ f T = ( f 1 , f 2 , ⋯ , f n ) ϕ T ( x ) = ( ϕ ( ∣ ∣ x − x 1 ∣ ∣ , ϕ ( ∣ ∣ x − x 2 ∣ ∣ , ⋯ , ϕ ( ∣ ∣ x − x n ∣ ∣ ) ) λ T = ( λ 1 , λ 2 , ⋯ , λ n ) A = ( ϕ ( ∣ ∣ x j − x k ∣ ∣ ) ) n × n \begin{cases} \pmb{f^T}=(f_1,f_2,\cdots,f_n)\\[2ex] \pmb{\phi^T}(x)=\Big(\phi(||x-x_1||,\phi(||x-x_2||,\cdots,\phi(||x-x_n||)\Big)\\[2ex] \pmb{\lambda^T}=(\lambda_1,\lambda_2,\cdots,\lambda_n)\\[2ex] \pmb{A}=\Big(\phi(||x_j-x_k||)\Big)_{n\times n} \end{cases} fT=(f1,f2,,fn)ϕT(x)=(ϕ(∣∣xx1∣∣,ϕ(∣∣xx2∣∣,,ϕ(∣∣xxn∣∣))λT=(λ1,λ2,,λn)A=(ϕ(∣∣xjxk∣∣))n×n

上述插值方程对任意两两不同的 x j x_j xj 的数据 { x j , f j } \{x_j,f_j\} {xj,fj} 有解的充要条件是:对任意两两不同的 x j x_j xj,对称矩阵 A \pmb A A 都非奇异。

定理:函数 ϕ : R + → R \phi:R_+\rightarrow R ϕ:R+R 是连续的, lim ⁡ r → ∞ ϕ ( r ) = 0 \lim_{r\rightarrow\infty}\phi(r)=0 limrϕ(r)=0,那么对于 n n n 元的径向基函数插值总是存在唯一解的充分条件是:矩阵 A \pmb A A 是正定矩阵。

上面提到的径向基函数中逆 Multi-Quadric 函数和 Gauss 函数在任意维空间上都是正定函数,因此插值是唯一的。

三、用高斯函数进行散乱数据的插值

对于数据量少的情况,径向基函数(尤其是高斯函数)插值的结果较令人满意,而且计算也比较简单。

令径向基函数插值方程为
S ( x ) = ∑ j = 1 n λ j ϕ ( ∣ ∣ x − x j ∣ ∣ ) S(x)=\sum_{j=1}^n\lambda_j\phi(||x-x_j||) S(x)=j=1nλjϕ(∣∣xxj∣∣)

将已知点 ( x j , f j ) , j = 1 , ⋯ , n (x_j,f_j),j=1,\cdots,n (xj,fj),j=1,,n 代入方程,可得:
[ λ 1 λ 2 ⋯ λ n ] [ ϕ ( ∣ ∣ x 1 − x 1 ∣ ∣ ) ϕ ( ∣ ∣ x 2 − x 1 ∣ ∣ ) ⋯ ϕ ( ∣ ∣ x n − x 1 ∣ ∣ ) ϕ ( ∣ ∣ x 1 − x 2 ∣ ∣ ) ϕ ( ∣ ∣ x 2 − x 2 ∣ ∣ ) ⋯ ϕ ( ∣ ∣ x n − x 2 ∣ ∣ ) ⋮ ⋮ ⋮ ϕ ( ∣ ∣ x 1 − x n ∣ ∣ ) ϕ ( ∣ ∣ x 2 − x n ∣ ∣ ) ⋯ ϕ ( ∣ ∣ x n − x n ∣ ∣ ) ] = [ f 1 f 2 ⋯ f n ] \left[ \begin{matrix} \lambda_1 & \lambda_2 & \cdots & \lambda_n\\ \end{matrix} \right] \left[ \begin{matrix} \phi(||x_1-x_1||) & \phi(||x_2-x_1||) & \cdots & \phi(||x_n-x_1||)\\ \phi(||x_1-x_2||) & \phi(||x_2-x_2||) & \cdots & \phi(||x_n-x_2||)\\ \vdots & \vdots & & \vdots\\ \phi(||x_1-x_n||) & \phi(||x_2-x_n||) & \cdots & \phi(||x_n-x_n||)\\ \end{matrix} \right]= \left[ \begin{matrix} f_1& f_2& \cdots& f_n\\ \end{matrix} \right] [λ1λ2λn] ϕ(∣∣x1x1∣∣)ϕ(∣∣x1x2∣∣)ϕ(∣∣x1xn∣∣)ϕ(∣∣x2x1∣∣)ϕ(∣∣x2x2∣∣)ϕ(∣∣x2xn∣∣)ϕ(∣∣xnx1∣∣)ϕ(∣∣xnx2∣∣)ϕ(∣∣xnxn∣∣) =[f1f2fn]

求解上述方程,可求出 λ 1 , λ 2 , ⋯ , λ n \lambda_1,\lambda_2,\cdots,\lambda_n λ1,λ2,,λn 的值,从而求出插值曲线方程。插值曲面方程类似,将 x x x 替换成向量 X X X 即可。

具体应用到高斯函数,设高斯函数插值方程为
S ( x ) = ∑ j = 1 n λ j e − α ∣ ∣ x − x j ∣ ∣ 2 α > 0 S(x)=\sum_{j=1}^n\lambda_je^{-\alpha||x-x_j||^2}\quad\alpha>0 S(x)=j=1nλjeα∣∣xxj2α>0

其中, α \alpha α 为形状调整参数,可根据散乱数据点分布特征选取,当数据点对应的函数值变化较大时, α \alpha α 可取的稍大些;数据点对应的函数值变化较小时, α \alpha α 可取得稍小些。

python 代码实现

import numpy as np
import matplotlib.pyplot as pltdef gen_data(x1, x2):# 用于生成插值节点和总数据点 x1,x2 分别为插值节点的横坐标构成的行向量,总数据点的横坐标构成的行向量y_sample = np.sin(np.pi * x1 / 2) + np.cos(np.pi * x1 / 3)  # 插值节点的函数值y_all = np.sin(np.pi * x2 / 2) + np.cos(np.pi * x2 / 3)  # 总数据点的函数值return y_sample, y_alldef kernel_interpolation(y_sample, x1, sig):# 求解插值函数中高斯基函数的系数gaussian_kernel = lambda x, c, h: np.exp(-h*(x - x[c]) ** 2)  # 高斯基函数num = len(y_sample)w = np.zeros(num)int_matrix = np.asmatrix(np.zeros((num, num)))for i in range(num):int_matrix[i, :] = gaussian_kernel(x1, i, sig)w = np.asmatrix(y_sample) * int_matrix.Iw = w.Treturn wdef kernel_interpolation_rec(w, x1, x2, sig):gkernel = lambda x, xc, h: np.exp(-h*(x - xc) ** 2)  # 高斯基函数num = len(x2)y_rec = np.zeros(num)for i in range(num):for k in range(len(w)):y_rec[i] = y_rec[i] + w[k] * gkernel(x2[i], x1[k], sig)return y_recif __name__ == '__main__':snum = 20  # control point数量ratio = 20  # 总数据点数量:snum*ratiosig = 0.5  # 核函数宽度xs = -8xe = 8x1 = np.linspace(xs, xe, snum)x2 = np.linspace(xs, xe, (snum - 1) * ratio + 1)y_sample, y_all = gen_data(x1, x2)plt.figure(1)w = kernel_interpolation(y_sample, x1, sig)y_rec = kernel_interpolation_rec(w, x1, x2, sig)plt.plot(x2, y_rec, 'k')plt.plot(x2, y_all, 'r:')plt.ylabel('y')plt.xlabel('x')for i in range(len(x1)):plt.plot(x1[i], y_sample[i], 'go', markerfacecolor='none')plt.legend(labels=['reconstruction', 'original', 'control point'], loc='lower left')plt.title('kernel interpolation:$y=sin(\pi x/2)+cos(\pi x/3)$')plt.show()

运行结果

在这里插入图片描述

Matlab 代码实现

clc;clear;%% 参数
snum = 20;  % 插值节点个数
ratio = 20;  % 总数据点个数:(snum-1)*ratio + 1
sig = 0.5;  % 形状控制参数xs = -8;  % 起点
xe = 8;  % 终点%% 生成样本点
x1 = linspace(xs,xe,snum);  % 生成插值点坐标
x2 = linspace(xs,xe,(snum-1)*ratio + 1);
[y_sample,y_all] = gen_data(x1,x2);figure('Name','RBF插值方法')%% 计算基函数技术lambda
w = kernel_interpolation(y_sample,x1,sig);%% 重构曲线
y_rec = kernel_interpolation_rec(w,x1,x2,sig);%% 绘图
plot(x2,y_rec,'--',x2,y_all,':','LineWidth',2)
hold on
for i = 1:1:length(x1)scatter(x1(i),y_sample(i),70,'green')
endtitle('$y=sin(\pi x/2)+cos(\pi x/3)$','Interpreter','latex')
xlabel('x')
ylabel('y')
legend('重构曲线','原始曲线','插值点','Location','southwest')%% 生成插值节点和总数据点
function [y_sample,y_all] = gen_data(x1,x2)
y_sample = sin(pi * x1 / 2) + cos(pi * x1 / 3);
y_all = sin(pi * x2 / 2) + cos(pi * x2 / 3);
end%% 求解插值函数中高斯基函数的系数
function w = kernel_interpolation(y_sample,x1,sig)
num = length(y_sample);
int_matrix = zeros(num,num);for i = 1:1:num int_matrix(i,:) = exp(-sig.*(x1-x1(i)).^2);
endw = y_sample * inv(int_matrix);
end%% 重构曲线
function y_rec = kernel_interpolation_rec(w,x1,x2,sig)
num = length(x2);
y_rec = zeros(1,num);for i = 1:1:numfor k = 1:1:length(w)y_rec(i) = y_rec(i) + w(k) .* exp(-sig.*(x2(i)-x1(k)).^2);end
end
end

运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/606716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

金蝶EAS pdfviewlocal 任意文件读取漏洞复现

0x01 产品简介 金蝶EAS 为集团型企业提供功能全面、性能稳定、扩展性强的数字化平台,帮助企业链接外部产业链上下游,实现信息共享、风险共担,优化生态圈资源配置,构筑产业生态的护城河,同时打通企业内部价值链的数据链…

《中学物理奇妙日志——30天物理学探索之旅》提纲

《中学物理奇妙日志——30天物理学探索之旅》提纲 第一部分:物理学基础(第1-5天) 第一天:引言 - 从生活中的物理现象出发,阐述物理学的定义与重要性 子主题:物理学的历史、发展及在现代生活中的广泛应用 …

视图与索引连表查询内/外联和子查询

1.视图 先介绍一下视图: 从SQL的角度来看,视图和表是相同的,两者的区别在于表中存储的是实际的数据,而视图中保存的是SELECT语句(视图本身并不存储数据)。 使用视图可以轻松完成跨多表查询数据等复杂操作…

大学生如何当一个程序员——第三篇:热门专业学习之路5

第三篇:热门专业学习之路5 1.WEB前端快速入门2.JavaScript基础与深入解析3.jQuery应用与项目开发4.PHP、数据库编程与设计5. Http服务于Ajax编程6. 做一个阶段项目7. H5新特性与移动端开发8.高级框架9.微信小程序 各位小伙伴想要博客相关资料的话关注公众号&#xf…

R语言(12):绘图

12.1 创建图形 12.1.1 plot函数 plot(c(1,2,3),c(1,2,4)) plot(c(1,2,3),c(1,2,4),"b") plot(c(-3,3),c(-1,5),"n",xlab "x",ylab "y")12.1.2 添加线条&#xff1a;abline()函数 x <- c(1,2,3) y <- c(1,3,8) plot(x,y) lm…

算法28:力扣64题,最小路径和------------样本模型

题目&#xff1a; 给定一个二维数组matrix&#xff0c;一个人必须从左上角出发&#xff0c;最后到达右下角 。沿途只可以向下或者向右走&#xff0c;沿途的数字都累加就是距离累加和 * 返回累加和最小值 思路&#xff1a; 1. 既然是给定二维数组matrix&#xff0c;那么二维数…

寒假前端第一次作业

1、用户注册&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用户注册</title> …

C++中的返回值优化(RVO)

一、命名返回值优化&#xff08;NRVO&#xff09; 是Visual C2005及之后版本支持的优化。 具体来说&#xff0c;就是一个函数的返回值如果是一个对象。那么&#xff0c;正常的返回语句的执行过程是&#xff0c;把这个对象从当前函数的局部作用域&#xff0c;或者叫当前函数的…

视频AI智剪方法:快速批量处理视频,批量剪辑视频的操作

随着科技的飞速发展&#xff0c;视频内容已是获取信息和娱乐的主要方式之一。对于视频创作者和内容生产者来说&#xff0c;如何快速、高效地处理和剪辑大量视频已成为一项重要的需求。现在借助AI技术的不断发展&#xff0c;可以更加智能、高效的处理视频。下面来看云炫AI智剪如…

VS2022 | 显示Unreal Engine日志

VS2022 | 显示Unreal Engine日志 视图 -> 其他窗口 -> Unreal Engine日志 视图 -> 其他窗口 -> Unreal Engine日志

【debug】为什么ansible中使用command出错

碎碎念 在使用ansible执行command的时候&#xff0c;遇到执行会出错的command 比如执行source打算读取环境变量的时候 错误提示为&#xff1a; 没有那个文件或目录:source 一开始以为是错误提示有问题&#xff0c;一直在testrc的路径上检查&#xff0c;但是同样一行命令使用…

一次因线程池使用不当造成生产事故OOM

美好的一天从bug结束 某日当我点开熟悉的界面&#xff0c;一个又一个请求失败的提示赫然出现在屏幕上&#xff0c;不会是昨晚上线的代码有问题吧&#xff1f; 吓得我急忙按F12查看了响应——"exception":"java.lang.OutOfMemoryError","message"…

院士专家齐聚 京彩未来联合重点研究院创建数字空间联合实验室

1月6日&#xff0c;京彩未来与北京大学数字中国研究院华南分院暨广东省数字广东研究院共同创建的“数字空间共同体联合室验室”正式挂牌运营。 著名经济学家管清友博士、北京大学数字中国研究院华南分院暨广东省数字广东研究院常务副院长李鹰教授&#xff0c;广东省数字广东研…

大数据 Hive - 实现SQL执行

文章目录 MapReduce实现SQL的原理Hive的架构Hive如何实现join操作小结 MapReduce的出现大大简化了大数据编程的难度&#xff0c;使得大数据计算不再是高不可攀的技术圣殿&#xff0c;普通工程师也能使用MapReduce开发大数据程序。 但是对于经常需要进行大数据计算的人&#xff…

蒙特卡洛算法

通过随机数获得结果的算法。 当一个问题无法通过数学推导&#xff0c;计算机无法在有限时间求解时候。 就需要考虑蒙特卡洛方法了。 当无法求得精确解时候&#xff0c;进行随机抽样&#xff0c;根据统计试验求近似解。 可行域过大&#xff0c;没有通用方法求出精确解。 主…

【设计模式】访问者模式

一起学习设计模式 目录 前言 一、概述 二、结构 三、案例实现 四、优缺点 五、使用场景 六、扩展 总结 前言 【设计模式】访问者模式——行为型模式。 一、概述 定义&#xff1a; 封装一些作用于某种数据结构中的各元素的操作&#xff0c;它可以在不改变这个数据结构…

linux安装codeserver实现云端开发

先看图 下载安装包 https://github.com/coder/code-server/releases 找到code-server-版本号-linux-amd64.tar.gz&#xff0c;我这里是code-server-4.16.1-linux-amd64.tar.gz 1、使用acrm用户登录目标服务器 2、切换root用户&#xff0c;创建 vscode 用户&#xff0c;并设…

STM32MP157D-DK1 STM32CubeID使用与M核开发

STM32MP157具有A7内核核M4内核&#xff0c;前面介绍的一些文章&#xff0c;都是在A7内核上进行的&#xff0c;本篇来介绍M4内核的开发&#xff0c;以及开发时要用到的STM32 CubeIDE软件的使用。 1 STM32 CubeIDE创建LED工程 STM32CubeIDE是一体式多操作系统开发工具&#xff…

云消息队列 Kafka 版生态谈第一期:无代码转储能力介绍

作者&#xff1a;娜米 云消息队列 Kafka 版为什么需要做无代码转储 云消息队列 Kafka 版本身是一个分布式流处理平台&#xff0c;具有高吞吐量、低延迟和可扩展性等特性。它被广泛应用于实时数据处理和流式数据传输的场景。然而&#xff0c;为了将云消息队列 Kafka 版与其他数…

linux日志管理

一.inode与block 访问文件的流程&#xff1a; 根据文件夹的文件名和inode号&#xff0c;找到对应的inode表&#xff0c;再根据inode表的指针找到磁盘上的真实数据 tips&#xff1a;我磁盘空间还剩很多&#xff0c;但是无法建立文件&#xff1f; 因为inode号被分完了 解决方法&a…