2012-10-15 1 views
2

Mathematica 프로그램에서 엔트로피 계산을하고이 규칙을 사용하고 싶습니다 : Log[0]*0 = 0. 깨끗한 방법이 없나요? 자신의 기능? Mathematica : 0 * (- Inf) = 0이되도록 곱셈을 재정의하십시오.

내가이 같은 것들을 시도 http://tinyurl.com/9d8r4rt에서 영감 :

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

을하지만 내 경우에는 작동하지 않습니다. 이것을 할 수있는 우아한 방법이 있습니까?

+2

필자는 Mathematica의 평가 프로세스를 파괴하는 방법을 이해하지 못한다면 거의 확실하게해서는 안된다는 견해를지지합니다. 예를 들어, 곱셈이나'Log []'를 (부분적으로) 다시 정의하거나'Up/Down/Own' 값을'0'으로 제공한다면, 여러분이 사용하는 모든 다른 연산에 대한 영향에 대해 매우 확신하고 싶을 것입니다 Mathematica가 부정한 상태에있는 동안. 엔트로피 계산을 위해 자신의 함수를 정의하고 범위 내에서 원하는 단순화를 구현하는 것이 훨씬 안전하고 직관적입니다. –

답변

0

위의 고성능 마크의 설명을 지원합니다. 그럼에도 불구하고 이것은 흥미로운 질문입니다. 그 대답은 사소한 것이기 때문입니다.

당신은해야합니다 :

Unprotect[DirectedInfinity]; 

DirectedInfinity /: Log[0] 0 := 0 

당신 때문에 DirectedInfinity 필요

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

을 그리고 당신은 UpValue 필요, TagSet를 사용하여 만든에 대한 기본 반응을 재정의 -∞ * 0, UpValues가 oth 전에 시도되기 때문에 어의 정의.

관련 문제