关于数学小组有一个问题,当我看着它的时候,我注意到了这个,我无法理解为什么,我认为这里的专家会知道。
做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]
由于
答案 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
如何用一个参数解释该参数有关。