数值分析实验报告(一)(完整)

  • 格式:doc
  • 大小:125.00 KB
  • 文档页数:6

1 数值分析实验报告

姓 名 学 号 系 别 数学系 班级 09信息(2)班

主讲教师 王丹 指导教师 王丹 实验日期 专业 信息与计算科学

课程名称 数值分析 同组实验者 无

一、实验名称:

实验一、插值多项式的收敛性实验

二、实验目的:

1.理解插值的基本原理;

2.掌握多项式插值的概念、存在唯一性;

3.编写MATLAB程序实现Lagrange插值和Newton插值,验证Runge现象、分析插值多项式的收敛性。

三、实验内容及要求:

1.已知数据如下:

ix 0.2 0.4 0.6 0.8 1.0

()ifx 0.98 0.92 0.81 0.64 0.38

(1)用MATLAB语言编写按Langrage插值法和Newton插值法计算插值的程序,对以上数据进行插值;(2)利用MATLAB在第一个图中画出离散数据及插值函数曲线。

2.给定函数21(),[1,1]125fxxx,利用上题编好的Langrage插值程序(或Newton插值程序),分别取3个,5个、9个、11个等距节点作多项式插值,分别画出插值函数及原函数()fx的图形,以验证Runge现象、分析插值多项式的收敛性。

三、实验步骤(或记录)

Lagrange插值法的基本思想:

步骤1: 构造01,,,nxxx处的插值基函数01(),(),,()nlxlxlx,其中,插值节点ix处的插值基函数()ilx为011011()()()()()()()()()iiniiiiiiinxxxxxxxxlxxxxxxxxx;

步骤2:以iy作为()ilx的系数,使得()iiylx通过插值点(,)iixy;

步骤3:把所有的()iiylx线性叠加,得到通过所有插值点(,),0,1,,iixyin的插值函数0()()nniiiLxylx。

Lagrange插值伪代码:

给定n个插值点0011(,),(,),,(,)nnxyxyxy的情况下,求插值函数()nLx在点t处的函数值。

/*输入参数 2 *x=(x0,x1,….,xn), 插值节点

*y=(y0,y1,…,yn); 被插函数f(x)在插值节点处的函数值

*t 求插值函数Ln (x)在t处的函数值

*返回值 插值函数Ln (x)在t处的函数值

*/

procedure Lagrange

result0;

for i=1 to n

li(t)1;

for j=1 to n

if i≠j

li(t) li(t)*(t-xi)/(xi-xj);

end if

end for

resultresult+yi*li(t) ;

end for

return result;

end procedure

Lagrange插值子程序 lagr1:

function y=lagr1(x0,y0,x)%x0为插值点的向量,y0为插值点处的函数值向量,x为未知的点向量

n=length(x0); m=length(x);

for i=1:m

z=x(i);

s=0.0;

for k=1:n

p=1.0;

for j=1:n

if j~=k

p=p*(z-x0(j))/(x0(k)-x0(j));

end

end

s=p*y0(k)+s;

end

y(i)=s;

E nd

Newton插值算法公式 :

001001011()()[,]()[,,,]()()()nnnNxfxfxxxxfxxxxxxxxx

余项为()()()nnRxfxNx)(],,,,[010ininxxxxxxf0(1)()()(1)!niifnxxn

其中 (,)ab与x有关.

Newton插值伪代码: 3 /*输入参数

*x=(x0,x1….,xn), 插值节点

*y=(y0,y1,…,yn); 被插函数f(x)在插值节点处的函数值

*t 求插值函数Pn (x)在t处的函数值

*返回值 插值函数Pn(x)在t处的函数值

*/

procedure Newton

for j=0 to n

d1jyj;

end for

for j=1 to n

for i=j to n

dij (di,j-1-di-1,j-1)/(xi-xi-j+1);

end for

end for

resultd11;

temp1;

for i=1to n

temptemp*(t-xi-1);

resultresult+di,i*temp;

end for

return result;

end procedure

Newton插值子程序 Newton:

function y=newton(x0,y0,x)%牛顿插值法

n=length(x0); m=length(x);

d=zeros(n,n);%d为差商表矩阵

for j=1:n

d(j,1)=y0(j);%差商表第一列

end

for j=2:n %差商表为下三角矩阵

for i=j:n

d(i,j)=(d(i,j-1)-d(i-1,j-1))./(x0(i)-x0(i-j+1));%求差商表矩阵中各值

end

end

for k=1:m

z=x(k);

result=d(1,1);

temp=1;

for i=2:n

temp=temp*(z-x0(i-1));

result=result+d(i,i)*temp;

end

y(k)=result;

end 4

1.编写拉格朗日插值多项式函数内容为:

function f=lagfun(x)

a=[0.2,0.4,0.6,0.8,1.0];

b=[0.98,0.92,0.81,0.64,0.38];

for i=1:5

L(i)=1;

for j=1:5

if j~=i

L(i)=L(i)*(x-a(j))/(a(i)-a(j));

end

end

end

f=0;

for i=1:5

f=f+L(i)*b(i);

end

画图程序内容为:

x0=[0.2,0.4,0.6,0.8,1.0]; y0=[0.98,0.92,0.81,0.64,0.38];

plot(x0,y0,'o')

hold on

grid on

fplot('lagfun',[0,1]);hold on

x=0:0.1:1;

plot(x,newton(x0,y0,x),'r');

legend('离散点','Lagrange插值','Newton插值')图形为:

00.10.20.30.40.50.60.70.80.910.40.50.60.70.80.91

离散点Lagrange插值Newton插值 5 2.Lagrange插值程序

for n=3:2:11

x= -1:0.1:1;

y=1./(1+25.*x.^2);

z=0*x;

x0=-1:2/(n-1):1;

y0=1./(1+25.*x0.^2);

y1=lagr1(x0, y0, x);plot(x, z, 'r', x, y, 'k:' ,x, y1, 'r')

gtext(['Lagr.',num2str(n)])

hold on

end

title('Lagrange')

legend('Largr插值','f(x)图像')

图形为:

-1-0.8-0.6-0.4-0.200.20.40.60.81-1-0.500.511.52Lagr.3Lagr.5Lagr.7Lagr.9Lagr.11Lagrange

Largr插值f(x)图像

6 -1-0.8-0.6-0.4-0.200.20.40.60.81-0.4-0.200.20.40.60.811.21.41.6Lagr10.y=1/(1+25.*x.2)Lagrange

拉格朗日插值在高次插值时同原函数偏差大、存在龙格现象,高次插值多项式不收敛。

五、教师评语(或成绩)

教师签字 :王丹

2011年 月 日