2012-05-24 104 views
1

我想在Mathematica中的一個點(3,5,1)評估函數的導數。所以,這是我的輸入:在Mathematica中評估三個變量的函數的衍生物

In[120]:= D[Sqrt[(z + x)/(y - 1)] - z^2, x] 
    Out[121]= 1/(2 (-1 + y) Sqrt[(x + z)/(-1 + y)]) 
    In[122]:= f[x_, y_, z_] := % 
    In[123]:= x = 3 
      y = 5 
      z = 1 
      f[x, y, z] 
    Out[124]= (1/8)[3, 5, 1] 

正如你所看到我得到一些奇怪的輸出。請在(3,5,1)處評估衍生物的任何提示?

回答

6

您收到的Out[124]的結果讓我相信f未被清除以前的定義。特別是,它似乎有通過執行

g = 5; 
OwnValues[g] 
所謂由所述形式

f = 1/8 

(注意缺乏結腸的。)可以驗證這一點的一種表達設置OwnValue

返回

{HoldPattern[g] :> 5} 

不幸的是,OwnValuessupersede任何其他定義,像一個函數定義(被稱爲DownValue或者其變體UpValue)。因此,定義

g[x_] := x^2 

會導致g[5],以評估5[5];顯然不是你想要的。因此,您打算在定義之前將其用作函數的任何符號。也就是說,你的f的定義仍然會遇到問題。

問題在於,在定義f時,您是否使用SetDelayed:=)。這可以防止賦值的右側獲得一個值,直到稍後執行f。例如,

D[x^2 + x y, x] 
f[x_, y_] := % 

x = 5 
y = 6 
f[x, y] 

返回6,而是。發生這種情況是因爲6是上次生成的結果,而f實際上是%的同義詞。有兩種方法解決這個問題,要麼使用Set=

Clear[f, x, y] 
D[x^2 + x y, x]; 
f[x_, y_] = % 

f[5, 6] 

返回16,符合市場預期,或確保%是由它的價值SetDelayed之前更換得到它的手就可以了,

Clear[f, x, y] 
D[x^2 + x y, x]; 
f[x_, y_] := Evaluate[%] 
+0

謝謝。非常詳細的答案。 – Koba

+2

@Dostre Mathematica的大多數專家已轉到他們自己的stackexchange站點:[Mathematica.se]。如果您對Mathematica有任何疑問,那就值得在這裏發佈。 – rcollyer

+0

哦,我不知道。好。 – Koba