2016-03-30 7 views
2

を保つために、私は次のコードを持っている:パイソン - SymPy - フォースSymPy順

from sympy import * 
init_printing() 

x,y = symbols('x y') 
u = Function('u')(x,y) 
ux,uy,uxx,uxy,uyy = symbols("u_x u_y u_xx u_xy u_yy") 

mainEvaluation = uxx - 2*sin(x)*uxy - (cos(x) ** 2) * uyy - 2*ux + (2 - cos(x) + 2*sin(x))*uy 

そしてprint(mainExpression)の出力は

-2*u_x + u_xx - 2*u_xy*sin(x) + u_y*(2*sin(x) - cos(x) + 2) - u_yy*cos(x)**2 

いるときに問題がある:私は、変数の元の順序をしたいが。

u_xx - 2*u_xy*sin(x) - u_yy*cos(x)**2 - 2*u_x + u_y*(2*sin(x) - cos(x) + 2) 

すべてこれはIPythonノートブックで行われます。 注文を保つ方法はありますか?

+0

https://stackoverflow.com/questions/14624511/prevent-sympy-from-rearranging-the-equation – asmeurer

答えて

4

悲しいことに、悲しいことに、SymPyは入力順を追跡しません(質問のコメントにリンクされている他の質問を参照)。式を必要に応じて注文する独自の注文関数を定義することはできますが、情報が保存されていないため入力したとおりに注文することはできません。

+0

これを強制する方法はありますか? –

1

このhttp://docs.sympy.org/0.7.2/modules/utilities/misc.htmlを読んでみてください、あなた

注助けることができることがあります返さ

キーが同じプラットフォーム間となります正規の順番にアイテムを取得するために有用です。これは、式のリストをソートするための直接有用ではありません。

>>> a, b = x, 1/x 

のみ1項を持っているので、sort_keyのその値が順番に影響されません:

>>> a.sort_key() == a.sort_key('rev-lex') 
True 

及びbは、キーを組み合わせている場合

>>> eq = a + b 
>>> eq.sort_key() == eq.sort_key('rev-lex') 
False 
>>> eq.as_ordered_terms() 
[x, 1/x] 
>>> eq.as_ordered_terms('rev-lex') 
[1/x, x] 

しかし、これらの用語のそれぞれのキーは、順序の値とは独立しているので、彼らはソート異なり、彼らはseparat表示されていない場合:注文することができる条項があるので異なりますリスト内で

>>> sorted(eq.args, key=default_sort_key) 
[1/x, x] 
>>> sorted(eq.args, key=lambda i: default_sort_key(i, order='rev-lex')) 
[1/x, x] 

これらのキーを使用するときに得られる用語の順序は、これらの用語が製品の要素であった場合に得られる順序です。

+0

ありがとうございました!私はそれを調べます。私はそのような目的のために旗や何かがあるのか​​疑問に思った。希望がある。 – UpmostScarab