matlab数值分析程序--高等数学,数值代数的matlab实现-文字版, matlab电子书, 和matlab 有关的电子书:

6.7.8 用MATLAB计算有关分段三次样条的误差

6.7.8   用MATLAB计算有关分段三次样条的误差

 

例6.7.12  设函数定义在区间上,取,按等距节点分别作分段线性插值、拉格朗日插值、三次样条插值和分段埃尔米特插值.用MATLAB程序计算各小区间中点处四种插值及其绝对误差和相对误差,作出及其后三种插值函数,插值点和节点的图形,并进行比较.

解  编写并保存名为sanli679.m的M文件如下

h=2*pi/n; x=(-2*pi+h)/2:h:(2*pi-h)/2;

y= tan(cos((sqrt(3)+sin(2*x))./(3+4*x.^2))); x0=-pi:h:pi;X=-pi:h/12:pi;

y0= tan(cos((3^(1/2)+sin(2*x0))./(3+4*x0.^2)));

Y= tan(cos((3^(1/2)+sin(2*X))./(3+4*X.^2)));

YL=lagr1(x0,y0,X); YS=interp1(x0,y0,X,'spline');

YH=interp1(x0,y0,X, 'pchip'); yL=lagr1(x0,y0,x);

yX=interp1(x0,y0,x); yS=interp1(x0,y0,x,'spline');

yH=interp1(x0,y0,x, 'pchip'); RL=abs((y-yL)./y);RS=abs((y-yS)./y);

RH=abs((y-yH)./y); RX=abs((y-yX)./y);RLj=abs(y-yL);mRLj=mean(RLj);

RSj=abs(y-yS);

mRSj=mean(RSj);RHj=abs(y-yH);RXj=abs(y-yX);mRHj=mean(RHj);

mRXj=mean(RXj);mRL=mean(RL);mRX=mean(RX);

mRS=mean(RS);mRH=mean(RH);

CZ=[x' y' yL' yX' yS' yH'],R=[x' RL' RX' RS' RH'],

mR=[mRL' mRX' mRS' mRH']

Rj=[x' RLj' RXj' RSj' RHj'],mRj=[mRLj' mRXj' mRSj' mRHj'],

plot(x0,y0,'bo',x,yS,'r*',X,Y,'k-',X,YL,'g-.',X,YS,'c:', X,YH,'m--'),

legend('节点','三次样条插值点','被插值函数','拉格朗日插值函数','三次样条函数','分段三次埃尔米特插值函数')

title('y=tan(cos((sqrt(3)+sin(2x))/(3+4x^2)))及其三种插值函数,节点和插值点的图形')

运行程序

>> n=7;sanli679

得到各小区间中点处的函数值,分段线性插值、拉格朗日插值、三次样条插值和分段埃尔米特插值及其绝对误差、相对误差和平均值的结果,作出及其后三种插值函数,插值点和节点的图形(略).

 

例6.7.13(机床加工) 待加工零件的外形根据工艺要求由一组数据(x, y)给出(在平面情况下),用程控铣床加工时每一刀只能沿x方向和y方向走非常小的一步,这就需要从已知数据得到加工所要求的步长很小的(x, y)坐标.表 6–15给出的x,y数据位于机翼断面的下轮廓线上(如图6–25),假设需要得到x坐标每改变0.1时的y坐标.试完成加工所需数据,画出曲线,并求出x=0处的曲线斜率和13≤ x≤15范围内y的最小值.

 

表 6–15    机翼断面下轮廓线上的部分数据

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


 

图6–25   机翼断面轮廓线(表 6–15数据用圆点表示)

解 根据上述提出的加工要求,以所给数据为节点,在x=0到x=15范围内求步长为0.1的插值.用四种插值方法试验,编写并保存名为sancili6710.m程序为M文件

x0=[0 3 5 7 9 11 12 13 14 15 ]; x=0:0.1:15;

y0=[0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6 ]; yL=lagr1(x0,y0,x);

yX=interp1(x0,y0,x); yS=interp1(x0,y0,x,'spline');

yH=interp1(x0,y0,x, 'pchip'); CZ=[x' yL' yX' yS' yH']

subplot(4,1,1)

plot(x0,y0,'bo',x,yL,'r'), grid,title('拉格朗日插值')

subplot(4,1,2)

plot(x0,y0,'bo',x,yX,'r'), grid,title('分段线性插值')

subplot(4,1,3)

plot(x0,y0,'bo',x,yS,'r'), grid,title('三次样条')

subplot(4,1,4)

plot(x0,y0,'bo',x,yH,'r'), grid,title('分段埃尔米特插值')

在MATLAB工作窗口输入文件名

>> sancili6710

运行后得到的拉格朗日插值、分段线性插值、三次样条插值和分段埃尔米特插值及其节点的图形,同时还得到拉格朗日插值、分段埃尔米特插值、分段线性插值和三次样条插值的结果(略).

欢迎转载,转载请注明来自一手册:http://yishouce.com/book/3/3060708.html
友情链接It题库(ittiku.com)| 版权归yishouce.com所有| 友链等可联系 admin#yishouce.com|粤ICP备16001685号-1