📅  最后修改于: 2023-12-03 15:27:05.579000             🧑  作者: Mango
牛顿求根法(Newton's method)亦称为牛顿-拉弗森方法(Newton-Raphson method),是一种迭代逼近法,用于寻找实数解(x)方程f(x) = 0的方法。牛顿法的基本思想是通过在函数的某一点处的泰勒展开式来获得一个方程f(x) = 0的逼近解。这个方程的解更接近于实际解,因为它使用到了更多的函数值、倾斜和曲率的信息。
假设我们的目标是求出方程 f(x) = 0 的一个解,尝试从一个起始点 x0 开始,更新x的值,如下所示:
$$x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}$$
其中 $x_{n+1}$ 是下一个近似值,$x_n$ 是当前的近似值,$f(x_n)$ 是函数在 $x_n$ 处的值,$f'(x_n)$ 是 $f(x)$ 的一阶导数在 $x_n$ 处的值。
这个公式可以重复应用,直到得到足够精确的结果或达到迭代次数的限制。
def newton_method(f, df, x0, tol=1e-8, max_iter=100):
"""
牛顿法求解 f(x) = 0 的近似解
:param f: 目标函数
:param df: 目标函数的一阶导数
:param x0: 初始值
:param tol: 精度
:param max_iter: 迭代次数
:return: 近似解
"""
x = x0
for i in range(max_iter):
fx = f(x)
if abs(fx) < tol: # 判断是否已满足精度要求
return x
dfx = df(x)
if dfx == 0: # 判断是否除数为 0
return None
x = x - fx / dfx
return None
下面是一个简单的示例,演示如何使用牛顿法求解方程 $x^2 - 2 = 0$ 的解。
def f(x):
return x**2 - 2
def df(x):
return 2*x
x0 = 1.0
root = newton_method(f, df, x0)
if root is not None:
print("近似解:", root)
print("验证结果:", f(root))
else:
print("求解失败")
输出结果:近似解: 1.414213562373095 验证结果: 4.44089209850063e-16
牛顿求根法是一种高效的求解方程根的方法,但其也有一些缺点和局限性。一些初始值会导致算法不稳定,因此需要对算法的参数进行细致调整。 总地来说,牛顿求根法是现代科学、工程和计算应用中常用的方法之一,它广泛地应用于各种数值分析和优化问题。