matlab计算拉格朗日牛顿及分段线性插值的程序.doc
《工程常用算法》综合实践作业二
完成日期:2013年4月14日
班级
学号
姓名
主要工作说明
自评成绩
0718
2010071826
崔洪亮
算式与程序的编写
18
0718
2010071815
侯闰上
流程图的编辑,程序的审查
0718
2010071809
赵化川
报告的整理汇总
一.作业题目:三次样条插值与分段插值
飞机下轮廓线数据如下:
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
飞机下轮廓线形状大致如下列图所示:
机翼
下轮廓线
要求分别用拉格朗日插值法、Newton插值法、分段线性插值法和三次样条插值法计算x每改变0.5时y的值,即x取0.5,1,1.5,…,14.5时对应的y值。比拟采用不同方法的计算工作量、计算结果和优缺点。
二.程序流程图及图形
1.拉格朗日插值法
2.牛顿插值法
3.分段线性插值法
matlab程序及简要的注释〔m文件〕
拉格朗日插值法2.牛顿插值法
functionf=lang(x,y,x0)%x为数据点的x坐标向量
functionf=lang(x,y,x0)
%x为数据点的x坐标向量
%y为数据点的y坐标向量
functionf=newdun(x,y,xi)
%x为数据点的x坐标向量
%y为数据点的y坐标向量
%x0为插值点的x坐标%f为求得的拉格朗日插值多项式if
%x0为插值点的x坐标
%f为求得的拉格朗日插值多项式
if(length(x)==length(y))
n=length(x);
else
disp(ThelengthsofXangY
mustbenotequal!)
return;
end%检错
f=0;
fori=1:n
l=1;
forj=1:i-1
l=l.*(x0-x(j))/(x(i)-x(j));
end;
forj=i+1:n
l=l.*(x0-x(j))/(x(i)-x(j));
%计算拉格朗日基函数
end;
f=f+l*y(i);
%计算拉格朗日插值函数
end
Return
%xi为插值点的x坐标
%f为求得的均差牛顿插值多项式
if(length(x)==length(y))
n=length(x);
else
disp(ThelengthsofXangY
mustbenotequal!);
return;
end%检错
Y=zeros(n);
Y(:,1)=y;
fora=1:n-1
forb=1:n-a
Y(b,a+1)=(Y(b+1,a)-Y(b,a))/
(x(b+a)-x(b));%计算均差函数〔差商〕
end
end
f=0;
fori=1:n
z=1;
forj=1:i-1
z=z.*(xi-x(j));%计算多项式函数
end
f=f+Y(1,i)*z;%计算牛顿插值函数
end
fora=1:n-1