如何在mathematica中定义抽象奇函数?

时间:2012-11-12 10:40:17

标签: function wolfram-mathematica

如何定义抽象奇函数,比如f [x]。

每当出现f [x] + f [-x]时,mathematica将其简化为零。

2 个答案:

答案 0 :(得分:7)

这可以使用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]

答案 1 :(得分:1)

我不擅长这个,但如何使用TransformationFunctions的{​​{1}}?

例如,假设你有表达式Simplify,并且想要简化它,假设2 Sin[x] + f[x] + 3 + f[-x] + g[x] + g[-x]是奇函数而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],因此f[x_]等表达式也会变为零。因此,需要对此进行改进,以使f[anything]+f[-anything]更加通用。现在它只适用于精确表达式myRules。我现在不确定如何改善这一点。可能需要延迟规则左右。会考虑更多。但是你得到了我希望的想法。