我正在嘗試在 Python 3.8 中用三個非線性方程求解系統。我正在使用函式 sympy.nonlinsolve()。但是,我收到錯誤訊息“收斂到 root 失敗;嘗試 n < 15 或 maxsteps > 50”。
這是我的代碼:
import sympy as sp
x_1 = 0.0
z_1 = 1.0
x_2 = 15.81
z_2 = 0.99
x_3 = 23.8
z_3 = 0.98
r, x_m, z_m = sp.symbols('r, x_m, z_m', real=True)
Eq_1 = sp.Eq((x_1 - x_m) ** 2 (z_1 - z_m) ** 2 - r ** 2, 0)
Eq_2 = sp.Eq((x_2 - x_m) ** 2 (z_2 - z_m) ** 2 - r ** 2, 0)
Eq_3 = sp.Eq((x_3 - x_m) ** 2 (z_3 - z_m) ** 2 - r ** 2, 0)
ans = sp.nonlinsolve([Eq_1, Eq_2, Eq_3], [r, x_m, z_m])
我會歡迎每一個幫助。提前致謝。
uj5u.com熱心網友回復:
我從solve以下方面得到答復:
In [56]: sp.solve([Eq_1, Eq_2, Eq_3], [r, x_m, z_m])
Out[56]:
[(-5.71609538434502e 18, -4.80343980343979e 15, -5.71609336609336e 18), (-19222.9235141152, -4.2537
0843989772, -19221.9230434783), (19222.9235141152, -4.25370843989772, -19221.9230434783), (5.716095
38434502e 18, -4.80343980343979e 15, -5.71609336609336e 18)]
我不確定為什么nonlinsolve有效,但從答案中的大量數字來看,我猜這不是很好的條件。
如果你使用精確的有理數,那么你可以從solve和得到相同的解nonlinsolve:
In [59]: import sympy as sp
...:
...: x_1 = 0
...: z_1 = 1
...: x_2 = sp.Rational('15.81')
...: z_2 = sp.Rational('0.99')
...: x_3 = sp.Rational('23.8')
...: z_3 = sp.Rational('0.98')
...:
...: r, x_m, z_m = sp.symbols('r, x_m, z_m', real=True)
...: Eq_1 = sp.Eq((x_1 - x_m) ** 2 (z_1 - z_m) ** 2 - r ** 2, 0)
...: Eq_2 = sp.Eq((x_2 - x_m) ** 2 (z_2 - z_m) ** 2 - r ** 2, 0)
...: Eq_3 = sp.Eq((x_3 - x_m) ** 2 (z_3 - z_m) ** 2 - r ** 2, 0)
...: ans = sp.solve([Eq_1, Eq_2, Eq_3], [r, x_m, z_m])
In [60]: ans
Out[60]:
??-√564927076558939081 -8316 -44210423 ? ?√564927076558939081 -8316 -44210423 ??
??─────────────────────, ──────, ──────────?, ?───────────────────, ──────, ──────────??
?? 39100 1955 2300 ? ? 39100 1955 2300 ??
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/328541.html
