2015-07-03 21 views
0
from sympy import * 
K, T, s = symbols('K T s') 
G = K/(1+s*T) 
Eq1 =Eq(G+1,0) 

我想重写等式Eq1与sympy多项式:1 + K + T * S == 0重写等式多项式

我将如何做到这一点?

我花了几个小时的搜索和尝试简化的方法,但找不到一个优雅,简短的解决方案。

在SymPy的实际问题:

from IPython.display import display 
import sympy as sp 
sp.init_printing(use_unicode=True,use_latex=True,euler=True) 
Kf,Td0s,Ke,Te,Tv,Kv,s= sp.symbols("K_f,T_d0^',K_e,T_e,T_v,K_v,s") 
Ga= Kf/(1+s*Tv) 
Gb= Ke/(1+s*Te) 
Gc= Kf/(1+s*Td0s) 
G0=Ga*Gb*Gc 
G1=sp.Eq(G0+1,0) 
display(G1) 

如何告诉Sympy重写等式G1为多项式形状s^3 *(...)+ S^2 *(......)+ S *(...)+(...)= ...?

从教材的实际问题:http://i.imgur.com/J1MYo9H.png

应该如何看待这样的:http://i.imgur.com/RqEDo7H.png

这两个方程是等价的。

+1

我不完全得到的意图,即“重写等式”的含义。为什么不用“N = K + T * s”来定义新方程“Eq2 = Eq(N + 1,0)”? – Cleb

+0

对不起,我忘了提这是一个简单的例子。我的实际问题包括K /(1 + s * T)类型的几个传递函数G1,G2,G3 ...。得到的方程是G1 * G2 * G3 + 1 == 0,我希望以多项式形式出现。 – Malte

+1

仍然没有得到它,但可能是热量;)你可以编辑这个问题并解释为G1 * G2 * G3 + 1 == 0的情况吗?这至少可以帮助我思考一个解决方案... – Cleb

回答

0

以下是您可以做的事情。

import sympy as sp 
Kf,Td0s,Ke,Te,Tv,Kv,s= sp.symbols("K_f,T_d0^',K_e,T_e,T_v,K_v,s") 
Ga= Kf/(1+s*Tv) 
Gb= Ke/(1+s*Te) 
Gc= Kf/(1+s*Td0s) 
G0=Ga*Gb*Gc 

扔掉分母

eq = (G0 + 1).as_numer_denom()[0] 

展开式,并收集与S的权力方面。

eq = eq.expand().collect(s) 

最终方程

Eq(eq, 0) 
Eq(K_e*K_f**2 + T_d0^'*T_e*T_v*s**3 + s**2*(T_d0^'*T_e + T_d0^'*T_v + T_e*T_v) + s*(T_d0^' + T_e + T_v) + 1, 0) 
+0

Hi Sartaj Singh,谢谢,这就解决了我的问题,最初我在寻找一个一步的解决方案,但是我对你的方法很满意,特别是eq.expand ().collect(s)我不知道,感谢这里的所有帮手。 – Malte

+0

很高兴帮助。大多数此类功能的文档可以在这里找到http://docs.sympy.org/latest/modules/simplify/simplify.html。 –