假设我们有N组数据(xi,yi),,,,,,,,这时我们根据径向基函数我们的目的主要是找到径向基函数中的位置参数的值,

我们要用这些已知数据的值用最小二乘法得到这些参数。。

现在我们用一般的方法matlb自带的插值函数进行新值得计算:

<span style="font-size:18px;">x = 0:1.25:10;
y = sin(x);
xi = 0:.1:10; %Matlab
yi = interp1(x,y,xi);
subplot(2,1,1); plot(x,y,'o',xi,yi, xi, sin(xi),'r'); title('Interpolation using Matlab function interp1');</span>

现在我们用径向基函数的方法进行插值

1、

<span style="font-size:18px;">x = 0:1.25:10;
y = sin(x);
xi = 0:.1:10; </span>

产生数据集,和需要插值的数据

2、设定调用函数的参数

% 1D Interpolation
%**************************************************************************x = 0:1.25:10;
y = sin(x);
xi = 0:.1:10; %Matlab
yi = interp1(x,y,xi);
subplot(2,1,1); plot(x,y,'o',xi,yi, xi, sin(xi),'r'); title('Interpolation using Matlab function interp1');
%%
%RBF
%op=rbfcreate(x, y,'RBFFunction', 'thinplate'); rbfcheck(op);
%op=rbfcreate(x, y,'RBFFunction', 'linear'); rbfcheck(op);
%op=rbfcreate(x, y,'RBFFunction', 'cubic'); rbfcheck(op);
%op=rbfcreate(x, y,'RBFFunction', 'gaussian'); rbfcheck(op);
op=rbfcreate(x, y,'RBFFunction', 'multiquadric', 'RBFConstant', 2); rbfcheck(op);
op=rbfcreate(x, y); rbfcheck(op);
%op=rbfcreate(x, y,'RBFFunction', 'gaussian');
%op=rbfcreate(x, y);
fi = rbfinterp(xi, op);
subplot(2,1,2); plot(x, y,'o', xi, fi,xi, sin(xi),'r'); title('RBF interpolation');

