我想使用 sympy 求解 eq1 中的 x。当我尝试使用 sp.solve() 求解方程时,出现错误。当我使用 sp.solve_linear() 时,它似乎可以工作,但我无法评估解的数值。除了 x 之外,我的所有变量都已定义,并且我想求解 x。还有其他我可以使用的解算器吗?我的代码如下:
import sympy as sp
from sympy import pi, log
R0, Hb, P_, y, m, xhi_ = sp.symbols("0.003 5e8, 1000 2500 4*pi*10e-7 1")
P = P_/2
x, y = sp.symbols('x y')
eq1 = x - sp.sqrt((P - (m*(y*y)/2*pi)*log(R0/x))/(pi*xhi_*Hb))
a = sp.solve_linear(eq1, x)
sp.pprint(a)
sp.pprint(sp.N(a))
最佳答案
我认为你实际上需要:
import sympy as sp
from sympy import pi, log, sqrt
R0, Hb, P_, y, m, xhi_, x = sp.symbols("R0 Hb P_ y m xhi_ x")
P = P_/2
eq1 = x - sp.sqrt((P - (m*(y*y)/2*pi)*log(R0/x))/(pi*xhi_*Hb))
a = sp.solve_linear(eq1, x)
sp.pprint(a)
⎛ ____________________ ⎞
⎜ ╱ 2 ⎛R₀⎞ ⎟
⎜ ╱ π⋅m⋅y ⋅log⎜──⎟ ⎟
⎜ ╱ P ⎝x ⎠ ⎟
⎜ ╱ ─ - ────────────── ⎟
⎜ ╱ 2 2 ⎟
⎜- ╱ ────────────────── , √π⎟
⎝ ╲╱ Hb⋅xhi ⎠
那么你could do :
import numpy as np
a[0].subs({R0:0.003, Hb:5e8, P_:1000, y:2500, m:4*np.pi*10e-7, xhi_:1, pi:np.pi})
-4.47213595499958e-5*sqrt(-123.370055013617*log(0.003/x) + 500)
但如果我理解正确的话,这并不是你最初的想法;你实际上想要一个 x
的值,所以 solve
是合适的:
a = sp.solve(eq1, x)
失败了
NotImplementedError: multiple generators [x, sqrt(P_/(2*Hbxhi_) - pim*y**2*log(R0/x)/(2*Hb*xhi_))]
No algorithms are implemented to solve equation x - sqrt((P_/2 - pimy**2*log(R0/x)/2)/(Hb*xhi_))/sqrt(pi)
其中seems to imply该方程无法解析解 sympy。
您可以尝试使用数值求解器,如图所示here .
关于python - 如何在 sympy 中求解非线性方程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52951166/