提问人:Luis Manuel Martinez Gómez 提问时间:11/14/2023 最后编辑:smichrLuis Manuel Martinez Gómez 更新时间:11/15/2023 访问量:49
使用 SYMPY 求解 ABS 方程
solve equation with abs using sympy
问:
我正在尝试使用 sympy 求解以下方程:
.
我用来查找 Vr 方程解的代码如下:
import sympy as sp
Vr, Vs, gamma, l, Zc, P, Q = sp.symbols('Vr Vs gamma l Zc P Q', complex=true)
eqn = sp.Eq(abs(Vr)**2 - sp.conjugate(Vr) * Vs/sp.cosh(gamma * l) + Zc*(P - 1j*Q)*sp.tanh(gamma * l), 0)
S = sp.solve(eqn, Vr)
print(S)
当我运行它时,我收到以下错误:
NotImplementedError Traceback (most recent call last)
<ipython-input-1-4eabc418c1ea> in <cell line: 10>()
8
9 # Resuelve la ecuación
---> 10 S = sp.solve(eqn, Vr)
11
12 # Imprime la solución
/usr/local/lib/python3.10/dist-packages/sympy/solvers/solvers.py in solve(f, *symbols, **flags)
1005 for e in fi.find(Abs):
1006 if e.has(*symbols):
-> 1007 raise NotImplementedError('solving %s when the argument '
1008 'is not real or imaginary.' % e)
1009
NotImplementedError: solving Abs(Vr) when the argument is not real or imaginary.
这个问题似乎与方程很复杂这一事实有关,正如我试图通过删除术语的大小 |Vr|^2 代码求解方程。
我想知道是否有另一个库允许我求解方程式,或者我是否错误地实现了代码。
答:
0赞
Oscar Benjamin
11/14/2023
#1
如果你使用而不是,你可以从求解中得到答案。如果禁用检查,速度会快得多:V*conjugate(V)
abs(V)
In [88]: eq = Eq(Vr*conjugate(Vr) - Vr*Vs/cosh(gamma*l) + Zc*(P - I*Q)*tanh(gamma*l), 0)
In [89]: s1, s2 = solve(eq, Vr, check=False)
In [90]: s1
Out[90]:
____________________________________________________________
γ⋅l ╱ 4⋅γ⋅l 4⋅γ⋅l 2 2⋅γ⋅l
Vs⋅ℯ - ╲╱ - P⋅Zc⋅ℯ + P⋅Zc + ⅈ⋅Q⋅Zc⋅ℯ - ⅈ⋅Q⋅Zc + Vs ⋅ℯ
─────────────────────────────────────────────────────────────────────────
2⋅γ⋅l
ℯ + 1
In [91]: s2
Out[91]:
____________________________________________________________
γ⋅l ╱ 4⋅γ⋅l 4⋅γ⋅l 2 2⋅γ⋅l
Vs⋅ℯ + ╲╱ - P⋅Zc⋅ℯ + P⋅Zc + ⅈ⋅Q⋅Zc⋅ℯ - ⅈ⋅Q⋅Zc + Vs ⋅ℯ
─────────────────────────────────────────────────────────────────────────
2⋅γ⋅l
ℯ + 1
评论
0赞
smichr
11/15/2023
请务必在 OP 中使用而不是 per 代码(在给定的图片中不清楚)。Vr*conjugate(Vr) - conjugate(Vr)*Vs...
Vr*conjugate(Vr) - Vr*Vs...
评论