python - 如何在 sympy 中求解非线性方程?

标签 python python-3.x sympy

我想使用 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/

相关文章:

Python 将 format_map 与字典一起使用

python-3.x - 如何在Python字典中使用if else条件?

python - 在 python 中使用 sympy 求解器的困难

python - 在 SymPy 中绘制带有复变量的隐式方程

python - Tensorflow LSTM RNN 输出激活函数

python - 树莓派接收蓝牙数据

python - 外壳脚本: time and python into a file

python - 使用 sympy 的微分方程的边界条件

python - int() 和 float() 的行为不一致

Python - 慢慢输入每个字符