福建农林大学数值分析课程实习
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
福建农林大学计算机与信息学院
课程实习报告
课程名称:数值分析课程实习
实习题目:多项式插值
姓名:
系:数学与应用数学
专业:数学与应用数学
年级:2008级
学号:
指导教师:
职称:
2011年4月22日
福建农林大学计算机与信息学院数学类课程实习报告结果评定
附件三:实习报告目录格式
目录1……………………………………………………………………………页码1.1…………………………………………………………………………页码2……………………………………………………………………………页码2.1………………………………………………………………………页码
多项式插值
1. 实习的目的和任务
掌握拉格朗日插值多项式、牛顿插值多项式、三次样条插值的理论和构造方法。对同一组已知的数据,用不同的插值法构造插值函数作为近似函数,并作一条通过这些数据点的光滑曲线,对各种插值结果进行初步的分析,讨论不同插值法的优缺点。
2. 实习要求
1、多项式插值:比较lagarange 插值,牛顿插值,牛顿向前插值,样条函数的区别及优缺点;
2、通过实例解释区别;
3、求某个点的函数值;
3. 实习地点
田家炳实验楼513
4. 主要仪器设备(实验用的软硬件环境)
方正商祺PC ,MATLAB7.0
5. 实习内容
例:给出()ln f x x =的数值表,用Lagrange 插值,牛顿插值,牛顿向前插值,三次样条插值求解,并计算ln 0.54的值。
5.1由已给的插值点,根据所编程序,用Lagrange 插值法求解
Lagrange 插值多项式:
011011()()()()()(0,1...,)()()()()
n k k k k n k k k k k x x x x x x x x k l x n x x x x x x x x -+-+----=
=----
(()()n
n k k i k L x f x l x y ==
=∑
) (j=0,1,...,n)
Lagrange 插值余项:
(1)
()
()()()()(1)!
n n n f
R x f x P x x n ξω+=-=
+
建立Lagrange.M文件
function yy=Lagrange (x,y,xx)
%用途:拉格朗日插值法求解
%格式:yy= Language (x,y,xx), x是节点向量,y是节点对应的函数值向量,% xx是插值点(可以是多个),,yy返回插值结果
m=length(x);n=length(y);
if m~=n, error('向量x与y的长度必须一致');
end
s=0;
for i=1:n
t=ones(1,length(xx));
for j=1:n
if j~=i
t=t.*(xx-x(j))/(x(i)-x(j));
end
end
s=s+t*y(i);
end
yy=s;
end
x=[0.4,0.5,0.6,0.7,0.8];
y=[-0.916291,-0.693147,-0.510826,-0.357765,-0.223144];
x1=[0.4,0.5,0.6,0.7,0.8];
y1= Lagrange (x,y,x1)
t=0.4:0.0001:0.8;
z=log(t);
plot(x,y,'ro',x1,y1,'r:',t,z)
legend('插值节点','Lagrange插值','ln x')
y0=Lagrange (x,y,0.54)
y1 =
-0.9163 -0.6931 -0.5108 -0.3578 -0.2231
y0 =
-0.6160
由此求得Lagrange多项式
432
=-+-+-+-+-,()ln
P x x x x x
()0.91630.69310.51080.35780.2231
=在
f x x
x=的值为-0.6160;图形如下
0.54
0.40.450.50.550.60.650.70.750.8
5.2由已给的插值点,根据所编程序,用Newton插值法求解
Newton 插值多项式
+-+=)](,[)()(0100x x x x f x f x N n )())(](,,,[11010----+n n x x x x x x x x x f
建立Newton .M 文件
function f=Newton(x,y,x0) syms t;
if(length(x)==length(y)) n=length(x); c(1:n)=0.0; else
disp('x 和y 的维数不相等!'); return; end f=y(1); y1=0; l=1;
for(i=1:n-1) for(j=i+1:n)
y1(j)=(y(j)-y(i))/(x(j)-x(i)); end
c(i)=y1(i+1); l=l*(t-x(i)); f=f+c(i)*l; simplify(f); y=y1; if(i==n-1)
if(nargin==3)
f=subs(f,'t',x0); else
f=collect(f); f=vpa(f,6); end end end
x=[0.4,0.5,0.6,0.7,0.8];
y=[-0.916291,-0.693147,-0.510826,-0.357765,-0.223144]; x1=[0.4,0.5,0.6,0.7,0.8];