当前位置:文档之家› 数值分析(计算方法)实验一

数值分析(计算方法)实验一

《数值分析》 课程实验指导书
实验一 函数插值方法
一、问题提出
对于给定的一元函数)(x f y =的n+1个节点值(),0,1,
,j j y f x j n ==。

试用
Lagrange 公式求其插值多项式或分段二次Lagrange 插值多项式。

数据如下:
(1)
求五次Lagrange 多项式5L ()x ,和分段三次插值多项式,计算(0.596)f ,(0.99)f 的值。

(提示:结果为(0.596)0.625732f ≈, (0.99) 1.05423f ≈ )
(2)
试构造Lagrange 多项式6L ()x ,计算的(1.8)f ,(6.15)f 值。

(提示:结果为(1.8)0.164762f ≈, (6.15)0.001266f ≈ )
二、要求
1、 利用Lagrange 插值公式
00,()n n
i n k k i i k k i x x L x y x x ==≠⎛⎫-= ⎪-⎝⎭∑∏编写出插值多项式程序; 2、 给出插值多项式或分段三次插值多项式的表达式;
3、 根据节点选取原则,对问题(2)用三点插值或二点插值,其结果如何;
4、 对此插值问题用Newton 插值多项式其结果如何。

四、实验分析:
Lagrange 插值多项式的表达式:
1,,2,1,)()()(,
)()(1111+=--==∏∑+≠=+=n i x x x x x l x l y x L n i j j j i j i n i i i 。

其中)(x l i 被称为插值基函数,实际上是一个n 次多项式。

)(x l i 的这种表示具有较好的对称性。

公式具有两大优点:(1)求插值多项式,不需要求解线性方程组,当已知数据点较多时,此公式更能显示出优越性。

(2)函数值可以用符号形式表示,数据点未确定的纵坐标可用多项式表示。

Newton 插值多项式如下:
1
0010,()()[,,]()k n n j k k j j k N x f x f x x x x -==≠=+•-∑∏ 其中: 00,0()()[,,]k i k i i j j j i k f x x x f x x ==≠-=∑∏
Newton 插值多项式的优点是:当每增加一个节点时,只增加一项多项式。

三、实验程序及注释
1、m 程序:
function [c,l]=lagran(x,y)
% x 为n 个节点的横坐标组成的向量,y 为纵坐标所组成的向量
% c 为所得插值函数的系数所组成的向量
w=length(x);
n=w-1;
l=zeros(w,w);
for k=1:n+1
v=1;
for j=1:n+1
if k~=j
v=conv(v,poly(x(j)))/(x(k)-x(j));
end
end
l(k,:)=v;
end
c=y*l;
function fi=Lagran_(x,f,xi)
fi=zeros(size(xi));
n=length(f);
for i=1:n
z=ones(size(xi));
for j=1:n
if i~=j,z=z.*(xi-x(j))/(x(i)-x(j));
end
end
fi=fi+z*f(i);
end
Return
2、主程序:
对于数据(1),在主窗口输入:
x=[0.4 0.55 0.65 0.80 0.95 1.05]; y=[0.41075 0.57815 0.68675 0.90 1.00 1.25382];
lagran (x,y)
ans =
143.8486 -506.0836 694.2890 -463.5132 151.5174 -18.9859
format long
xi=[0.596,0.990]; yi=Lagran_(x,y,xi)
yi =
0.61916350788547 1.05159915747938
xx=0.3:0.01:1.1
[c,l]=lagran(x,y)
yy= polyval(c,xx)
plot(xx,yy, x,y,'o');
得出在拉格朗日的插值多项式曲线图,如图1-1所示:
图1-1
由此得到所求的lagrange 多项式为:
9859.185174.1515132.4632890.6940836.5068486.143L 23455
-+-+-=x x x x x x )( 对于数据(2),在主窗口输入:
x=[1 2 3 4 5 6 7];
y=[0.368 0.135 0.050 0.018 0.007 0.002 0.001];
lagran (x,y)
ans =
0.0001 -0.0016 0.0186 -0.1175 0.4419 -0.9683 0.9950
xi=[1.8,6.15]; yi=Lagran_(x,y,xi)
yi =
0.16476 0.0012658
xx=0:7
[c,l]=lagran(x,y)
yy= polyval(c,xx)
plot(xx,yy, x,y,'o');
得出在拉格朗日的插值多项式曲线图,如图1-2所示:
图1-2
所以得到所求的lagrange 多项式为:
9950.09683.04419.01175.00186.00016.0001.0L 234566--+-+-=x x x x x x x )
(对于要求(3),在主窗口输入:
x=[0.4,0.65,0.95];
y=[0.41075,0.69675,1.00];
[c,l]=lagran(x,y)
c =
-0.24212121212121 1.39822727272727 -0.10980151515152
xx=04:0.01:1.0
yy= polyval(c,xx)
plot(xx,yy, x,y,'o');
得出在拉格朗日的插值多项式曲线图,如图1-3所示:
图1-3
xi=[0.596,0.990]; yi=Lagran_(x,y,xi)
yi =
0.63753661090909 1.03714048484848
4.1基于Newton插值多项式对插值问题的分析。

function[c,d]=newploy(x,y)
% 这里x为n个节点的横坐标所组成的向量,y为纵坐标所组成的向量% c为所求的Newton插值多项式的系数构成的向量
n=length(x);
d=zeros(n,n);
d(:,1)=y';
for j=2:n
for k=j:n
d(k,j)=(d(k,j-1)-d(k-1,j-1))/(x(k)-x(k-j+1));
end
end
c=d(n,n);
for k=(n-1):-1:1
c=conv(c,poly(x(k)));
m=length(c);
c(m)=c(m)+d(k,k);
end
x=[0.4 0.55 0.65 0.80 0.95 1.05];
y=[0.41075 0.57815 0.68675 0.90 1.00 1.25382];
>> newploy(x,y)
ans =
143.8486 -506.0836 694.2890 -463.5132 151.5174 -18.9859
三、目的和意义
1、学会常用的插值方法,求函数的近似表达式,以解决其它实际问题;
2、明确插值多项式和分段插值多项式各自的优缺点;
3、熟悉插值方法的程序编制;
4、如果绘出插值函数的曲线,观察其光滑性。

五、实验步骤:
1.进入C或matlab开发环境;
2.根据实验内容和要求编写程序;
3.调试程序;
4.运行程序;
5.撰写报告,讨论分析实验结果.。

相关主题