我正在尝试解决看起来像这样的电子网络:
un uf
o-->-----[zb]------<---o
+ | | +
pn [yn] [yf] pf
- | | -
o----------------------o
我进行节点分析并得到一个等效的方程组,看起来像这两个独特的p和s组。
un1, un2, uf1, uf2, pn1, pn2, pf1, pf2, yn, yf, zp = symbols('un1 un2 uf1 uf2 pn1 pn2 pf1 pf2 yn yf zp')
eqns=[un1 -pn1*(yn + 1/zp) - pf1*(-1/zp),
uf1 - pn1*(-1/zp) + pf1*(yf+1/zp),
un2 - pn2*(yn + 1/zp) - pf2*(-1/zp),
uf2 - pn2*(-1/zp) - pf2*(yf + 1/zp)]
我想用u和p项求解yn,zp和yf,因为给出了u和p项。 (由u和p表示un1,un2,uf1,uf2,pn1,pn2,pf1,pf2)。
我在底部找到了响应并尝试使用linsolve函数,但我得到了null集:
In: linsolve(eqns, [yn, yf, zp])
Out: EmytySet()
如果我为方程式输入虚拟系数,那么它的行为与预期相符
In: Y11, Y12, Y21, Y22 = symbols('Y11, Y12, Y21, Y22')
In: eqns_test = [un1 -pn1*Y11 - pf1*Y12,
uf1 - pn1*Y21 - pf1*Y22,
un2 - pn2*Y11 - pf2*Y12,
uf2 - pn2*Y21 - pf2*Y22]
In: linsolve(eqns_test, Y11, Y12, Y21, Y22)
Out:{((pf1*un2 - pf2*un1)/(pf1*pn2 - pf2*pn1), (-pn1*un2 + pn2*un1)/(pf1*pn2 - pf2*pn1), (pf1*uf2 - pf2*uf1)/(pf1*pn2 - pf2*pn1), (-pn1*uf2 + pn2*uf1)/(pf1*pn2 - pf2*pn1))}
我该如何解决这个方程组?
https://stackoverflow.com/questions/31547657/how-can-i-solve-system-of-linear-equations-in-sympy#=
答案 0 :(得分:0)
您的系统是非线性的,因此您需要使用sympy的nonlinsolve()求解器。
printing.init_printing(use_latex='mathjax')
from sympy import *
import sympy as sp
un1, un2, uf1, uf2, pn1, pn2, pf1, pf2, yn, yf, zp = symbols('un1 un2 uf1 uf2 pn1 pn2 pf1 pf2 yn yf zp')
eqns=[un1 -pn1*(yn + 1/zp) - pf1*(-1/zp),
uf1 - pn1*(-1/zp) + pf1*(yf+1/zp),
un2 - pn2*(yn + 1/zp) - pf2*(-1/zp),
uf2 - pn2*(-1/zp) - pf2*(yf + 1/zp)]
sol=nonlinsolve(eqns, [yn, yf, zp])
pprint(sol)
输出:
⎧⎛pf₁⋅un₂ - pf₂⋅un₁ - pn₁⋅un₂ + pn₂⋅un₁ -(uf₁⋅(pf₁⋅pn₂ - pf₂⋅pn₁) + (pf₁ + pn
⎨⎜─────────────────────────────────────, ─────────────────────────────────────
⎩⎝ pf₁⋅pn₂ - pf₂⋅pn₁ pf₁⋅(pf₁⋅pn₂ - pf₂
₁)⋅(pn₁⋅un₂ - pn₂⋅un₁)) pf₁⋅pn₂ - pf₂⋅pn₁⎞⎫
────────────────────────, ─────────────────⎟⎬
⋅pn₁) pn₁⋅un₂ - pn₂⋅un₁⎠⎭