Matlab 实现简单RBF曲面拟合

先看看RBF拟合的效果

拟合好的,数据间隔1,验证间隔0.5,Sigma4

​​​​​​​​这是拟合好的,全面间隔1,验证数据间隔0.5

拟合好的,数据间隔2,验证间隔0.1,Sigma=4

这是数据间隔为2,验证间隔为1的拟合

RBf拟合全代码

% 清空
clc;
clear all;
%生成训练数据

R = 500;
x = -sqrt(R):1:sqrt(R);
y = -sqrt(R):1:sqrt(R);

[ Row Col ] = size(x); 
cnt = 1;
for i=1:1:Col
    for j=1:1:Col
    xt(cnt) = x(i);
	yt(cnt) = y(j);
    zt(cnt) = sqrt(R^2-x(i)^2-y(j)^2);
    cnt = cnt + 1;
    end
end

Sigma = 10;

weight = calculate_weights(xt,yt,zt,Sigma);
% 生成数据验证RBF网络计算结果
xS = -sqrt(R):0.5:sqrt(R);
yS = -sqrt(R):0.5:sqrt(R);

cnt = 1;
[ Row Col ] = size(yS); 
for i=1:1:Col
    for j=1:1:Col
    xt1(cnt) = xS(i);
	yt1(cnt) = yS(j);
    zt1(cnt) = sqrt(R^2-xS(i)^2-yS(j)^2);
    cnt = cnt + 1;
    end
end
% 根据RBF计算的验证位置的Z数据
zpre  = calculate_rbf_value(weight,Sigma,xt1,yt1,xt,yt);
   
plot3(xt,yt,zt,'g*');
hold on;
plot3(xt1,yt1,zpre,'ro');

hold off;

calculate_weights计算函数

function [ Weight ] = calculate_weights( X,Y,Z,Sigma )
%UNTITLED3 此处显示有关此函数的摘要
%   此处显示详细说明
    [ Row Col ] = size(X);
    if Row > Col
        Size = Row;
    else
        Size = Col;
    end
    
    for i= 1:Size
       for j = 1:Size
           Mat(i,j) = Gaussian(X(j),Y(j),X(i),Y(i),Sigma);
       end
    end
    [ Row Col ] = size(Z);
    if Row < Col
        Z = Z';
    end
%     Weight = inv(Mat) * Z;
    Weight = Mat\Z;
end

高斯核函数

function [ Fg ] = Gaussian( X,Y,Xc,Yc,Sigma )
%UNTITLED2 此处显示有关此函数的摘要
%   此处显示详细说明
    Fg = exp(-((X-Xc)^2+(Y-Yc)^2)/(2*Sigma^2));
end

根据RBf值计算任意位置的数据

function [ Z ] = calculate_rbf_value( Wight,Sigma,X,Y,Xc,Yc )
%UNTITLED4 此处显示有关此函数的摘要
%   此处显示详细说明
    [ Row Col ] = size(X);
    if Row > Col
        Size1 = Row;
    else
        Size1 = Col;
    end
    
    [ Row Col ] = size(Xc);
    if Row > Col
        Size2 = Row;
    else
        Size2 = Col;
    end
%通过RBF网络计算值
    for i = 1:Size1
        Z(i) = 0;
       for j=1:Size2
          Z(i) = Z(i) +  Wight(j) * Gaussian(X(i),Y(i),Xc(j),Yc(j),Sigma);
       end
    end
end

问题

  1. 如何快速计算矩阵的逆;
  2. 如何自动决策数据点采样间隔问题;
  3. 如何加入平滑项在忠实数据和平滑之间做出取舍;
  4. Sigma值如何自动决策取值,同样的数据不同的Sigma拟合效果并不好,Sigma过小拟合效果很差,比如说1;
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值