资源描述
有关二分法计算非线性方程根的问题1、二分法求解的提出及其背景由于实际问题的需要,我们经常需要寻求函数的零点(即的根),对于为一次或二次函数,我们有熟知的公式解法(二次时,称为求根公式)我国古代数学家已比较系统地解决了部分方程求解的问题,在九章算术,北宋数学家贾宪的黄帝九章算法细草,南宋数学家秦九韶的数书九章中均有记载.在十六世纪,已找到了三次和四次函数的求根公式,人们曾经希望得到一般的五次以上代数方程的根式解,但经过长期的努力仍无结果1824年,挪威年轻数学家阿贝尔(N. H. Abel,1802-1829)成功地证明了五次以上一般方程没有根式解1828年,法国天才数学家伽罗瓦(E.Galois,1811-1832)巧妙而简洁地证明了存在不能用开方运算求解的具体方程人们认识到高于4次的代数方程不存在求根公式,因此对于高次多项式函数及其它的一些函数,有必要寻求其零点的近似解的方法,这是一个在计算数学中十分重要的课题。求解非线性方程的数值解有二分法、迭代法、牛顿雷扶生方法、正割法和抛物线法。下面我们就来讨论二分法求解非线性方程数值解的问题。2、在求解过程中需要用到的定理:1、(1)设f(x)于a,b上连续; (2)且f(a)f(b)0;则存在有x*(a,b),使f(x*)于(a,b)内存在实的零点。2、给定方程f(x)=0,设f(x)于a,b上连续,且f(a)f(b)0,则由二分法产生的序列xk 收敛于方程f(x)=0的根x*,且具有性质|xk-x*|(b-a)/2k(k=1,2,3,)3、二分法的描述:设有非线性方程f(x=0),其中,f(x)为a,b上的连续函数且设f(a)f(b)0为给定精度要求,则由|xk-x*|(b-a)/2k(b-a)-/2.记a1=a,b1=b;第一步:k=1,计算x1=(a1+b1)/2及f(x1),如果f(a1)f(x1)0则根一定在 a1,x1a2,b2内,否则根一定在区间x1,b1 a2,b2内(若f(x)=0,则x1=x*)。于是到长度缩小一半的含根区间a2,b2,即f(a2)f(b2)0,且b2a2=1/2(b1a1)第k步分半计算:重复上述计算过程,设已完成第1步,第k1步分半计算得到含根区间a1, b1 a2,b2 ak,bk且满足:(1) f(ak )f(ak)0,即x*ak,bk;(2) bkak=1/(2k-1);现进行第k步分部计算:(3) 计算xk=( ak+ bk)/且有|xk-x*|(b-a)/2=1/2k(b-a)(4) 确定新的含根区间ak+1,bk+1,即如果f(ak)f(bk)0,则根一定在ak+1,bk+1= ak,bk内,否则根一定在区间ak+1,bk+1= xk, bk,且有bk+1ak+1=1/2k(b-a).由上述二分法得到一序列xk,即可得x*=limkXk,这个值即为f(x)=0的实根,根据题目要求的精度可以求出它的近似解。4、二分法示意图如下:5、程序设计:#include#includedouble funx( double x)return(x*x*x*x*x*x-x-1); /给出要求的方程。double fun(float m,float n) / 定义功能函数,通过循环找出在所给精度的 范围内根所在的区间。double r;r=(m+n)/2;while(fabs(m-n)0.000001) /确定精度不超过0.000001 if(funx(r)=0) return r;if(funx(r)*funx(n)0)m=r;else n=r;r=(m+n)/2;return r;main()double root ;float m,n;printf(plese input two number m n:n);scanf(%f%f,&m,&n);root =fun(m,n); / 调用功能函数。printf(%fn,root);/ 输出方程的根。所测试的题目是fx=x6-x-1于1,2内的一个实根,且要求精确到小数点后第三位。得到的结果如下:6、论文分析二分法的优点是方法简单,易于理解,且对f(x)只要求连续即可。可用二分法求出f(x)=0于a,b内的全部的实根。但二分法不能求复根及偶数重根。 对于用C语言编程解决二分法求解的问题,显然它没有用Excle那么方便,而且用C语言编程得到的结果不能看到求解过程中的每一个结果,而用Excle求解可以看到全部的解。 对于此论文中所用到的程序,它只适用于给出一个题目,如果要用来求其他题目的解,则必须对程序中的部分代码进行修改,有点不太方便,需要进行修改优化。 关键字:二分法求解方程的根,C语言编程。
展开阅读全文