什么是二分法解方程,方程近似解法之二分法

什么是二分法解方程?方程近似解法之二分法

什么是二分法

对于方程求解,在实际工程中,往往不需要精确解,而是只需精准到工程所需要的程度即可。

本文介绍用二分法求解方程近似解,并通过C语言程序来实现。

方程近似解的求解依据为中间值定理,即:

函数f(x)在区间[a, b]连续,并且f(a)和f(b)异号,则a,b间存在点c, 使得f(c) = 0 (a < c < b)。

二分法求解方程的近似解

什么是二分法解方程,方程近似解法之二分法

求解方程

什么是二分法解方程,方程近似解法之二分法

则f(1) = -1 < 0, f(2) = 6 > 0, 由中间值定理可知,区间[1,2]内有f(x) = 0的解。

什么是二分法解方程,方程近似解法之二分法

方程f(x)=0的解所在区间

取区间[1,2]的二等分点1.5,计算f(1.5)的值,可知f(1.5) = 2.125 > 0。

于是f(1) < 0且f(1.5) > 0,由中间值定理知解在区间[1, 1.5]内,从而解的范围便从[1,2]缩小了一半至[1,1.5]。

再取区间[1,1.5]的二等分点1.25,计算f(1.25)的值,可知f(1.25) = 0.51… > 0。于是解区间的范围再缩小一半至[1,1.25]。

同样地,继续取解区间的二等分点,并计算该点的函数值。被二等分点分开的两个区间中,若某个区间两端的f(x)值异号的话,则该区间为解区间。

这样反复操作,便可取得满足精度的解(比如精确到小数点后3位,即为解区间两端的差的绝对值小于0.001)。

什么是二分法解方程,方程近似解法之二分法

二分法求解方程近似解过程

C语言程序实现二分法求解

  • 代码
//bisection.c
#include <stdio.h>

//函数定义
#define F(x) \
 ((x)*(x)*(x)-3*(x)*(x)+9*(x)-8)

int main(void)
{
 double a=1; //解区间左端
 double b=2; //解区间右端
 double c=(a+b)/2; //解区间中点
 double e=0.000001; //解的精确度
 int n=0; //二分回数

 while( b - a >= e )
 {
 n++;

 /*计算a,b中点c, 并更新a,b坐标*/
 c = ( a + b ) / 2;
 printf("%2d:a=[%.7lf],b=[%.7lf]\n", n, a, b);
 F(a)*F(c)>0?(a=c):(b=c);
 }

 printf("在第 %d 回取到满足精度(%lf)的解:\n\
 x = %.6lf\n", n, e, c);

 return 0;
}
  • 编译・执行
$ gcc -o bisection bisection.c
$ ./bisection
 1:a=[1.0000000],b=[2.0000000]
 2:a=[1.0000000],b=[1.5000000]
 3:a=[1.0000000],b=[1.2500000]
 4:a=[1.1250000],b=[1.2500000]
 5:a=[1.1250000],b=[1.1875000]
 6:a=[1.1562500],b=[1.1875000]
 7:a=[1.1562500],b=[1.1718750]
 8:a=[1.1640625],b=[1.1718750]
 9:a=[1.1640625],b=[1.1679688]
10:a=[1.1640625],b=[1.1660156]
11:a=[1.1650391],b=[1.1660156]
12:a=[1.1655273],b=[1.1660156]
13:a=[1.1657715],b=[1.1660156]
14:a=[1.1658936],b=[1.1660156]
15:a=[1.1658936],b=[1.1659546]
16:a=[1.1658936],b=[1.1659241]
17:a=[1.1658936],b=[1.1659088]
18:a=[1.1659012],b=[1.1659088]
19:a=[1.1659050],b=[1.1659088]
20:a=[1.1659050],b=[1.1659069]
在第 20 回取到满足精度(0.000001)的解:
 x = 1.165906

专业系统零基础学唱歌加微信:142616051 免费领取VIP教程 备注:学习

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2511786901@qq.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.zhuniz.com/1996.html

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

My title