2

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

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

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

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

4

1 回答 1

0

我支持上述高性能标志的声明。然而,这是一个有趣的问题,因为答案很重要。

你需要:

Unprotect[DirectedInfinity];

DirectedInfinity /: Log[0] 0 := 0

你需要DirectedInfinity因为:

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

并且您需要使用 , 制作的 UpValueTagSet来覆盖对 的默认反应-∞ * 0,因为在其他定义之前尝试了 UpValues。

于 2012-10-16T12:32:31.650 回答