数值计算实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

线性方程的数值解法

一、课题名称:二分法求解非线性方程 二、引言:

目的:求方程f(x)=0的根

二分法所使用的方法主要是介值定理,它的基本思想是逐步缩小根存在的区间,搜索根所在的位置

许多实际算法表现为某种无穷递推过程的阶段,实现这类算法,不但需要建立计算公式,还需要解决精度控制问题,而我们下面介绍的二分法就是用来解决这一类问题,它是电子计算机上一种常用的算法。 三、算法:

首先,满足f(a)f(b)<0,给定ε(根的容许误差)或δ(|f(x)|的容许误差)。 1、对分【a,b 】,取x=(a+b)/2,计算f(0x ); 2、若|b-a|<ε,或|f(0x )|<δ,则取ζ=0x ,停机; 3、判断根所在新区间

若f(a)f(0x )≤0,则【11,b a 】=【a,0x 】 若f(a)f(0x )>0 ,则【11,b a 】=【0x ,b 】

11a b -=(b-a)/2

4、转向1,重复上述步骤。

四、结构程序设计(求013=--x x 的根) program main implicit none real :: a=1.0000 real :: b=1.5000

real,parameter :: c=0.0050 real x,y0,y

do while( b-a>=c) y0=a**3-a-1 x=(a+b)/2 y=x**3-x-1 if( y*y0>0) then a=x else b=x end if

write (*,*)x,y end do

stop end

五、结果及讨论分析 1、结果:

2、误差分析:

第k 次二分后,则在二分过程中可以获得一个近似根的序列,...,,210x x x ,该序列以根*

x 为极限

在实际计算时,人们不可能也没有必要完成这种无穷过程,因为计算结果允许带有一点的误差。由于

)(2

1

)(21||1*

a b a b x x k k k k -=-≤-+

只要二分足够多次(即k 充分大),便有

ε<-||*

k x x

这里ε为预定精度,数值计算中的近似是正常的,计算误差是不可避免的。

3、收敛性分析:

对于二分法,只要能够保证在给定的区间内有根,使能够收敛的,当时收敛的速度和给定的区间有关,而且总体上来说速度比较慢。牛顿法(程序见附),收敛速度要比二分法快,但是最终其收敛的结果与初值的选取有关,初值不同,收敛的结果也可能不一样,也就是结果可能不时预期需要得结果。 4、算法评价:

就二分法来说,它的优点有程序简单、方法可靠、收敛;缺点有无法解决多根、复根、一个切点的问题。

附:

1、简单迭代结构程序设计(求013=--x x 的根): program main implicit none real::x0 integer::k real::x1

integer,parameter::N=9 real,external::f k=0 x0=1.5

do while(k<=N) write(*,*)k,x0 x0=f(x0) k=k+1 end do function f(x) real::x,f

f=(x+1)**(real(1)/real(3)) return end

2、牛顿迭代结构程序设计(求115): program main

implicit none

real::x0,x1,x2

real,parameter ::a=0.000005

integer k

integer,parameter :: n=20

read(*,*)x0

x1=2*x0

if(x1/=0) then

do k=0,n

write (*,*)k,x0

x2=x0-(x0**2-115)/x1

if(abs(x2-x0)

exit

else if(k/=n) then

x0=x2

end if

end do

else

write(*,*)"cuowu"

end if

stop

end

3、埃特金算法结构流程图(求x=x

e 在x=0.5附近的根):program main

implicit none

real x0,x1,x2

real,parameter ::a=0.0000005

integer k

integer,parameter :: n=20

read(*,*)x0

do k=0,n

x1=exp(-x0)

x2=exp(-x1)

x2=x2-(x2-x1)**2/(x2-2*x1+x0)

write (*,*)k,x1,x2,x0

if(abs(x2-x0)

exit

else if(k/=n) then

x0=x2

end if

end do

stop

end

线性方程组的迭代法

一、课题名称:雅可比迭代法求解线性方程组 二、引言:

雅可比迭代的目的是利用此方法计算出线性方程组符合一定精度的解,它的基本思想是将联立方程组的求解,归结为重复计算一组彼此独立的线性表达式,

雅可比迭代的意义:在科学计算与工程计算中,线性方程组会经常遇到,因此,线性方程组的解法在数值分析中占有极其重要的地位。 三、算法:

考察一般形式的线性方程组

==n

j i

j ij b x a 1

,i=1,2,…,n (1)

设从式(1)中分离出变量i x ,将它改写成

⎪⎪⎪⎭

⎫ ⎝⎛-=

∑≠=n i j j j ij i ii

i x a b a x 11 ,i=1,2,┈,n (2)

据此建立的迭代公式

⎪⎭⎫ ⎝

-=∑

≠=+n

i

j j k j

ij i ii

i

x a b a x 1)

(1)

(k 1

,i=1,2,…,n (3)

当相邻两次迭代结果的偏差小于给定精度ε时计算结束。

四、结构程序设计: 计算线性方程组:2

.453.82102

.7210321321321

=+--=-+-=--x x x x x x x x x

program main implicit none real::c=0.0005

integer,parameter::n=3 integer,parameter::m=3 real::x(n)=(/0,0,0/) real::y(n)=(/0,0,0/)

real::a(n,m)=(/10,-1,-1,-1,10,-1,-2,-2,5/) real::b(n)=(/7.2,8.3,4.2/) integer::i,j,k integer::g=30

相关文档
最新文档