2014-06-26 49 views
1

我在Sympy中使用Python。公式根:參數沒有得到簡化

,我需要解決下面的公式,找到4根(歐米茄是我未知):

deter= 0.6*omega**4*cos(omega*t)**2 - 229.0*omega**2*cos(omega*t)**2 + 5880.0*cos(omega*t)**2 

我試圖用解決:

eqcarr=solve(deter,omega,exclude=[t]) 

我得到這樣的輸出:

[-18.8143990830350, -5.26165884593044, 5.26165884593044, 18.8143990830350, 1.5707963267949/t, 4.71238898038469/t] 

我只需要前4個值,而不是t係數值。我期望cos(ω* t)** 2在求解中被簡化,但是這不會發生。

回答

2

根據文檔solve不會解決在exclude中傳遞的任何免費符號。

'exclude = [](default)' 請勿嘗試解決排除中的任何空閒符號; 如果給出表達式,它們中的空閒符號將自動提取 。

這並不意味着要過濾解決方案。

您可以通過這樣解決問題:

In [10]: from sympy import * 
In [11]: from sympy.abc import omega, t 
In [12]: deter= 0.6*omega**4*cos(omega*t)**2 - 229.0*omega**2*cos(omega*t)**2 + 5880.0*cos(omega*t)**2 

In [13]: eqcarr=solve(deter,omega,exclude=[t]) 

In [14]: filtered = [i for i in eqcarr if not i.has(t)] 
In [15]: filtered 
Out[15]: [-18.8143990830350, -5.26165884593044, 5.26165884593044, 18.8143990830350] 
+0

該解決方案的工作,但我想知道與T解決方案的含義,這樣我可以瞭解如何管理它們。 – VitOne

+0

您在表達式中傳遞的''t''只是一個符號,沒有賦值給它。所以它會以一些解決方案出現。 –

+1

解決方案來自於這樣一個事實,即你可以從表達式中分解出「cos(ω* t)** 2」。其中't'的兩個解決方案使'cos(ω* t)'等於0.象徵性地,它們是'pi /(2 * t)'和'3 * pi /(2 * t)'。另外四個根是多項式'0.6 *歐米茄** 4 - 229.0 *歐米茄** 2 + 5880.0'的根。 – asmeurer