数值积分上机课写的 Python 代码,实现非线性方程组的求根。
import sympy as sp
e = sp.E
def newton(x, f, x_0, epsilon):
f_diff = sp.diff(f, x)
while True:
x_1 = x_0 - f.subs(x, x_0) / f_diff.subs(x, x_0)
if abs(x_1 - x_0) < epsilon:
return x_1
else:
x_0 = x_1
def fixed_point_iteration(x, f, x_0, epsilon):
f = -(f - x)
while True:
x_1 = f.subs(x, x_0)
if abs(x_1 - x_0) < epsilon:
return x_1
else:
x_0 = x_1
注意,不动点迭代法(fixed_point_iteration)是可能不收敛的,因此可能需要自行构造迭代函数以取代 f = -(f - x)
。