You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

牛顿-拉夫逊法求解闭矢量环二元方程组无法收敛到0.001精度的问题求助

牛顿-拉夫逊法求解闭矢量环二元方程组无法收敛到0.001精度的问题求助

我写了一个用牛顿-拉夫逊法求解二元方程组根的程序,目的是求解闭矢量环的两个未知量。但问题是,只有当误差容限设为0.01及更大时程序才能正常工作,当容限设为比如0.001时,程序会陷入振荡,似乎永远无法收敛。我觉得这种行为很奇怪,毕竟它能达到0.01的精度,说明初始猜测应该已经进入了收敛半径,按道理后续的近似不应该有问题...

以下是我的代码:

import numpy as np
import random as rnd

TOLERANCE = 0.01
ITER_LIMIT = 50

track_x = 0
track_y = 0
track_incline = np.deg2rad(60)

r41 = 12.2/2
r1 = 28.88 - 10.95
r2 = 22.65 - track_x
r26 = 8/2 - track_y
r3 = 8
r4 = 12.2

theta41 = np.pi
theta3 = np.deg2rad(30)

def f1(x, y):
    return r41*np.sin(theta41) + r1*np.cos(theta41) + r2*np.sin(y) + r26*np.cos(y) - x*np.sin(y + track_incline) + r3*np.sin(theta3)

def f2(x, y):
    return r41*np.cos(theta41) - r1*np.sin(theta41) + r2*np.cos(y) - r26*np.sin(y) - x*np.cos(y + track_incline) + r3*np.cos(theta3) + r4

def jacobian_mat(x, y):
    return np.array([
        [-np.sin(y + track_incline), r2*np.cos(y) - r26*np.sin(y) - x*np.cos(y + track_incline)],
        [-np.cos(y + track_incline), -r2*np.sin(y) - r26*np.cos(y) + x*np.sin(y + track_incline)]
    ])

def compute_newton_raphson(x0, y0):
    for i in range(ITER_LIMIT):
        result = -np.matmul(np.array([f1(x0, y0), f2(x0, y0)]), np.linalg.inv(jacobian_mat(x0, y0))) + np.array([x0, y0])
        x = result[0]
        y = result[1]

        print(x, y)

        if max(np.abs(x - x0), np.abs(y - y0)) <= TOLERANCE:
            return (x, y)
        else:
            x0 = x
            y0 = y

    return None

while True:
    x0 = rnd.randrange(-100, 100)
    y0 = rnd.randrange(-100, 100)

    res = compute_newton_raphson(x0, y0)
    if res != None:
        print(f"RESULT:\nX = {res[0]}mm\nY = {np.rad2deg(res[1])}deg")
        break

我准备了问题的建模草图和角度标注图,或许能帮大家理解这个问题的背景。

我尝试过调整迭代次数,但完全没用;也仔细检查了f1和f2的构造是否正确,确认没有问题。

希望能得到大家的任何见解,非常感谢!

备注:内容来源于stack exchange,提问作者Rapolas Daugelis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 12:23:05