Mathematica:重新定义乘法,使0 *( - Inf)= 0

时间:2012-10-15 13:04:28

标签: wolfram-mathematica undefined logarithm infinity entropy

在我的Mathematica程序中,我做了一些熵计算,我想使用这个约定:Log[0]*0 = 0.有没有一个干净的方法来做或我必须编写自己的函数?

受到http://tinyurl.com/9d8r4rt的启发,我尝试过这样的事情:

Unprotect[Times];
Times[0,  -Infinity] := 0;
Protect[Times];

但它似乎不适用于我的情况。是否有一种优雅的方式来做到这一点?

1 个答案:

答案 0 :(得分:0)

我支持上面的High Performance Mark声明。然而,这是一个有趣的问题,因为答案是不平凡的。

你需要:

Unprotect[DirectedInfinity];

DirectedInfinity /: Log[0] 0 := 0

您需要DirectedInfinity因为:

Log[0] // FullForm
DirectedInfinity[-1]

你需要一个使用TagSet制作的UpValue来覆盖对-∞ * 0的默认反应,因为在其他定义之前会尝试使用UpValues。