当前位置:
文档之家› 数值分析实验报告(一)(完整)
数值分析实验报告(一)(完整)
ifi≠j
li(t)li(t)*(t-xi)/(xi-xj);
endif
endfor
resultresult+yi*li(t) ;
endfor
returnresult;
end procedure
Lagrange插值子程序lagr1:
functiony=lagr1(x0,y0,x)%x0为插值点的向量,y0为插值点处的函数值向量,x为未知的点向量
fori=j:n
d(i,j)=(d(i,j-1)-d(i-1,j-1))./(x0(i)-x0(i-j+1));%求差商表矩阵ห้องสมุดไป่ตู้各值
end
end
fork=1:m
z=x(k);
result=d(1,1);
temp=1;
fori=2:n
temp=temp*(z-x0(i-1));
result=result+d(i,i)*temp;
n=length(x0); m=length(x);
fori=1:m
z=x(i);
s=0.0;
fork=1:n
p=1.0;
forj=1:n
ifj~=k
p=p*(z-x0(j))/(x0(k)-x0(j));
end
end
s=p*y0(k)+s;
end
y(i)=s;
End
Newton插值算法公式:
余项为
end
y(k)=result;
end
1.编写拉格朗日插值多项式函数内容为:
functionf=lagfun(x)
a=[0.2,0.4,0.6,0.8,1.0];
b=[0.98,0.92,0.81,0.64,0.38];
fori=1:5
L(i)=1;
forj=1:5
ifj~=i
L(i)=L(i)*(x-a(j))/(a(i)-a(j));
三、实验内容及要求:
1.已知数据如下:
0.2
0.4
0.6
0.8
1.0
0.98
0.92
0.81
0.64
0.38
(1)用MATLAB语言编写按Langrage插值法和Newton插值法计算插值的程序,对以上数据进行插值;(2)利用MATLAB在第一个图中画出离散数据及插值函数曲线。
2.给定函数 ,利用上题编好的Langrage插值程序(或Newton插值程序),分别取3个,5个、9个、11个等距节点作多项式插值,分别画出插值函数及原函数 的图形,以验证Runge现象、分析插值多项式的收敛性。
end procedure
Newton插值子程序 Newton:
functiony=newton(x0,y0,x)%牛顿插值法
n=length(x0); m=length(x);
d=zeros(n,n);%d为差商表矩阵
forj=1:n
d(j,1)=y0(j);%差商表第一列
end
forj=2:n %差商表为下三角矩阵
x=0:0.1:1;
plot(x,newton(x0,y0,x),'r');
legend('离散点','Lagrange插值','Newton插值')图形为:
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;
数值分析实验报告
姓名
学号
系别
数学系
班级
09信息(2)班
主讲教师
王丹
指导教师
王丹
实验日期
专业
信息与计算科学
课程名称
数值分析
同组实验者
无
一、实验名称:
实验一、插值多项式的收敛性实验
二、实验目的:
1.理解插值的基本原理;
2.掌握多项式插值的概念、存在唯一性;
3.编写MATLAB程序实现Lagrange插值和Newton插值,验证Runge现象、分析插值多项式的收敛性。
endfor
forj=1to n
fori=jto n
dij(di,j-1-di-1,j-1)/(xi-xi-j+1);
endfor
endfor
resultd11;
temp1;
fori=1to n
temptemp*(t-xi-1);
resultresult+di,i*temp;
endfor
return result;
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)图像')
end
end
end
f=0;
fori=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
三、实验步骤(或记录)
Lagrange插值法的基本思想:
步骤1:构造 处的插值基函数 ,其中,插值节点 处的插值基函数 为 ;
步骤2:以 作为 的系数,使得 通过插值点 ;
步骤3:把所有的 线性叠加,得到通过所有插值点 的插值函数 。
Lagrange插值伪代码:
给定 个插值点 的情况下,求插值函数 在点 处的函数值。
/*输入参数
*x=(x0,x1,….,xn),插值节点
*y=(y0,y1,…,yn);被插函数f(x)在插值节点处的函数值
*t求插值函数Ln(x)在t处的函数值
*返回值插值函数Ln(x)在t处的函数值
*/
procedureLagrange
result0;
fori=1to n
li(t)1;
forj=1to n
其中 有关.
Newton插值伪代码:
/*输入参数
*x=(x0,x1….,xn),插值节点
*y=(y0,y1,…,yn);被插函数f(x)在插值节点处的函数值
*t求插值函数Pn(x)在t处的函数值
*返回值插值函数Pn(x)在t处的函数值
*/
procedureNewton
forj=0to n
d1jyj;
图形为:
拉格朗日插值在高次插值时同原函数偏差大、存在龙格现象,高次插值多项式不收敛。
五、教师评语(或成绩)
教师签字:王丹2011年月日