4

f[x]などの抽象的な奇数関数を定義するにはどうすればよいですか。

f[x]+f[-x] が現れるたびに、mathematica はそれをゼロに単純化します。

4

2 に答える 2

8

これは、upv​​alues を使用して簡単に実行できます。

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]
于 2012-11-12T13:55:25.140 に答える
1

苦手なのですが、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]->0g[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]。これを改善する方法は今のところわかりません。遅延ルールなどが必要になる場合があります。もっと考えてみます。しかし、あなたは私が望む考えを得る.

于 2012-11-12T12:40:30.467 に答える