求解径向基函数的系数过程
function options = rbfcreate(x, y, varargin)
%RBFCREATE Creates an RBF interpolation
%   OPTIONS = RBFSET(X, Y, 'NAME1',VALUE1,'NAME2',VALUE2,...) creates an
%   radial base function interpolation
%
%   RBFCREATE with no input arguments displays all property names and their
%   possible values.
%
%RBFCREATE PROPERTIES
% %
% Alex Chirokov, alex.chirokov@gmail.com
% 16 Feb 2006
tic;
% Print out possible values of properties.
if (nargin == 0) & (nargout == 0)fprintf('               x: [ dim by n matrix of coordinates for the nodes ]\n');fprintf('               y: [   1 by n vector of values at nodes ]\n');fprintf('     RBFFunction: [ gaussian  | thinplate | cubic | multiquadrics | {linear} ]\n');fprintf('     RBFConstant: [ positive scalar     ]\n');fprintf('       RBFSmooth: [ positive scalar {0} ]\n');fprintf('           Stats: [ on | {off} ]\n');fprintf('\n');return;
end
Names = ['RBFFunction      ''RBFConstant      ''RBFSmooth        ''Stats            '
];
[m,n] = size(Names);
names = lower(Names);options = [];
for j = 1:moptions.(deblank(Names(j,:))) = [];
end%**************************************************************************
%Check input arrays
%**************************************************************************
[nXDim nXCount]=size(x);
[nYDim nYCount]=size(y);if (nXCount~=nYCount)error(sprintf('x and y should have the same number of rows'));
end;if (nYDim~=1)error(sprintf('y should be n by 1 vector'));
end;options.('x')           = x;
options.('y')           = y;
%**************************************************************************
%Default values
%**************************************************************************
options.('RBFFunction') = 'linear';
options.('RBFConstant') = (prod(max(x')-min(x'))/nXCount)^(1/nXDim); %approx. average distance between the nodes
options.('RBFSmooth')   = 0;
options.('Stats')       = 'off';%**************************************************************************
% Argument parsing code: similar to ODESET.m
%**************************************************************************i = 1;
% A finite state machine to parse name-value pairs.
if rem(nargin-2,2) ~= 0error('Arguments must occur in name-value pairs.');
end
expectval = 0;                          % start expecting a name, not a value
while i <= nargin-2arg = varargin{i};if ~expectvalif ~isstr(arg)error(sprintf('Expected argument %d to be a string property name.', i));endlowArg = lower(arg);j = strmatch(lowArg,names);if isempty(j)                       % if no matcheserror(sprintf('Unrecognized property name ''%s''.', arg));elseif length(j) > 1                % if more than one match% Check for any exact matches (in case any names are subsets of others)k = strmatch(lowArg,names,'exact');if length(k) == 1j = k;elsemsg = sprintf('Ambiguous property name ''%s'' ', arg);msg = [msg '(' deblank(Names(j(1),:))];for k = j(2:length(j))'msg = [msg ', ' deblank(Names(k,:))];endmsg = sprintf('%s).', msg);error(msg);endendexpectval = 1;                      % we expect a value nextelseoptions.(deblank(Names(j,:))) = arg;expectval = 0;      endi = i + 1;
endif expectvalerror(sprintf('Expected value for property ''%s''.', arg));
end%**************************************************************************
% Creating RBF Interpolatin
%**************************************************************************%选择所用基函数的形式   这五种函数 高斯 线性 立方 薄板 多项式
switch lower(options.('RBFFunction')) case 'linear'          options.('rbfphi')   = @rbfphi_linear; %线性case 'cubic'options.('rbfphi')   = @rbfphi_cubic;%立方case 'multiquadric'options.('rbfphi')   = @rbfphi_multiquadrics;%多项式case 'thinplate'options.('rbfphi')   = @rbfphi_thinplate;%薄板case 'gaussian'options.('rbfphi')   = @rbfphi_gaussian;%高斯型otherwiseoptions.('rbfphi')   = @rbfphi_linear;
endphi       = options.('rbfphi');
%  调用函数,求解出数据集使用调用||x-xi||函数的值
A=rbfAssemble(x, phi, options.('RBFConstant'), options.('RBFSmooth')); b=[y'; zeros(nXDim+1, 1)];      %这是数据集对应的输出值Y                  %inverse
rbfcoeff=A\b;     %这是径向基函数对应的参数系数%SVD
% [U,S,V] = svd(A);
%
% for i=1:1:nXCount+1
%     if (S(i,i)>0) S(i,i)=1/S(i,i); end;
% end;
% rbfcoeff = V*S'*U*b;options.('rbfcoeff') = rbfcoeff;if (strcmp(options.('Stats'),'on'))fprintf('%d point RBF interpolation was created in %e sec\n', length(y), toc);  fprintf('\n');
end;function [A]=rbfAssemble(x, phi, const, smooth)
%x 为已知的数据集
%phi  表示调用的是哪个基函数形式
%const   表示高斯形式时的方差
%smooth   偏移量 一般为0
[dim n]=size(x);  %得到数据集的维数
A=zeros(n,n);     %初始化有数据集带入基函数中得到的值
for i=1:nfor j=1:ir=norm(x(:,i)-x(:,j));   %每个数据跟其他数据之间的距离temp=feval(phi,r, const);  %带入相应的基函数中得到的值,存储到A中,用于求解系数A(i,j)=temp;A(j,i)=temp;endA(i,i) = A(i,i) - smooth;
end
% Polynomial part
P=[ones(n,1) x'];
A = [ A      PP' zeros(dim+1,dim+1)];  %**************************************************************************
% Radial Base Functions
%**************************************************************************
%五种基函数的表达式
function u=rbfphi_linear(r, const)
u=r;function u=rbfphi_cubic(r, const)
u=r.*r.*r;function u=rbfphi_gaussian(r, const)
u=exp(-0.5*r.*r/(const*const));function u=rbfphi_multiquadrics(r, const)
u=sqrt(1+r.*r/(const*const));function u=rbfphi_thinplate(r, const)
u=r.*r.*log(r+1);

这是进行求解新插入值得过程

已知新的插入值,和上一个函数得到的径向基函数的参数,进行计算,得到新插入值的解

function [f] = rbfinterp(x, options)
%x  为插值的数据
%options  径向基函数的参数设定
tic;
phi       = options.('rbfphi');   %调用的基函数形式
rbfconst  = options.('RBFConstant');%基函数的方差设置
nodes     = options.('x');           %已知的数据集x
rbfcoeff  = (options.('rbfcoeff'))';%求得的径向基函数的系数[dim              n] = size(nodes);
[dimPoints  nPoints] = size(x);if (dim~=dimPoints)error(sprintf('x should have the same number of rows as an array used to create RBF interpolation'));
end;f = zeros(1, nPoints);
r = zeros(1, n);for i=1:1:nPointss=0;r =  (x(:,i)*ones(1,n)) - nodes;  %新数据点到已知每个数据点的距离r = sqrt(sum(r.*r, 1));
%     for j=1:n
%          r(j) =  norm(x(:,i) - nodes(:,j));
%     ends = rbfcoeff(n+1) + sum(rbfcoeff(1:n).*feval(phi, r, rbfconst));for k=1:dims=s+rbfcoeff(k+n+1)*x(k,i);     % linear partendf(i) = s;
end;if (strcmp(options.('Stats'),'on'))fprintf('Interpolation at %d points was computed in %e sec\n', length(f), toc);
end;

径向基函数插值(2)一维数据的插值相关推荐

  1. Python学习笔记:一维数据的插值

    插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其它点处的近似值.与拟合不同的是,要求曲线通过所有的已知数据.SciPy的interpolate模块提供了许多对数据进 ...

  2. matlab径向基函数插值,径向基函数(Radial Basis Function)插值

    将RBF用于插值 标签(空格分隔):径向基函数插值 算法 RBF 曲面重构 当高维数据稀疏,需要预测一些数据,需要使用曲面重构的方法. 曲面重构一般可以分为: 插值 重构 曲面插值里我们一般使用径向基 ...

  3. python给出数据点进行插值_Python对数据进行插值和下采样的方法

    使用Python进行插值非常方便,可以直接使用scipy中的interpolate import numpy as np x1 = np.linspace(1, 4096, 1024) x_new = ...

  4. 径向基函数(RBF)插值

    RBF函数插值 径向基函数(Radial Basis Function, RBF)插值的基本形式为 F(r)=∑i=1Nwiφ(∥r−ri∥)F(\boldsymbol{r})=\sum_{i=1}^ ...

  5. matlab rbf函数_基于径向基函数(RBF)的无网格伪谱法与程序实现(2)——微分矩阵...

    参考资料 Gregory E. Fasshauer. Meshfree Approximation Methods with MATLAB. P.387 P401 数值实现 Matlab 2019a ...

  6. 径向基函数插值(3)二维数据的插值

    二维数据的插值过程跟一维数据的过程一样, 只不过在显示二维的数据插值的过程中,需要meshgrid函数产生数据,进行显示插入数据的输出值. 产生二维数据: clear all; figure; %** ...

  7. 基于径向基函数(RBF)的函数插值

    基于径向基函数的函数插值 1. 函数插值 2. RBF函数插值 代码实现 1. 函数插值 函数插值问题: 用形式简单的插值函数 f^(x)\hat f(x)f^​(x) 近似原函数 (1)\qquad ...

  8. 径向基函数插值(1)

    当我们遇到高维的数据,二维或者三维的数据时,由于数据的不完整,需要预测一些数值,一般我们的方法是用曲面重构, 曲面重构可分为:1.插值2.逼近 曲面插值我们一般使用 径向基插值的方法: RBF (Ra ...

  9. rbf网络c语言程序设计,rbf网络(径向基函数插值)

    任何神经网络的隐藏节点都不是越多越好.首先来讲吗,增加神经网络的隐藏节点会增大运算量,神经网络训练和测试需要的的时间就越长,降低了什么网络的学习速率,. rbf神经来网络即径向基函数神经网络(Radi ...

最新文章

  1. 智源社区AI周刊·第二期:过去一周AI领域的新鲜事
  2. Hadoop开发环境配置2-eclipse集成maven插件
  3. 02.Web大前端时代之:HTML5+CSS3入门系列~H5结构元素
  4. 人眼中亮斑的检测、定位和去除(3)
  5. 因果图法的介绍与示例分析【转载】
  6. 草稿-xpath了解-python 操作xpath小例子
  7. python交换两个值原理_python 两数交换新写法原理
  8. 判断二叉树是否对称的代码
  9. Linux笔记(shell特殊符号,sort排序,wc统计,uniq去重,tee,tr,split)
  10. 【NLP Subword】三大算法原理:BPE、WordPiece、ULM
  11. 鸿蒙os第一批到第四批要多久,鸿蒙 OS 手机适配流程曝光:麒麟 9000 为首批
  12. python函数调用位置_Python基础手册23——函数的调用
  13. 电脑版微信发消息转圈圈
  14. 计算机操作系统教程——分区存储管理
  15. html静态网站基于数码类电商购物网站网页设计与实现共计30个页面.rar(项目源码+毕业设计+论文+答辩PPT)
  16. 联通 吉比特无源光纤接入用户端设备(GPON ONU)TEWA-800G超级管理员 如何密码获取
  17. 算法时间复杂度O(1)
  18. 「咕咕网校 - 基础省选」树上问题的进阶 by Drench
  19. 网页访问localhost出现用户名和密码登录弹窗
  20. ORBSLAM2单应矩阵计算及代码分析

热门文章

  1. 动态构建siteMap(导航,asp.net)
  2. 如何导出wince6.0的SDK
  3. mysql 连接器配置_配置连接器 - 金融分布式架构 SOFAStack - 阿里云
  4. Android下的数据存储与访问、权限
  5. 在leangoo里怎么复制删除列表?
  6. Word 2010中利用尾注添加参考文献(论文必备)
  7. 杭电 汉诺塔问题总结
  8. 包含实时功能的ASP.NET系统结构
  9. java中先序创建一棵树,恳求大佬指点!!!首先标明空子树的先根遍历序列建立一棵二叉树...
  10. 【Python-ML】SKlearn库密度聚类DBSCAN模型