sympyを使用して、exp(C+anything)
のすべての出現をC*exp(anything)
に置き換える必要があります。 exp(C)
は定数なので、私はちょうどC
と書いています。パターンのパターン一致と式内の部分式のすべての出現の変更方法
私は式の中exp
の発生のためにこれを行うことができます。しかし、1つのインスタンスが存在する場合、それを行う方法はしないでください。例えば
、1つのインスタンスの、x+exp(C_0+3*x)+3*y
のように、私は1つのインスタンスのx+C_0*exp(3*x)+3*y
にそれを変更する必要があり、これは
を与えるいくつかの試行錯誤from sympy import *
x,y,C_0 = symbols('x y C_0')
expr=x+exp(C_0+3*x)+3*y
#first check if exp is in the expression
if any([isinstance(a, exp) for a in preorder_traversal(expr)]):
p_1=Wild('p1');p_2=Wild('p_2');p_3=Wild('p_3')
r=(p_1+exp(C_0+p_2)+p_3).matches(expr)
expr.subs(exp(C_0+r[p_2]),C_0*exp(r[p_2]))
後に動作するようです
C_0*exp(3*x) + x + 3*y
私はのように何かに変更する必要がありますx+C_0*exp(3*x)+3*y+C_0*exp(30*x+y)
私はできません可能性のあるケースごとにパターンが一致します。私はを変更する方法を必要とするすべてのは
を与える
expr = x + Exp[c + 3*x]*3*y + 3*y + Exp[c + 30*x + y]
expr /. Exp[c + any_] :> (c Exp[any])
を次のように私は上記の操作を行い、Mathematicaでは
をオカレンスexp(C+anything)
〜C*exp(anything)
のように、表現全体にパターンを与える必要はありません。これは、多くの点で変化する可能性があるためです。
これはpython/sympyでも可能です。どのようにそれを行うためのヒント?
脇に:SymPy式は不変です: 'expr.subs'メソッドは' expr'を変更しないので、返される値は何かに代入する必要があります。 – FTP
@Alexはい、私はそれを知っていました、私は今のところ結果を印刷していました。 – Nasser