f[x]などの抽象的な奇数関数を定義するにはどうすればよいですか。
f[x]+f[-x] が現れるたびに、mathematica はそれをゼロに単純化します。
f[x]などの抽象的な奇数関数を定義するにはどうすればよいですか。
f[x]+f[-x] が現れるたびに、mathematica はそれをゼロに単純化します。
これは、upvalues を使用して簡単に実行できます。
f[x_] + f[y_] /; x == -y ^:= 0
通常、Mathematica は上記のルールを に割り当てようとしますがPlus
、これは保護されているためもちろん機能しません。^:=
の代わりにを使用すると:=
、ルールを に割り当てることができますf
。簡単なチェックで次の結果が得られます。
In[2]:= f[3]+f[-3]
Out[2]:= 0
編集:ただし、これはPlus
. 次のような、より一般的なものを使用することをお勧めします。
f[x_?Negative] := -f[-x]
これは次のようなものでも機能します
In[4]:= -f[3] - f[-3]
Out[4]:= 0
関数をシンボリックに機能させたい場合は、次のようなものを追加できます。
f[-a_] := -f[a]
苦手なのですが、TransformationFunctions
の を使ってみてはSimplify
どうでしょうか?
たとえば、が奇数関数で が偶数関数であると2 Sin[x] + f[x] + 3 + f[-x] + g[x] + g[-x]
仮定して、式を単純化したいとします。次に、 rule to sayとrule が必要です。f[x]
g[x]
f[x]+f[-x]->0
g[x]+g[-x]->2 g[x]
したがって、書く
myRules[e_]:=e/.f[x]+f[-x]->0/.g[x]+g[-x]->2 g[x]
Simplify[2 Sin[x]+ f[x]+ 3 +f[-x]+ g[x] + g[-x],
TransformationFunctions->{Automatic,myRules}]
そしてこれは
3+2 g[x]+2 Sin[x]
ところで、上記では、f[x]
本当は pattern であるべきところを使用しているf[x_]
ため、 などの式f[anything]+f[-anything]
もゼロになります。したがって、これを改善してmyRules
より一般的なものにする必要があります。現在は、正確な式に対してのみ機能しますf[x]
。これを改善する方法は今のところわかりません。遅延ルールなどが必要になる場合があります。もっと考えてみます。しかし、あなたは私が望む考えを得る.