有关二分法计算线性方程根的问题

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

吉林化工学院

专业:

班级:

学号:

姓名:

有关二分法计算线性方程根的问题

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,则由二分法产生的序列{x k }收敛于方程f(x)=0的根x*,且具有性质

|x k-x*|≦(b-a)/2k(k=1,2,3,…)

3、二分法的描述:

设有非线性方程f(x=0),其中,f(x)为[a,b]上的连续函数且设f(a)•f(b)<0(不妨设该方程在[a,b]内仅有一个实根)。二分法具体方法如下:

运用上述定理2,设ε>0为给定精度要求,则由|xk-x*|≦(b-a)/2k<ε得半分次数k>[㏑(b-a)-㏑ε]/㏑2.

记a1=a,b1=b;

第一步:k=1,计算x1=(a1+b1)/2及f(x1),如果f(a1)·f(x1)<0则根一定在[ a1,x1]≡[a2,b2]内,否则根一定在区间[x1,b1] ≡[a2,b2]内(若f(x)=0,则x1=x*)。于是到长度缩小一半的含根区间[a2,b2],即f(a2)·f(b2)<0,且b2-a2=1/2(b1-a1)

第k步分半计算:重复上述计算过程,设已完成第1步,…,第k-1步分半计算得到含根区间[a1, b1] ⊃[a2,b2] ⊃…⊃[a k,b k]且满足:

(1) f(a k )·f(a k)<0,即x*∈[a k,b k];

(2) b k-a k=1/(2k-1);

现进行第k步分部计算:

(3) 计算x k=( a k+ b k)/且有|x k-x*|≦(b-a)/2=1/2k(b-a)

(4) 确定新的含根区间[a k+1,b k+1],即如果f(a k)·f(b k)<0,则根一定在

[a k+1,b k+1]= [a k,b k]内,否则根一定在区间[a k+1,b k+1]=[ x k,, b k],且有b k+1-a k+1=1/2k(b-a).

由上述二分法得到一序列{x k},即可得x*=lim k→∞X k,这个值即为f(x)=0的实根,根据题目要求的精度ε可以求出它的近似解。

4、二分法示意图如下:

5、程序设计:

#include

#include

double 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("%f\n",root);// 输出方程的根。

}

所测试的题目是fx=x6-x-1于[1,2]内的一个实根,且要求精确到小数点后第三位。

得到的结果如下:

6、论文分析

二分法的优点是方法简单,易于理解,且对f(x)只要求连续即可。可用二分法求出f(x)=0于[a,b]内的全部的实根。但二分法不能求复根及偶数重根。

对于用C语言编程解决二分法求解的问题,显然它没有用Excle那么方便,

而且用C语言编程得到的结果不能看到求解过程中的每一个结果,而用Excle求解可以看到全部的借。

对于此论文中所用到的程序,它只适用于给出一个题目,如果要用来求其他题目的解,则必须对程序中的部分代码进行修改,有点不太方便,需要进行修改优化。

关键字:二分法求解方程的根,C语言编程。

相关文档
最新文档