7

次の表現があります。

from sympy import pi, sin, cos, var, simplify
var('j,u,v,w,vt,wt,a2,t,phi')

u0 = v*a2*sin(pi*j/2 + pi*j*t*phi**(-1)/2) + pi*vt*a2*cos(pi*j/2 + pi*j*t*phi**(-1)/2)*j*phi**(-1)/2 + pi*w*a2*cos(pi*j/2 + pi*j*t*phi**(-1)/2)*j*phi**(-1)

これは単純化できます:

print simplify(u0)
#a2*(pi*j*vt*cos(pi*j*(phi + t)/(2*phi)) + 2*pi*j*w*cos(pi*j*(phi + t)/(2*phi)) + 2*phi*v*sin(pi*j*(phi + t)/(2*phi)))/(2*phi)

部分式を考えると:

bj = pi*j*(phi + t)/(2*phi)
cj = j*pi/(2*phi)

bj現在、手動でcj簡略化された式に置き換えて、u0次を取得します。

u0 = a2*(v*sin(bj) + cj*vt*cos(bj) + 2*cj*w*cos(bj))

手動置換を回避して、SymPy を使用してそれを達成することは可能ですか?

4

2 に答える 2

11

subsあなたが見逃しているのは、シンボルだけでなく、任意の式を置き換えることだと思います

>>> print simplify(u0).subs({pi*j*(phi + t)/(2*phi): bj, j*pi/(2*phi): cj})
a2*(pi*j*vt*cos(bj) + 2*pi*j*w*cos(bj) + 2*phi*v*sin(bj))/(2*phi)

(それが の代わりにsimplifyなるので使用しましたが、それ以外の場合は必要ありません)pi*j*(phi + t)/(2*phi)pi*j/2 + pi*j*t/(2*phi)

置換と置換の詳細については、http://docs.sympy.org/0.7.3/tutorial/basic_operations.html#substitutionを参照してください。より高度な交換を行いたい場合は、replaceメソッドをご覧ください。

于 2013-08-02T19:23:28.967 に答える
1

cseルーチンで共通の部分式を見つけることができます。

于 2013-08-02T08:51:46.553 に答える