数值计算实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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