2015-07-03 54 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。 –