- 1
- 0
- 约2.45千字
- 约 8页
- 2017-06-09 发布于北京
- 举报
〔计算方法和实习〕课程论文模版
PAGE
PAGE 8
玉林师范学院
数学与信息科学学院
《计算方法与实习》课程论文
(2011—2012学年度第一学期)
姓名: 吴才华
专业: 信息与计算科学
班别: 信计09
年级: 2009级
学号: 200904404136
日期: 2011 年 12 月 30 日
方程求根的二分法
摘 要
传统的二分法的基本思想是:用对分区间的方法根绝分点处函数f(x)值的符号逐步将有根区间缩小,使在足够小的区间内,方程有且仅有一个跟。 通过每次把f(x)的零点所在小区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值,每次运算后,区间长度减少一半。区间收缩一半的方法因为每次是收缩一半的方法,因每次变化的数值很大,这样对导致数值的精确度不够。这篇文章运用的是每次取区间的1/4, 每次运算后,区间长度减少1/4。对这样就可以在逼近的过程中,所得的值就更加接近真实值。
引言
非线性科学是当今科学发展的一个重要研究方向,非线性方程的求根也成为其中一个重要内容。一般而言,非线性方程的求根非常复杂。 在实际应用中有许多非线性方程的例子,例如
(1)在光的衍射理论(the theory of diffraction of light)中,需要求x-tanx=0的根
(2)在行星轨道( planetary orbits)的计算中,对任意的a和b,需要求x-asinx=b的根
(3)在数学中,需要求n次多项式的根。
非线性方程的一般形式
这里是单变量x 的函数,它可以是代数多项式
()
也可以是超越函数,即不能表示为上述形式的函数。满足方程 的x值通常叫做方程的根或解,也叫函数的零点。
2.算法理论
f(x)为[a,b]上的连续函数,若 f(a)·f(b)0,则[a,b]中至少有一个实根。如果f(x)在[a,b]上还是单调递增或递减的,则f(x)=0仅有一个实根。
3.算法模型
直接取区间[a,b]长度的1/4点 (b-a)/4,即用点x=a+(b-a)/4作为问题的近似解,那么我们可以估计出绝对误差限仅为区间长的1/4或是3/4,即e= a+(b-a)/4。如果这个结果能满足精度要求,我们就停止进一步的计算;如果不能,就求出f(x),结果只能是下面三种情况之一:
(1) f(a)·f(x)0,此时我们有x*∈[a,x];
(2) f(x)·f(b)0,此时我们有x*∈[x,b];
(3) f(x)=0,此时x即为问题的精确解。
在前两种情况下,我们可以用x分别替换原问题中的b或a,从而把求解的区间减小了一半。这样我们又可以取新区间[a,b]的1/4点。经过N次迭代后,剩下的区间长为(b- a)/4^n 。这也是结果的绝对误差限。如此继续下去就达到是有根区间逐步缩小的目的,在这一些相互包含的子区间中构造收敛的数列来逼近根 。
假设f(x)=0,在区间[a,b]中只有一个根,且满足f(a)f(b)0,则利用二分法构造求根过程为:
While(|a-b|eps)
x=a+(b-a)/4
计算f(x)
若(|f(x)|eps) 则 x为解
若f(x)*f(b)0 修正区间为[x,b]
若f(a)*f(x)0 修正区间为[a,x]
按上述步骤求根的方法称为二分法,若记做了k次二分区间处理得到的有根区间为,
5. 算法的数值实验结果
例: 求方程f(x)=x^3+x^2-3*x-3=0在1.5附近的根
我们可以取a=1,b=2.因为f(1)*f(2)0,由此我们可以知道该方程在区间[1,2],中有解。C=a+(b-a)/4,运用vc++,我们得到的结果如下:
6、算法的评价与小结
优点:就是不管含根区间[a , b]多大总能求出满足要求的根,且对函数的要求不高,计算简单;且区间[a,b]取得越近越容易求出。
缺点:不能求重根,其收敛速度在数列x越靠近根时越慢。二分法一般常用于为方程提供初始近似值当计算出的近似根比较准确时,再用其他方法对近似根做快速进一步精化
参考文献
附录
# includestdio.h
# includemath.h
# define eps 5e-6
# define delta 1e-6
float Bisection(float a,float b,float(*f)(float))
{
float c,fc,fa=(*f)(a),fb=(*f)(b);
int n=1;
prin
原创力文档

文档评论(0)