2012-01-07 72 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]) 

我已經建立了A[x,y,z]X[x]Y[y]規則,Z[z]以便它可以處理時x == 0我想在A[x,y,z]所有表達式的情況下x,y,z == 0,即與x去零或被忽略,包括Log[x]。我已經定義了一個函數B[x,y,z],它涉及到A[x,y,z]的部分派生。現在,我想要的結果,這樣B[0,y,z]產生

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

那就是基本上回去,讓A[x,y,z]:= Y[y]+Z[z]而是我目前運行到下面的,可以理解的,錯誤:

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

必須有用Mathematica解決這個問題,我想知道是否會涉及Hold函數或相關的東西。謝謝大家的幫助。

回答

6

一種方法是在衍生物中使用虛擬變量,然後用實際值替換。

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]) *) 

這工作,因爲每個衍生物具有更廣泛的解決方案可能涉及對X, Y, Z定義UpValues爲原點處理衍生品0 A的一個因素(我沒有時間在此刻檢查)。

+0

這是一個簡單的修復,謝謝! – CaptanFunkyFresh 2012-01-07 21:31:36