sympy - 用sympy符号解6个方程和6个未知数

标签 sympy symbolic-math

我正在尝试使用 sympy.solve() 来解决具有 6 个方程和 6 个未知数的问题系统:

import sympy as sp

S11A,S21A,S22A = sp.symbols('S11A S21A S22A')
S11B,S21B,S22B = sp.symbols('S11B S21B S22B')
s11,s21,s31,s22,s31,s32,s33,G3 = sp.symbols('s11 s21 s31 s22 s31 s32 s33 G3')

eq1 = S11A - s11 + s31*G3*s31/(1-s33*G3)
eq2 = S22A - s22 + s32*G3*s32/(1-s22*G3)
eq3 = S21A - s21 + s31*G3*s32/(1-s33*G3)
eq5 = S11B - s11 + s21*G3*s21/(1-s22*G3)
eq6 = S22B - s33 + s32*G3*s32/(1-s33*G3)
eq7 = S21B - s31 + s21*G3*s32/(1-s22*G3)

soln = sp.solve([eq1,eq2,eq3,eq5,eq6,eq7],(s11,s31,s33,s22,s32,s21))

但是,几个小时后,计算机仍在研究解决方案。也许它太复杂了?

最佳答案

是的,即使是对方程的明智求解也无法逃脱伴随着最终要求解的高阶方程而最终发生的符号爆炸。例如,您可以分别求解 s11、s21 和 s31 的 eq1、eq2 和 eq5——它们是线性的——并将这些解代入其余方程。有两个是二次的,但是当它们被代入剩下的方程时,就没有什么可以做的了。该表达式并没有简化,您会得到一个非常大且笨拙的方程,该方程有许多根部,即使删除这些根部,也会为您留下一个不允许通用解的高阶方程。

在这些情况下,最好插入已知值并仅使用 6 个变量中的 6 个方程。

关于sympy - 用sympy符号解6个方程和6个未知数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38577107/

相关文章:

Python:如何将 Sympy 图像导出为 png?

matlab - MATLAB 中的因式分解符号表达式(和的平方)

matlab - 如何缩短这个符号表达呢?

matlab - 在 Matlab 中获取符号多项式的系数

python - 在文本中使用 sympy 打印希腊字母

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

python - 函数矩阵、SymPy 和 SciPy 的数值积分

python - SymPy 的符号集成速度慢

python - 用 sympy 替换表达式