如何定义抽象奇函数,比如f [x]。
每当出现f [x] + f [-x]时,mathematica将其简化为零。
答案 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
。我现在不确定如何改善这一点。可能需要延迟规则左右。会考虑更多。但是你得到了我希望的想法。