数值计算实验报告

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

数值计算实习A报告

(数值计算实习报告)

迭代函数对方程求解过程收敛性的影响

一、实验目的:

初步了解非线性方程的简单迭代法及其收敛性,体会迭代函数对收敛性的影响,知道当迭代函数满足什么条件时,迭代法收敛。

二、实验内容:

用简单迭代法求方程 012)(3xxxf的根。

方案一: 化012)(3xxxf为等价方程 )(213xxx

方案二: 化012)(3xxxf为等价方程 )(123xxx

三、实验要求:

(1)分别对方案一、方案二取初值00x,迭代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)(3xxxf为等价方程 )(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)(3xxxf为等价方程 )(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的全部根。