数值分析实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一、误差分析
一、实验目的
1.通过上机编程,复习巩固以前所学程序设计语言及上机操作指令;
2.通过上机计算,了解误差、绝对误差、误差界、相对误差界的有关概念;
3.通过上机计算,了解舍入误差所引起的数值不稳定性。
二.实验原理
误差问题是数值分析的基础,又是数值分析中一个困难的课题。在实际计算中,如果选用了不同的算法,由于舍入误差的影响,将会得到截然不同的结果。因此,选取算法时注重分析舍入误差的影响,在实际计算中是十分重要的。同时,由于在数值求解过程中用有限的过程代替无限的过程会产生截断误差,因此算法的好坏会影响到数值结果的精度。
三.实验内容
对20,,2,1,0 =n ,计算定积分
⎰+=10
5dx x x y n
n .
算法1:利用递推公式 151--=n n y n y , 20,,2,1 =n ,
取 ⎰≈-=+=1
00182322.05ln 6ln 51dx x y .
算法2:利用递推公式
n n y n y 51511-=
- 1,,19,20 =n .
注意到 ⎰⎰⎰=≤+≤=10
10202010201051515611261dx x dx x x dx x , 取
008730.0)12611051(20120≈+≈y .: 四.实验程序及运行结果
程序一:
t=log(6)-log(5);
n=1;
y(1)=t;
for k=2:1:20
y(k)=1/k-5*y(k-1);
n=n+1;
end
y
y =0.0884
y =0.0581
y =0.0431
y =0.0346
y =0.0271
y =0.0313
y =-0.0134
y =0.1920
y =-0.8487
y =4.3436
y =-21.6268
y =108.2176
y =-541.0110
y =2.7051e+003
y =-1.3526e+004
y =6.7628e+004
y =-3.3814e+005
y =1.6907e+006
y =-8.4535e+006
y =4.2267e+007
程序2:
y=zeros(20,1);
n=1;
y1=(1/105+1/126)/2;y(20)=y1; for k=20:-1:2
y(k-1)=1/(5*k)-(1/5)*y(k);
n=n+1;
end
运行结果:y =
0.0884
0.0580
0.0431
0.0343
0.0285
0.0212
0.0188
0.0169
0.0154 0.0141 0.0130 0.0120 0.0112 0.0105 0.0099 0.0093 0.0089
实验二、插值法
一、实验目的
1、理解插值的基本概念,掌握各种插值方法,包括拉格朗日插值和牛顿插值等,注意其不同特点;
2、通过实验进一步理解并掌握各种插值的基本算法。
二.实验原理
插值法是函数逼近的一种重要方法,它是数值积分、微分方程数值解等数值计算的基础与工具,其中多项式插值是最常用和最基本的方法。拉格朗日插值多项式的优点是表达式简单明确,形式对称,便于记忆,它的缺点是如果想要增加插值节点,公式必须整个改变,这就增加了计算工作量。而牛顿插值多项式对此做了改进,当增加一个节点时只需在原牛顿插值多项式基础上增加一项,此时原有的项无需改变,从而达到节省计算次数、节约存储单元、应用较少节点达到应有精度的目的。
三.实验内容
1、 已知函数表 i x 0.56160 0.56280 0.56401 0.56521 i y 0.82741 0.82659 0.82577 0.82495
用二次拉格朗日插值多项式求5635.0 x 时的函数近似值。
2、 已知函数表
i x 0.4 0.55 0.65 0.8 0.9
i y 0.41075 0.57815 0.69675 0.88811 1.02652
用牛顿插值多项式求)596.0(3N 和)895.0(4N 。
四.实验程序及运行结果
1.程序如下:
function [y,R]=lagranzi(X,Y ,x,M)
n=length(X); m=length(x);
for i=1:m
z=x(i);s=0.0;
for k=1:n
p=1.0; q1=1.0; c1=1.0;
for j=1:n
if j~=k
p=p*(z-X(j))/(X(k)-X(j));
end
q1=abs(q1*(z-X(j)));c1=c1*j;
end
s=p*Y(k)+s;
end
y(i)=s;
end
R=M*q1/c1;
在MA TLAB工作窗口输入程序:
>> x=0.5635;
>> M=1;
>> X=[0.56280,0.56401];
>> Y=[0.82659,0.82577];
>> [y,R]=lagranzi(X,Y,x,M)
实验结果如下:
y =0.8261
R =1.7850e-007
2.程序如下:
function [y,R]= newcz(X,Y,x,M)
n=length(X); m=length(x);
for t=1:m
z=x(t); A=zeros(n,n);A(:,1)=Y';
s=0.0; p=1.0; q1=1.0; c1=1.0;
for j=2:n
for i=j:n A(i,j)=(A(i,j-1)-A(i-1,j-1))/(X(i)-X(i-j+1));
end
q1=abs(q1*(z-X(j-1)));c1=c1*j;
end
C=A(n,n);q1=abs(q1*(z-X(n)));
for k=(n-1):-1:1
C=conv(C,poly(X(k)));d=length(C); C(d)=C(d)+A(k,k);
end
y(k)= polyval(C, z);
end
R=M*q1/c1;
在MA TLAB工作窗口输入程序:
三次牛顿差值程序如下:
>> X=[0.4,0.55,0.6];
>> Y=[0.41075,0.57815,0.69675];
>> [y,R]= newcz(X,Y,x,M)
实验结果如下:
y =0.6861
R =6.0107e-006
四次牛顿差值程序如下:
>> x=0.895;