径向基函数插值

news2024/11/24 22:54:55

一、径向基函数的定义

如果 ∣ ∣ 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 plt


def 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_all


def 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.I
    w = w.T
    return w


def 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_rec


if __name__ == '__main__':
    snum = 20  # control point数量
    ratio = 20  # 总数据点数量:snum*ratio
    sig = 0.5  # 核函数宽度
    xs = -8
    xe = 8
    x1 = 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')
end


title('$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);
end

w = 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:num
    for 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.coloradmin.cn/o/1366672.html

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

相关文章

汽车雷达:实时SAR成像的实现

摘要: 众所周知,点云成像是目前实现汽车雷达感知最流行的方案,尤其是采用多级联实现的4D点云成像雷达,这是目前最有希望实现产品落地的技术方案之一。 今天重点分享关于汽车雷达SAR成像相关技术内容,这也证实了4D点云成像雷达并不一定就是汽车雷达成像唯一的方案,在业内…

Pytorch常用的函数(六)常见的归一化总结(BatchNorm/LayerNorm/InsNorm/GroupNorm)

Pytorch常用的函数(六)常见的归一化总结(BatchNorm/LayerNorm/InsNorm/GroupNorm) 常见的归一化操作有:批量归一化(Batch Normalization)、层归一化(Layer Normalization)、实例归一化(Instance Normaliza…

【Linux驱动】Pinctrl子系统 | GPIO子系统 | 基于子系统的LED驱动程序

🐱作者:一只大喵咪1201 🐱专栏:《Linux驱动》 🔥格言:你只管努力,剩下的交给时间! 目录 🛷Pinctrl子系统🥅设备树中的Pinctrl子系统 🛷GPIO子系统…

ComfyUI报错AttributeError: module ‘cv2.gapi.wip.draw‘ has no attribute ‘Text‘

ComfyUI在安装comfyui-reactor-node插件,然后启动之后突然报错: AttributeError: module cv2.gapi.wip.draw has no attribute Text 这是怎么回事呢? 于是四处搜寻答案。 总之就是opencv-python版本的问题导致的。 我将有可能解决办法的方法进行了总结。 下面列出所有解…

强化学习的数学原理学习笔记 - 时序差分学习(Temporal Difference)

文章目录 概览:RL方法分类时序差分学习(Temporal Difference,TD)TD for state values🟦Basic TD🟡TD vs. MC 🟦Sarsa (TD for action values)Basic Sarsa变体1:Expected Sarsa变体2&…

动态SLAM 开源方案汇总及介绍(一)

参考https://zhuanlan.zhihu.com/p/673614739及https://zhuanlan.zhihu.com/p/673615788 具体来说,当SLAM系统在前一帧的动态物体上提取了特征点时,如果将这个特征点投影到当前帧,由于目标已经移动,这个点找到的匹配点必然是错误…

【python】爬取知乎热榜Top50保存到Excel文件中【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 一、导入必要的模块: 这篇博客将介绍如何使用Python编写一个爬虫程序,从斗鱼直播网站上获取图片信息并保存到本地。我们将使用requests模块发送HTTP请求和接收响应,以及os模块处理文件…

MySQL 8.0 InnoDB Tablespaces之Temporary Tablespaces(临时表空间)

文章目录 MySQL 8.0 InnoDB Tablespaces之Temporary Tablespaces(临时表空间)会话临时表空间会话临时表空间的磁盘分配和回收会话临时表空间的创建创建临时表和查看临时表信息会话临时表空间相关的设置参数innodb_temp_tablespaces_dir 全局临时表空间查…

「MCU」SD NAND芯片之国产新选择优秀

文章目录 前言 传统SD卡和可贴片SD卡 传统SD卡 可贴片SD卡 实际使用 总结 前言 随着目前时代的快速发展,即使是使用MCU的项目上也经常有大数据存储的需求。可以看到经常有小伙伴这样提问: 大家好,请问有没有SD卡芯片,可以…

RT-Thread 线程管理

线程管理 在日常生活中,我们要完成一个大任务,一般会将它分解成多个简单、容易解决的小问题,小问题逐个被解决,大问题也就随之解决了。 在多线程操作系统中,也同样需要开发人员把一个复杂的应用分解成多个小的、可调…

C#上位机与三菱PLC的通信01--搭建仿真环境

1、三菱PLC介绍 三菱PLC是三菱电机生产的主力产品。 它采用一类可编程的存储器,用于其内部存储程序,执行逻辑运算、顺序控制、定时、计数与算术操作等面向用户的指令,并通过数字或模拟式输入/输出控制各种类型的机械或生产过程。三菱PLC在中国…

软件测试|深入理解Python的encode()和decode()方法

简介 在Python中,字符串是不可变的序列对象,它由Unicode字符组成。当我们需要在字符串和字节之间进行转换时,Python提供了两个非常重要的方法:encode()和decode()。这两个方法允许我们在Unicode字符和字节之间进行相互转换&#…

网络报文分析程序的设计与实现(2024)

1.题目描述 在上一题的基础上,参照教材中各层报文的头部结构,结合使用 wireshark 软件(下载地址 https://www.wireshark.org/download.html#releases)观察网络各层报文捕获,解析和分析的过程(如下 图所示&a…

计算机毕业设计——SpringBoot 个人博客管理系统(附源码)

1,绪论 1.1 背景调研 在互联网飞速发展的今天,互联网已经成为人们快速获取、发布和传递信息的重要渠道,它在人们政治、经济、生活等各个方面发挥着重要的作用。互联网上发布信息主要是通过网站来实现的,获取信息也是要在互联网中…

智能网联汽车安全相关标准汇总

目录 1.标准方向分析 2.智能驾驶域相关标准 3.智能座舱域相关标准 3.汽车通用规范 1.标准方向分析 当前汽车行业的内卷态势已经蔓延至项目立项,导致如今开发模式都尽可能地左移,例如瑞萨提出的虚拟ECU开发模式可以极大节省ECU的实车验证资源&#xf…

Open3D 基于统计滤波去除噪点(5)

Open3D 基于统计滤波去除噪点(5) 一、什么是统计滤波二、具体实现1.代码 一、什么是统计滤波 统计滤波是一种常用的点云滤波方法,用于去除噪声和异常点。在统计滤波中,通过计算每个点邻域内的统计特征(如平均值和标准…

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

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

MFC Socket和合信CTMC M266ES 运动控制型PLC通信进行数据交换

前言 1、前两篇文章通过对Snap7和S7-1200/S7-1500PLC的通信进行了详细的介绍。Snap7的优点开源性强、使用方便易于上手,跨平台和可移植性性强。但是Snap7也有个缺点就是只能访问PLC的DB、MB、I、Q区进行数据读写,不能对V区进行读写,有人说可以读写V区&am…

Spring AOP(详解)

目录 1.AOP概述 2.AOP相关术语 3.Spring AOP的原理机制 3.1JDK动态代理 3.2 CGLIB动态代理 3.3简单代码展示 3.3.1JDK动态代理 3.3.2CGLIB动态代理 4.Spring的AOP配置 4.1pom.xml 4.2增强方法 4.3切点 4.4切面 5.基于注解的AOP配置 5.1.创建工程 5.2.增强 5.3AOP…

抖去推账号矩阵+无人直播+文案引流系统开发搭建--开源

核心技术 1. AI自动直播: 智能系统通过丰富可定制的文案库, 拥有有料有趣的灵魂。不仅能自动语音讲解内容,还可以在直播中和用户灵活互动。直播中可将团购商品同话术自动上下架。 2. AI剪辑 可一键智能批量成片,也可跟着模板剪…