牛顿迭代法及其python实现
时间: 2023-12-04 20:00:55 浏览: 145
牛顿迭代法是一种求解方程的数值方法,它的基本思想是利用函数在某一点处的一阶导数和二阶导数信息,不断逼近函数的零点。
假设要求解方程 $f(x)=0$ 的根,牛顿迭代法的迭代公式为:
$$x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}$$
其中,$x_n$ 是迭代到第 $n$ 步时的近似根,$f(x_n)$ 和 $f'(x_n)$ 分别是 $f(x)$ 在 $x_n$ 处的函数值和一阶导数值。
Python 代码实现如下:
```python
def newton_method(f, df, x0, tol=1e-6, max_iter=100):
"""
牛顿迭代法求解方程 f(x) = 0 的根
:param f: 求根函数
:param df: 求根函数的一阶导数
:param x0: 迭代初始值
:param tol: 迭代收敛精度
:param max_iter: 最大迭代次数
:return: 迭代结果 x
"""
x = x0
for i in range(max_iter):
fx = f(x)
dfx = df(x)
if abs(fx) < tol:
return x
x = x - fx / dfx
raise ValueError("迭代失败,达到最大迭代次数")
```
其中,参数 `f` 和 `df` 分别是求根函数和一阶导数的函数句柄,`x0` 是迭代初始值,`tol` 是迭代收敛精度,`max_iter` 是最大迭代次数。
例如,要求解方程 $x^3 - 2x - 5 = 0$ 的根,可以定义如下函数:
```python
def f(x):
return x ** 3 - 2 * x - 5
def df(x):
return 3 * x ** 2 - 2
root = newton_method(f, df, x0=2)
print(root) # 输出根的近似值
```
输出结果为:
```
2.0945514815423265
```
可以使用其他方法对此近似值进行验证,例如使用 `scipy.optimize.fsolve` 函数求解:
```python
from scipy.optimize import fsolve
root, = fsolve(f, x0=2)
print(root) # 输出根的精确值
```
输出结果为:
```
2.0945514815423265
```
可以看到,两种方法得到的结果非常接近。
阅读全文