2012-01-07 13 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,y,z == 0、すなわちx == 0は私がA[x,y,z]ですべての式をしたい場合に対応できるように、私はX[x]Y[y]、およびZ[z]の規則にA[x,y,z]を設定している:私は、次の機能を設定していると仮定xはゼロになるか無視されます(Log[x]を含む)。私はA[x,y,z]の部分派生を含む関数B[x,y,z]を定義しました。

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

が存在する必要があります。基本的に戻ってA[x,y,z]:= Y[y]+Z[z]を作ることですが、代わりに、私は現在、以下、理解しやすい、エラーに実行していますそのB[0,y,z]利回り

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

ように今、私は結果が欲しいですこれをMathematicaで何らかの形で行い、Hold関数や何か関連するものがあるかどうか疑問に思っています。助けてくれてありがとう。

答えて

6

1つの方法は、微係数にダミー変数を使用し、後で実際の値に置き換えることです。

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, ZUpValuesを定義伴う可能性が0の要因を持っているので、これは動作します。

+0

これは簡単な修正でした。ありがとうございました! – CaptanFunkyFresh

関連する問題