在Mathematica中评估三个变量函数的导数

时间:2012-05-24 01:34:42

标签: wolfram-mathematica

我试图在Mathematica中评估函数在(3,5,1)处的导数。所以,这就是我的意见:

   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)处评估该衍生物的任何提示吗?

1 个答案:

答案 0 :(得分:6)

Out[124]获得的结果让我相信f未被清除之前的定义。特别是,它似乎具有所谓的OwnValue,它由表单的表达式设置

f = 1/8 

(注意缺少冒号。)您可以通过执行

来验证这一点
g = 5;
OwnValues[g]

返回

 {HoldPattern[g] :> 5}

不幸的是,OwnValues supersede任何其他定义,例如函数定义(称为DownValue或其变体,UpValue)。所以,定义

g[x_] := x^2

会导致g[5]评估为5[5];显然不是你想要的。因此,Clear您打算在定义之前用作函数的任何符号。也就是说,您对f的定义仍会遇到问题。

问题在于,您在定义:=时使用SetDelayedf)。这可以防止赋值的右侧在稍后执行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[%] 替换,

{{1}}