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)处评估该衍生物的任何提示吗?
你得到的结果让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)
归档时间: |
|
查看次数: |
978 次 |
最近记录: |