Matlab插值和拟合

数值插值

一维插值
YI=interp1(X,Y,XI,METHOD) X、Y为采样点和样本值,XI为表示要插值的点,METHOD默认是线性插值'linear'
METHOD可以取
'nearest'  - 邻近点插值法
'linear'   - 线性插值
'spline'   - 三次样条插值
'pchip'    - 立方插值法
'cubic'    - same as 'pchip'
'v5cubic'  - MATLAB 5版本的cubic

二维插值
 ZI = INTERP2(X,Y,Z,XI,YI,METHOD)
'nearest' - 邻近点插值法
'linear'  - 线性插值
'spline'  - 三次样条插值

'cubic'   - 如果数据间隔均匀使用双立方插值,否则使用三次样条插值



例 通过线性插值生成一个粗略的正弦函数图像

clear
clc
x=0:10;
y=sin(x);
xi=0:0.25:10;
yi=interp1(x,y,xi);
plot(x,y,'o',xi,yi)

例 当Y为数组时,YI的维数为XI的行数×XI的列数×Y的长度

clear
clc
x=[1:10]';y=[x.^2,x.^3,x.^4];
xi=[1.5 1.75;7.5 7.75];
yi=interp1(x,y,xi);
size(yi)

结果

ans =

     2     2     3

例 根据样本数据生成插值并绘制图像

clear
clc
t = 1900:10:1990;
p = [75.995  91.972  105.711  123.203  131.669...
     150.697  179.323  203.212  226.505  249.633];
interp1(t,p,1975)
x = 1900:1:2000;
y = interp1(t,p,x,'spline');
plot(t,p,'o',x,y)

例 'cubic' method立方插值法绘制图像

clear
clc
x = 0:.2:pi; y = sin(x);
pp = interp1(x,y,'cubic','pp'); %得到立方插值法的分段多项式pp,pp.breaks可以看到各段端点值,pp.coefs为每段多项式(三次)系数 
xi = 0:.1:pi;
yi = ppval(pp,xi); %根据分段多项式pp计算插值
plot(x,y,'ko'), hold on, plot(xi,yi,'r:'), hold off

曲线拟合
polyfit

P=polyfit(X,Y,N) X、Y为要拟合的数据,N代表N次多项式,返回值P为一个多项式
[P,S]=polyfit(X,Y,N) 除了返回一个多项式P,还返回一个结构体S
S.R:先根据输入的x构建范德蒙矩阵V,然后进行QR分解,得到的上三角矩阵
S.df:df=length(y)-(n+1)。df>0时,为超定方程组的求解,即拟合点数比未知数(p(1)~p (n+1))多
S.normr:残差范数,normr=norm(y-V*p),此处的p为求解之后的数值。
[P,S,MU]=polyfit(X,Y,N) 除了返回多项式P和结构体S,还返回结构体MU,MU为列向量,存的是X的均值和标准差MU(1)=mean(X),MU(2)=std(X)


clear
clc
x=0:0.1:1;
y=-2*x.^2+0.5
y1=y+(rand(1,length(y))-0.5)/50  %随机数加入偏差
[P,S,MU]=polyfit(x,y1,2)
plot(x,y,'o:',x,polyval(P,x),'r-')





  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值