数值积分上机课写的 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)