插值法
拉格朗日插值
分段插值
由于高次函数往往拟合的情况反而不好,所以用两点之间的直线代替其值进行插值
三次样条插值
更加光滑,节点处二阶可导
代码汇总
interp1(x0,y0,x,'cubic')%分段三次多项式插值,第三个参数不写则为普通分段插值
interp1(x0,y0,x,'spline')%三次样条插值,子区间使用三次多项式,节点处二阶可导
interp1(x0,y0,x,'nearest')%就近插值,使某点处的值为最近的点的值
示例:
x0=linspace(-5,5,20);
y0=x0.^2.*sin(x0);
x=linspace(-5,5,1000);
y1=interp1(x0,y0,x);
y2=interp1(x0,y0,x,'cubic');
y3=interp1(x0,y0,x,'spline');
plot(x,y1,x,y2,x,y3)
legend("线性插值","分段三次插值","三次样条插值");
二维插值
%二维插值
%method使用方式同一维情况
%整齐
interp2(x0,y0,z0,x,y,'method')
%散乱时
griddata(x0,y0,z0,x,y,'method')
%示例:
x=0:2.5:10;
h=[0:30:60]';
T=[95,14,0,0,0;88,48,32,12,6;67,64,54,48,41];
mesh(x,h,T)%网格图
xi=0:10;
hi=[0:2:50]';
Ti=interp2(x,h,T,xi,hi,'linar');
mesh(xi,hi,Ti)
插值方式 | 效果 | 适用情况 |
---|---|---|
分段插值 | 较平滑 | 大多数 |
微分方程
syms x(t) t;
eq=diff(x,t)==-4*x+sin(2*t);
x(t)=dsolve(eq)
添加约束条件