python实现Newton—Raphson算法
时间: 2023-12-06 19:02:01 浏览: 117
Newton-Raphson算法,也叫牛顿迭代法,是求解方程的一种常用的数值方法。它基于泰勒级数展开,通过不断迭代逼近方程的解。
下面是Python实现Newton-Raphson算法的示例代码:
```python
def newton_raphson(f, f_prime, x0, max_iter=100, tol=1e-6):
"""
使用Newton-Raphson算法求解方程f(x) = 0的根。
:param f: 方程f(x)。
:param f_prime: f(x)的一阶导数。
:param x0: 初始值。
:param max_iter: 最大迭代次数。
:param tol: 迭代精度。
:return: 方程f(x) = 0的近似解。
"""
x = x0
for i in range(max_iter):
fx = f(x)
if abs(fx) < tol:
return x
fpx = f_prime(x)
if abs(fpx) < tol:
return None
x -= fx / fpx
return None
```
这个函数接受4个参数:
- f: 方程f(x)。
- f_prime: f(x)的一阶导数。
- x0: 初始值。
- max_iter: 最大迭代次数,默认为100。
- tol: 迭代精度,默认为1e-6。
函数中的迭代公式为:
$$x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}$$
迭代过程中,如果满足$|f(x_n)| < tol$,则认为已经找到了方程的解,返回$x_n$;如果满足$|f'(x_n)| < tol$,则认为迭代失败,返回None;如果超过了最大迭代次数max_iter,也认为迭代失败,返回None。
示例:
假设要求解方程$x^2 - 2 = 0$的根,可以定义如下的f和f_prime函数:
```python
def f(x):
return x**2 - 2
def f_prime(x):
return 2*x
```
然后调用newton_raphson函数求解:
```python
x0 = 1.5
root = newton_raphson(f, f_prime, x0)
if root is not None:
print("方程的根为:", root)
else:
print("迭代失败!")
```
输出:
```
方程的根为: 1.414213562373095
```
可以看到,找到了近似的解$x \approx 1.41421356$,与方程的真实解$\sqrt{2}$非常接近。
阅读全文