MATLAB 一维插值

来源:互联网 发布:热力学模拟软件 编辑:程序博客网 时间:2024/05/16 05:18

MATLAB 插值

 

常用的多项式插值法:


1.拉格朗日插值

拉格朗日插值是一簇插值的基本公式,由n+1n次插值基函数构成,即n次插值多项式。

一般:


拉格朗日插值保证了曲线的光滑性,但高次插值不稳定。一般把这种次数越高而插值结果越偏离原函数的现象称为龙格现象。所以在不熟悉曲线运动趋势的前提下,不要轻易使用高次插值。

 

2.分段线性插值

将插值区间分为若干个小区间,然后每个小区间的首尾两个点直接用直线相连。

分段线性插值虽然克服了高次插值的不稳定,但只能保证曲线连续,不能保证曲线光滑。

 

3.三次样条插值

该曲线可以看做由一段一段的三次多项式曲线拼凑而成,在拼接处,不仅函数自身是连续的,且他的一阶、二阶导数也是连续的。


MATLAB中常用的几个插值函数

interp1(x,y,xx)

x,y是长度相同的向量,根据分段线性插值的方法来求得x,y之间的函数关系y=f(x),接着根据函数f(x)来计算f(xx)

 

interp1(x,y,xx,’method’)

可以用的method有:

’linear’     线性插值

‘nearest’    最邻近插值

‘spline’     三次样条插值

‘cubic’      三次插值

x,y是长度相同的向量,根据’method’中的方法来求得x,y之间的函数关系y=f(x),接着根据函数f(x)来计算f(xx),如果省略’method’不写,则表示默认使用线性插值的方法。


spline(x,y,xx)

等同于interp1(x,y,xx,’spline’),但是参数必须是向量。

 

spline(x,y)

计算三次样条函数的系数。

例:

>> x=linspace(0,2*pi,40);>> y=sin(x);>> pp=spline(x,y)pp =       form: 'pp'    breaks: [1x40 double]     coefs: [39x4 double]    pieces: 39     order: 4       dim: 1

form 为样条函数的类型,pp 表示piecewise polynomial ,即分段多项式

breaks 为分段区间节点矩阵

coefs 为分段区间上插值多项式系数矩阵

pieces 为分段数

order 为多项式阶数

dim 为多项式维数

用法:pp.coefs的结果是每个分段区间上多项式系数矩阵

 

ppval(pp,xx)

如果定义三次样条函数为pp=spline(x,y),那么ppval(pp,xx)得到的结果与spline(x,y,xx)得到的结果是一样的。


例:

>> x=0:.25:1;>> y=[sin(x);cos(x)];>> xx=0:0.1:1;>> pp=spline(x,y);>> pp.coefsans =   -0.1588   -0.0039    1.0005         0    0.0515   -0.5206    0.0026    1.0000   -0.1588   -0.1231    0.9688    0.2474    0.0515   -0.4819   -0.2481    0.9689   -0.1292   -0.2422    0.8775    0.4794    0.1058   -0.4433   -0.4794    0.8776   -0.1292   -0.3390    0.7322    0.6816    0.1058   -0.3639   -0.6812    0.7317>> yy=ppval(pp,xx);>> subplot(1,3,1);>> plot(x,y(1,:),'ob',xx,yy(1,:),'r-');>> subplot(1,3,2);>> plot(x,y(2,:),'ob',xx,yy(2,:),'r-')>> subplot(1,3,3);>> plot(x,y,'ob',xx,yy,'r-')


例:

>> x=pi*[0:0.5:2];

>> y=[0 1 0 -1 0 1 0;

1 0 1 0 -1 0 1];

>> pp=spline(x,y);

>> yy=ppval(pp,linspace(0,2*pi,101));

>> plot(yy(1,:),yy(2,:),'b-',y(1,2:5),y(2,2:5),'or'),axis equal



这个题目是请教一位网上大神的,以下内容是贴过来的。

x0~2,步长是0.5

y的第一行表示sin(x),第二行表示cos(x),但数据长度超过了x的长度,超过的实际上用不到。

spline(x,y)用上述数据进行三次样条函数插值,得到的结果(系数矩阵)保存在p
ppval() 则是用拟合结果计算新的值,0~2,步长更小。

 

最后把(cos sin)画出来,就是一个圆

yy(1,:) 表示第一行所以元素

y(1,2:5) 表示第一行,2~5列所有元素。

 

另外:

axis equal 将两坐标设为相等。

axis auto 将坐标轴设为自动返回缺省值。

axis([xmin xmax ymin ymax]) 用来标注输出的图线的最大值最小值。


0 0