4

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

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

4

2 回答 2

8

这可以使用 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]
于 2012-11-12T13:55:25.140 回答
1

我不擅长这个,但是使用TransformationFunctionsof怎么样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]。我现在不确定如何改善这一点。可能需要延迟规则左右。会多想。但你明白我希望的想法。

于 2012-11-12T12:40:30.467 回答