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

Kob*_*oba 1 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]
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我得到了一些奇怪的输出.有关在(3,5,1)处评估该衍生物的任何提示吗?

rco*_*yer 6

你得到的结果让Out[124]我相信f没有清除以前的定义.特别是,它似乎具有所谓的OwnValue由表格的表达式设定的东西

f = 1/8 
Run Code Online (Sandbox Code Playgroud)

(注意缺少冒号.)您可以通过执行来验证这一点

g = 5;
OwnValues[g]
Run Code Online (Sandbox Code Playgroud)

返回

 {HoldPattern[g] :> 5}
Run Code Online (Sandbox Code Playgroud)

不幸的是,OwnValues 取代任何其他定义,如函数定义(称为a DownValue或其变体,an UpValue).所以,定义

g[x_] := x^2
Run Code Online (Sandbox Code Playgroud)

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

问题在于,您在定义时使用SetDelayed(:=)f.这可以防止赋值的右侧接受值,直到f稍后执行.例如,

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

x = 5
y = 6
f[x, y]
Run Code Online (Sandbox Code Playgroud)

6而是返回.这是因为6最后生成的结果,f实际上是同义词%.有两种方法可以使用Set(=)

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

f[5, 6]
Run Code Online (Sandbox Code Playgroud)

16正如预期的那样返回,或确保%SetDelayed获取之前将其替换为其值,

Clear[f, x, y]
D[x^2 + x y, x];
f[x_, y_] := Evaluate[%]
Run Code Online (Sandbox Code Playgroud)

  • @Dostre Mathematica的大多数专家已经转移到他们自己的stackexchange站点:[Mathematica.se].如果您对Mathematica有任何疑问,那么在那里张贴是值得的. (2认同)