Mathematica:关于表达式评估的问题

时间:2011-06-01 10:03:53

标签: wolfram-mathematica

关于数学小组有一个问题,当我看着它的时候,我注意到了这个,我无法理解为什么,我认为这里的专家会知道。

做Dt [x [1]]

它给出零,因为在评估x [1]期间,剩下的最后一个值是1,如下面的TracePrint所示。因此,“1”是Dt看到的,因此Dt [1]为0。

因此Dt [x [1]]为零

In[86]:= TracePrint[ Dt[x[1] ]]

During evaluation of In[86]:=  Dt[x[1]]
During evaluation of In[86]:=   Dt
During evaluation of In[86]:=   x[1]
During evaluation of In[86]:=    x
During evaluation of In[86]:=    1
During evaluation of In[86]:=  0

Out[86]= 0

这对我有意义,直到我输入x [1],然后回到x [1]

在[84]中:= x [1]    出[84] = x [1]

但x [1]返回x [1]也对我有意义,因为x [1]没有值,所以它应该返回未评估。

所以,我的问题是,为什么看起来x [1]在上面的调用期间一直被评估为'1',但在顶级笔记本界面,它没有评估为1?

In[87]:= Evaluate[ x[1] ]
Out[87]= x[1]

由于

1 个答案:

答案 0 :(得分:5)

表达式

x[1]

评估为1 - 它是一个带有未定义值的索引变量。问题是当你使用带有1个参数的Dt形式时,x被认为是一个函数,1 - 它的参数,你得到0.当你变得更清楚时考虑

In[1]:= Dt[x[y]]

Out[1]= Dt[y] Derivative[1][x][y]

如果您现在使用

In[2]:= Dt[x[1],x[1]]

Out[2]= 1

您获得1,因为现在您将x[1]视为变量。或者,

In[3]:= Dt[x[1]^2, x[1]]

Out[3]= 2 x[1]

您对评估打印输出感到困惑,因为在评估表达式时,通常会对所有部分进行评估 - 但是(在x的任何规则缺失的情况下),x[1]也会在内部进行评估。 Dt,当然可以。您观察到的与Dt如何用一个参数解释该参数有关。