考慮SymPy符號的兩個功能e
和i
:刪除在SymPy級數展開混合變量項
from sympy import Symbol, expand, Order
i = Symbol('i')
e = Symbol('e')
f = (i**3 + i**2 + i + 1)
g = (e**3 + e**2 + e + 1)
z = expand(f*g)
這將產生
z = e**3*i**3 + e**3*i**2 + e**3*i + e**3 + e**2*i**3 + e**2*i**2 + e**2*i + e**2 + e*i**3 + e*i**2 + e*i + e + i**3 + i**2 + i + 1
然而,假設e
和i
都是小和我們可以忽略三個或三個以上的術語。使用Sympy的一系列工具或簡單地增加一個O形符號Order
類可以處理這個問題:
In : z = expand(f*g + Order(i**3) + Order(e**3))
Out: 1 + i + i**2 + e + e*i + e*i**2 + e**2 + e**2*i + e**2*i**2 + O(i**3) + O(e**3)
看起來不錯。但是,我仍然留有混合條款e**2 * i**2
。這些術語中的單個變量小於期望的截止點,所以SymPy保留它們。但是,數學上小2·小2 =小4。同樣,e·i²= small·small²=small³。
至少對我而言,我希望這些混合條件下降。添加混合Order
不會產生所需的結果(它似乎忽略了前兩個訂單)。
In : expand(f*g + Order(i**3) + Order(e**3) + Order((i**2)*(e**2)))
Out: 1 + i + i**2 + i**3 + e + e*i + e*i**2 + e*i**3 + e**2 + e**2*i + e**3 + e**3*i + O(e**2*i**2, e, i)
問題:確實SymPy有一個簡單的系統快速除去第n次的項,以及那些術語(E^A)·(I^b)如A + B>Ñ ?
凌亂的解決方案:我已經找到了解決這個問題的方法,但它很混亂,可能並不普遍。
z = expand(f*g + Order((e**2)*i) + Order(e*(i**2)))
zz = expand(z.removeO() + Order(e**3) + Order(i**3))
產生
zz = 1 + i + i**2 + e + e*i + e**2 + O(i**3) + O(e**3)
這正是我想要的。所以要指定我的問題:有沒有辦法做到這一步,可以推廣到任何n?另外,我的解決方案失去了表示混合條款丟失的大O符號。這不是必需的,但會很好。