python实现二分法求根
时间: 2023-11-06 08:06:00 浏览: 77
python之二分法求平方根
5星 · 资源好评率100%
二分法求根是一种常见的数值计算方法,可以用来求解函数的零点。以下是Python实现二分法求根的示例代码:
```python
def bisection(func, a, b, tol=1e-6, maxiter=100):
"""
二分法求根
:param func: 目标函数,输入一个实数,返回一个实数
:param a: 区间左端点
:param b: 区间右端点
:param tol: 误差容限,默认为 1e-6
:param maxiter: 最大迭代次数,默认为 100
:return: 方程的根
"""
fa, fb = func(a), func(b)
if fa * fb > 0:
raise ValueError("区间端点函数值符号相同,无法使用二分法")
for i in range(maxiter):
c = (a + b) / 2
fc = func(c)
if abs(fc) < tol:
return c
if fa * fc < 0:
b, fb = c, fc
else:
a, fa = c, fc
raise RuntimeError("二分法未收敛")
```
该函数的输入是目标函数 `func`、区间左端点 `a` 和右端点 `b`,以及误差容限 `tol` 和最大迭代次数 `maxiter`。函数的输出是方程的根。
在函数内部,首先计算区间端点的函数值 `fa` 和 `fb`,如果它们的符号相同,则抛出异常。然后进行迭代,每次将区间中点 `c` 计算为 `(a+b)/2`,并计算函数值 `fc`。如果 `fc` 的绝对值小于误差容限 `tol`,则认为已经找到了根,返回 `c`。如果 `fa` 和 `fc` 的符号不同,则说明根位于区间的左半部分,将右端点 `b` 更新为 `c`,并更新 `fb` 为 `fc`。否则,根位于区间的右半部分,将左端点 `a` 更新为 `c`,并更新 `fa` 为 `fc`。如果迭代次数达到了最大值 `maxiter`,则抛出运行时异常。
阅读全文