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-')





发布了454 篇原创文章 · 获赞 311 · 访问量 238万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览