2012-01-07 4 views
1

내가 사용하고있는 표현은 너무 복잡하여 여기에 완전히 입력 할 수는 없지만 지금 실행중인 문제를 강조하는 간단한 예제를 포함 시켰습니다. 이 문제를 해결하기에 충분한 프로그래밍 불만이있는 누군가가 있기를 바랍니다. 필자는 프로그래밍에 대한 배경 지식이 거의 없지만 Mathematica의 기초를 알고 있다는 말로 시작합니다. 모든 도움이 크게 감사드립니다. 나는 다음과 같은 기능을 설정 한 가정 :Mathematica 평가 제어 및 표현

X[x_] := x Log[x] 
X[0] := 0 
Y[y_] := y Log[y] 
Y[0] := 0 
Z[z_] := z Log[z] 
A[x_, y_, z_] := X[x] + Y[y] + Z[z] 

In[7]:= A[x, y, z] 

Out[7]= x Log[x] + y Log[y] + z Log[z] 

In[8]:= B[x_, y_, z_] := 
Evaluate[A[x, y, z] - x*D[A[x, y, z], x] - y*D[A[x, y, z], y] - 
    z*D[A[x, y, z], z]] 

In[9]:= B[x, y, z] 

Out[9]= x Log[x] - x (1 + Log[x]) + y Log[y] - y (1 + Log[y]) + 
z Log[z] - z (1 + Log[z]) 

내가 X[x], Y[y]에 대한 규칙 A[x,y,z]을 설정, 그리고 x == 0 내가 A[x,y,z]의 모든 표현을 할 때 즉, 경우 x,y,z == 0를 처리 할 수 ​​있도록 Z[z]x은 0으로되거나 무시되어야합니다 (예 : Log[x]). A[x,y,z]의 부분 도함수가 포함 된 함수 B[x,y,z]을 정의했습니다.

Infinity::indet: Indeterminate expression 0 (-[Infinity]) encountered. >>

이 있어야합니다 : B[0,y,z]는 기본적으로 돌아가서 A[x,y,z]:= Y[y]+Z[z]을 대신 내가 현재 다음, 이해, 오류로 실행하고하는 것입니다

yLog[y]-y(1+Log[y])+zLog[z]-z(1+Log[z]) 

를 얻을 수 있도록 지금, 나는 결과를 원한다 Mathematica로이 문제를 해결할 수있는 방법이 있습니다. Hold 함수 나 관련이 있는지 궁금합니다. 도와 주셔서 감사합니다.

답변

6

한 가지 방법은 파생 변수에서 더미 변수를 사용하고 나중에 실제 값으로 바꾸는 것입니다. 각 유도체는보다 일반적인 솔루션은 원점에 파생 상품을 처리하기위한 X, Y, ZUpValues을 정의 포함 할 수 0 (A)의 요소를 가지고 있기 때문에

Clear[X, Y, Z]; 
X[x_] := x Log[x] 
X[0] = 0; 
Y[y_] := y Log[y] 
Y[0] = 0; 
Z[z_] := z Log[z] 
Z[0] = 0; 

A[x_, y_, z_] := X[x] + Y[y] + Z[z]  
B[x_, y_, z_] := 
Module[{xx, yy, zz}, 
    A[x, y, z] - x*D[A[xx, y, z], xx] - y*D[A[x, yy, z], yy] - 
    z*D[A[x, y, zz], zz] /. {xx -> x, yy -> y, zz -> z}] 

B[0, y, z] 

(* Output: y Log[y] - y (1 + Log[y]) + z Log[z] - z (1 + Log[z]) *) 

이 작동 (나는 순간에이를 확인하는 시간이 없습니다).

+0

간단한 수정이었습니다. 감사합니다! – CaptanFunkyFresh