数值插值
一维插值
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-')