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]

TagSetまた、 に対するデフォルトの反応をオーバーライドするには、 を使用して作成された UpValue が必要です-∞ * 0。これは、UpValue が他の定義の前に試行されるためです。

于 2012-10-16T12:32:31.650 に答える