数值计算实验报告
- 格式:doc
- 大小:86.44 KB
- 文档页数:6
数值计算实习A报告
(数值计算实习报告)
迭代函数对方程求解过程收敛性的影响
一、实验目的:
初步了解非线性方程的简单迭代法及其收敛性,体会迭代函数对收敛性的影响,知道当迭代函数满足什么条件时,迭代法收敛。
二、实验内容:
用简单迭代法求方程 012)(3xxxf的根。
方案一: 化012)(3xxxf为等价方程 )(213xxx
方案二: 化012)(3xxxf为等价方程 )(123xxx
三、实验要求:
(1)分别对方案一、方案二取初值00x,迭代10次,观察其计算值,并加以分析。
(2)用MATLAB内部函数solve直接求出方程的所有根,并与(1)的结果进行比较。
四、迭代法程序
function[k,piancha,xdpiancha,xk]=diedai(x0,k)
x(1)=x0;
for i=1:k
x(i+1)=fun1(x(i));
piancha=abs(x(i+1)-x(i));xdpiancha=piancha/(abs(x(i+1))+eps);
i=i+1;xk=x(i);[(i-1) piancha xdpiancha xk]
end
if (piancha>1)&(xdpiancha>0.5)&(k>3) disp('此迭代序列发散,请重新输入新的迭代公式')
return;
end
if (piancha<0.001)&(xdpiancha<0.0000005)&(k>3)
disp('此迭代序列收敛,且收敛速度较快')
return;
end
p=[(i-1) piancha xdpiancha xk]'
五、实验结果:
1、方案一:
化012)(3xxxf为等价方程 )(213xxx
建立M文件fun1.m的文件
function y1=fun1(x)
y1=((x+1)./2).^(1/3)
在MATLAB窗口输入程序
>> [k,piancha,xdpiancha,xk]=diedai(0,10)
运行后输出结果
y1 =0.7937
ans =1.0000 0.7937 1.0000 0.7937
y1 =0.9644
ans =2.0000 0.1707 0.1770 0.9644
y1 = 0.9940
ans =3.0000 0.0297 0.0298 0.9940
y1 =0.9990
ans =4.0000 0.0050 0.0050 0.9990
y1 = 0.9998
ans =5.0000 0.0008 0.0008 0.9998 y1 =1.0000
ans =6.0000 0.0001 0.0001 1.0000
y1 = 1.0000
ans =7.0000 0.0000 0.0000 1.0000
y1 = 1.0000
ans =8.0000 0.0000 0.0000 1.0000
y1 =1.0000
ans =9.0000 0.0000 0.0000 1.0000
y1 =1.0000
ans =10.0000 0.0000 0.0000 1.0000
此迭代序列收敛,且收敛速度较快
k =10 piancha = 1.0685e-07 xdpiancha =1.0685e-07 xk =1.0000
2、方案二:
化012)(3xxxf为等价方程 )(123xxx
(1)建立M文件fun,m的文件
function y1=fun1(x)
y1=2.*(x.^3)-1
(2)在MATLAB窗口输入程序
>> [k,piancha,xdpiancha,xk]=diedai(0,10)
(3)运行后输出结果
y1 =-1
ans =1.0000 1.0000 1.0000 -1.0000
y1 =-3
ans =2.0000 2.0000 0.6667 -3.0000
y1 =-55
ans =3.0000 52.0000 0.9455 -55.0000
y1 =-332751
ans =1.0e+05 *
0.0000 3.3270 0.0000 -3.3275 y1 =-7.3687e+16
ans =1.0e+16 *
0.0000 7.3687 0.0000 -7.3687
y1 =-8.0019e+50
ans =1.0e+50 *
0.0000 8.0019 0.0000 -8.0019
y1 =-1.0247e+153
ans =1.0e+153 *
0.0000 1.0247 0.0000 -1.0247
y1 =-Inf
ans =8 Inf NaN -Inf
y1 =-Inf
ans =9 NaN NaN -Inf
y1 =-Inf
ans =10 NaN NaN -Inf
p = 10 NaN NaN -Inf
k = 10 piancha =NaN xdpiancha = NaN xk =-Inf
3、用MATLAB内部函数solve直接求
(1)输入程序
>> x=solve('2.*(x.^3)-x-1=0')
运行后输出的结果
x =1.
-.50000000000000000000000000000000+.50000000000000000000000000000000*i
-.50000000000000000000000000000000-.50000000000000000000000000000000*i
表1 2个迭代公式的计算结果 迭代第10次的偏差 迭代第10次的相对偏差 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10
方案一 1.0685e-07 1.0685e-07 0.7937 0.9644 0.9940 0.9990 0.9998 1.0000 1.0000 1.0000 1.0000 1.0000
方案二 NaN NaN -1 -3 -55 -332751
-7.3687e+16 -8.0019e+50 -1.0247e+153 -Inf -Inf -Inf
六、实验结果分析:
从表1可以看出,方案一收敛很快,偏差和偏差的相对误差几乎为零;方案二根本不收敛,它的偏差piancha已经NaN且相对误差xdwucha的知也已经NaN。由此可见,迭代序列的敛散性与迭代公式有关,也与相邻两次迭代的偏差和偏差的相对误差有关,他们的值越小,迭代序列的收敛速度越快。
由实验结果看出用MATLAB内部函数solve直接求得方程的跟有三个,计算结果准确,并且根算的比较全。但用solve命令求解方程根的方法有缺点,它不能求出周期函数)(xf对应的方程)(xf=0的全部根。