我如何定义一个抽象的奇函数,比如 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
of怎么样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
更通用。现在它只适用于确切的表达式f[x]
。我现在不确定如何改善这一点。可能需要延迟规则左右。会多想。但你明白我希望的想法。