在我的Mathematica程序中,我做了一些熵计算,我想使用这个约定:Log[0]*0 = 0.
有没有一个干净的方法来做或我必须编写自己的函数?
受到http://tinyurl.com/9d8r4rt的启发,我尝试过这样的事情:
Unprotect[Times];
Times[0, -Infinity] := 0;
Protect[Times];
但它似乎不适用于我的情况。是否有一种优雅的方式来做到这一点?
答案 0 :(得分:0)
我支持上面的High Performance Mark声明。然而,这是一个有趣的问题,因为答案是不平凡的。
你需要:
Unprotect[DirectedInfinity];
DirectedInfinity /: Log[0] 0 := 0
您需要DirectedInfinity
因为:
Log[0] // FullForm
DirectedInfinity[-1]
你需要一个使用TagSet
制作的UpValue来覆盖对-∞ * 0
的默认反应,因为在其他定义之前会尝试使用UpValues。