例1 机床加工
待加工零件的外形根据工艺要求由一组数据(x, y)给出(在平面情况下),用程控
铣床加工时每一刀只能沿x 方向和y 方向走非常小的一步,这就需要从已知数据得到加工所要求的步长很小的(x, y)坐标。
表1 中给出的x, y数据位于机翼断面的下轮廓线上,假设需要得到x坐标每改变
0.1 时的y坐标。
试完成加工所需数据,画出曲线,并求出x = 0处的曲线斜率和
13 ≤x ≤15范围内y的最小值。
表 1
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、分段线性和三次样条三种插值方法计算。
解编写以下程序:
clc,clear
x0=[0 3 5 7 9 11 12 13 14 15];
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);
fprintf('比较一下不同插值方法和边界条件的结果:\n')
fprintf('x y1 y2 y3 y4 y5\n')
xianshi=[x',y1',y2',y3',y4',y5'];
fprintf('%f\t%f\t%f\t%f\t%f\t%f\n',xianshi')
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')
dyx0=ppval(fnder(pp1),x0(1)) %求x=0处的导数
ytemp=y3(131:151);
index=find(ytemp==min(ytemp));
xymin=[x(130+index),ytemp(index)]
计算结果略。
可以看出,拉格朗日插值的结果根本不能应用,分段线性插值的光滑性较差(特别
是在x = 14附近弯曲处),建议选用三次样条插值的结果。