目录

1 原理

2 二分法求解

2.1 求解步骤

2.1.1 确定有根区间

2.1.2 二分法求根

3 二分法的几何解释

4 案例&Python代码

4.1 程序流程

4.2 Python代码


1 原理

连续函数零点定理:设

,若

,方程

在(a,b)内至少有一个根;又若

在(a,b)恒正或者恒负,则此根在(a,b)内唯一。

2 二分法求解

2.1 求解步骤

求解步骤分为两步:

① 确定方程的根区间;
② 若存在有根区间,采用二分法计算得到方程的解;若不存在有根区间,则报错:方程无实数解,或者返回方程的最小二乘解,需要评估最小二乘解是否满足精度需求。

2.1.1 确定有根区间

一般采用等步长扫描法来确定根区间。流程如下:

  • 设扫描区间为[a,b];
  • 设定步长h>0,取x0=a,x1=x0+h;
  • 若,则说明扫描成功,有根区间为[x0,x1];否则令x0=x1,x1=x0+h继续扫描,直至成功;
  • 如果在扫描的过程中出现x1>b则表明扫描失败,一般缩小步长h再次扫描,直到成功;
  • 如果步长足够小时,仍然扫描失败,说明方程在区间[a,b]无实根。

2.1.2 二分法求根

在确定根区间以后,就可以采用二分法求得方程

在区间[x0,x1]的根。具体步骤如下:

  • 输入有根区间[x0,x1];
  • 取x=(x0+x1)/2,计算的值,如果f(x)=0,则方程的解为x,程序停止;
  • 如果f(x0)f(x)<0,则令[x0,x1]=[x0,x],如果f(x0)f(x)>0,则令[x0,x1]=[x,x1]。
  • 重复上述三个步骤直至方程的解满足精度要求;
  • 输出x的值,即为方程的数值解。

3 二分法的几何解释

python 二分法求平方根 python二分法解方程_python

如图所示,x*为方程f(x)=0的真实解,迭代过程如下:

  • 起始迭代区间为,计算对应的函数值;
  • 取,计算对应的函数值;
  • 根据函数值的符号更新迭代区间为;
  • 取,计算对应的函数值;
  • 根据函数值的符号更新迭代区间为;
  • ......
  • 如此循环,会无限逼近真实解

4 案例&Python代码

求解方程

在区间[1,2]的根。

误差要求

python 二分法求平方根 python二分法解方程_数值计算_02

4.1 程序流程

python 二分法求平方根 python二分法解方程_非线性方程求解_03

4.2 Python代码

#二分法求根
import numpy as np
def f(x):
    y=x**3-x-1 #输入求根方程的表达式
    return y
def main():
    a = float(input("a="));b =float(input("b="))
    e = 0.001 #精度要求
    while f(a)*f(b)>0:
        print("请重新输入a、b的值")
        a = float(input("a="));b =float(input("b="))
    x0=(a+b)/2
    while np.abs(f(x0)-0)>e: #此处采用残差来判断
        if f(a)*f(x0)<0:
           a=a;b=x0
        else:
            a=x0;b=b
        x0=(a+b)/2
    print(x0)    #方程的解
    print(f(x0)) #验证解的正确性
if __name__ == '__main__':
   main()

运行结果:

a=1
b=2
1.32470703125
-4.659488331526518e-05