2020年中国大学生数学建模竞赛备赛(十)

MATLAB的插值应用

一维插值函数

y=interp1(x0,y0,x,'method');

//其中,method指定插值的方法,默认为线性插值。其值可为:
//'nearest'  最近项插值
//'linear'   线性插值
//'spline'   立方样条插值
//'cubic'    立方插值
//所有的插值方法要求$x_0$是单调的。
//当$x_0$是等间距时,可以使用快速插值法,格式是在方法对应的字符串英文前面加上一个星号‘*’。

三次样条插值

在MATLAB中已知的数据点称为断点。如果三次样条插值没有边界点,最常用的就是采用not_a_knot条件。该条件强迫第一个和第二个多项式的三阶导数相等,倒数第二和倒数第一个也是如此。
具体使用如下:

y=interp1(x0,y0,x,'spline');
y=spline(x0,y0,x);
pp=csape(x0,y0,conds);
pp=csape(x0,y0,conds,valconds);y=ppval(pp,x);//推荐使用该命令
//其中,x0,y0是已知的数据点,x是插值点,y是插值点函数值
//下面是对于csape函数的解析
pp=csape(x0,y0);//使用的是默认的边界条件,拉格朗日边界条件
pp=csape(x0,y0,conds,valconds);//conds指定边界条件,取值如下:
//'complete'   边界为一阶导数,一阶导数的值在valconds参数中给出,若忽略该参数,则按默认情况处理
//'not_a_knot'非扭结边界条件
//'periodic'周期条件
//'second'边界条件为二阶导数,具体用法与一阶导数相同
//'variational'设置边界的二阶导数值为[0,0],也是默认值
//对于一些特殊的边界条件,可以通过conds的一个1*2矩阵来表示,conds元素只能取0、1、2
//conds(i)=j;表示给定端点i的j阶导数,第一个元素表示左边界的条件,第二个元素表示右边界的条件

二维插值

1、插值节点为网格节点:
已知 m ∗ n m*n mn个节点: ( x i , y j , z i j ) ( i = 1 , 2 , . . . , m ; j = 1 , 2 , . . . , n ) (x_i,y_j,z_ij)(i=1,2,...,m;j=1,2,...,n) (xi,yj,zij)(i=1,2,...,m;j=1,2,...,n),且 x 1 < . . . < x m ; y 1 < . . . y n x_1<...x1<...<xm;y1<...yn。求解的是 ( x , y ) (x,y) (x,y)处的插值。

z=interp2(x0,y0,z0,x,y,'method');

其中, x 0 , y 0 x_0,y_0 x0,y0分别表示 m m m维和 n n n维向量; z 0 z_0 z0表示为 n ∗ m n*m nm矩阵,表示节点值; x , y x,y x,y表为一维数组,表示插值点,它们的方向不同,一个是行向量,一个是列向量; z z z为矩阵,它的行数为 y y y的维数,列数为 x x x的维数,表示得到的插值。
如果是三次样条插值

pp=csape({x0,y0},z0,conds,valconds),z=fnval(pp,{x,y});

其中, x 0 , y 0 x_0,y_0 x0,y0分别是 m m m维和 n n n维向量; z 0 z_0 z0 m ∗ n m*n mn矩阵; z z z为矩阵,它的行数为 x x x的维数,列数为 y y y的维数,表示得到的插值。
注意:三次样条插值函数和通用的插值函数得到的插值矩阵刚好是互为转置的关系。
2、插值节点为散乱节点
已知 n n n个节点,为无序状态,求 ( x i , y i ) (x_i,y_i) (xi,yi)处的插值 z z z

ZI=griddata(x,y,z,XI,YI);

其中, x , y , z x,y,z x,y,z均为 n n n维向量,指明所给数据点的横坐标和纵坐标、竖坐标。 X I , Y I XI,YI XI,YI应是方向不同的向量,一个是行向量,一个是列向量。

参考文献

司守奎,孙玺菁. 数学建模算法与应用. 北京:国防工业出版社,2011.

你可能感兴趣的:(matlab,数学建模)