条件,第二个元素表示右边界的条件,conds=[2,1]表示左边界是二阶导数,右边界是一阶导数,对应的值由valconds给出。
详细情况请使用帮助help csape。 例1 机床加工
待加工零件的外形根据工艺要求由一组数据(x,y)给出(在平面情况下),用程控铣床加工时每一刀只能沿x方向和y方向走非常小的一步,这就需要从已知数据得到加工所要求的步长很小的(x,y)坐标。
表中给出的x,y数据位于机翼断面的下轮廓线上,假设需要得到x坐标每改变0.1时的y坐标。试完成加工所需数据,画出曲线,并求出x?0处的曲线斜率和
13?x?15范围内y的最小值。
x 0 3 5 7 9 11 12 13 14 15 y 0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6
要求用Lagrange、分段线性和三次样条三种插值方法计算。
解 编写以下程序:
x0=[0 3 5 7 9 11 12 13 14 15];
y0=[0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6]; x=0:0.1:15;
y1=lagrange(x0,y0,x);%前面编写的Lagrange插值函数 y2=interp1(x0,y0,x);
y3=interp1(x0,y0,x,'spline'); pp1=csape(x0,y0); y4=ppval(pp1,x);
pp2=csape(x0,y0,'second'); y5=ppval(pp2,x);
[x',y1',y2',y3',y4',y5'] subplot(2,2,1)
plot(x0,y0,'+',x,y1) title('Lagrange') subplot(2,2,2)
plot(x0,y0,'+',x,y2)
title('Piecewise linear') subplot(2,2,3)
plot(x0,y0,'+',x,y3) title('Spline1') subplot(2,2,4)
plot(x0,y0,'+',x,y4) title('Spline2') dx=diff(x); dy=diff(y3); dy_dx=dy./dx; dy_dx0=dy_dx(1) ytemp=y3(131:151); ymin=min(ytemp);
index=find(y3==ymin); xmin=x(index); [xmin,ymin]
计算结果略。
可以看出,拉格朗日插值的结果根本不能应用,分段线性插值的光滑性较差(特
别是在x?14附近弯曲处),建议选用三次样条插值的结果。
1.6 二维插值
前面讲述的都是一维插值,即节点为一维变量