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

Function 如何在mathematica中定义抽象奇数函数?,function,wolfram-mathematica,Function,Wolfram Mathematica,如何定义一个抽象的奇数函数,比如f[x] 无论何时出现f[x]+f[-x],mathematica都会将其简化为零。我不擅长这一点,但是使用Simplify的转换函数如何 例如,假设表达式2sin[x]+f[x]+3+f[-x]+g[x]+g[-x]要简化它,假设f[x]是奇数函数而g[x]是偶数函数。然后我们需要一个规则说f[x]+f[-x]>0和一个规则g[x]+g[-x]>2g[x] 因此写 myRules[e_]:=e/.f[x]+f[-x]->0/.g[x]+g[-x]->

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


无论何时出现f[x]+f[-x],mathematica都会将其简化为零。

我不擅长这一点,但是使用
Simplify
转换函数如何

例如,假设表达式
2sin[x]+f[x]+3+f[-x]+g[x]+g[-x]
要简化它,假设
f[x]
是奇数函数而
g[x]
是偶数函数。然后我们需要一个规则说
f[x]+f[-x]>0
和一个规则
g[x]+g[-x]>2g[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]
。我现在不知道如何改进这一点。可能需要一个延迟的规则。我会仔细考虑的。但是我希望你能得到这个想法。

这可以用upvalue轻松完成

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]

m@中有几个函数属性,例如
Orderless
。我想要的是一个“OddFunction”属性,有办法做到这一点吗?谢谢:)完全被你的回答震惊了。谢谢你,艾因班迪。真的,真的是我想要的。是的,数字和符号的组合也是一个很好的选择。谢谢你,艾因班迪。