で混合可変用語を削除SymPyシンボルe
とi
の二つの機能を検討:これは、しかしながらSymPy級数展開
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
が共に小さいことを想定します
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)
を3次以上の項を無視することができます。 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がそれらを保持するように、所望のカットオフよりも小さい。しかし、数学的には小さい²・小さい²=小さい⁴。同様に、e・i²= small・small²=small³。
少なくとも私の目的のために、これらの混合用語を削除します。混合してOrder
を追加しても、目的の結果は得られません(最初の2つの注文は無視されるようです)。
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)ここで、+ B> N ?
厄介な解決策:私はこれを解決する方法を見つけましたが、それは面倒で潜在的に一般的ではありません。
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に一般化することができる1つのステップでこれを行う方法はありますか?また、私のソリューションは、混合用語が失われたことを示すbig-O表記を失います。これは必要ではないがいいだろう。