Wolfram mathematica 你如何解释Mathematica中的负水平?

Wolfram mathematica 你如何解释Mathematica中的负水平?,wolfram-mathematica,Wolfram Mathematica,我试图更深入地理解Mathematica表达式是如何在内部表示的,我对Mathematica中Level命令的逻辑感到困惑。如果我们有以下输入: In[1]:= a = z*Sin[x + y] + z1*Cos[x1 + y1] Out[1]= z1 Cos[x1 + y1] + z Sin[x + y] In[2]:= FullForm[a] Out[2]= Plus[Times[z1,Cos[Plus[x1,y1]]],Times[z,Sin[Plus[x,y]]]] In[3]:

我试图更深入地理解Mathematica表达式是如何在内部表示的,我对Mathematica中
Level
命令的逻辑感到困惑。如果我们有以下输入:

In[1]:= a = z*Sin[x + y] + z1*Cos[x1 + y1]

Out[1]= z1 Cos[x1 + y1] + z Sin[x + y]

In[2]:= FullForm[a]

Out[2]= Plus[Times[z1,Cos[Plus[x1,y1]]],Times[z,Sin[Plus[x,y]]]]

In[3]:= TreeForm[a]
我们得到以下树:

如果我们要求Mathematica只返回4级,我们得到:

In[4]:= Level[a,{4}]
Out[4]= {x1,y1,x,y}
据我所知,我们从“stem”(0级的加号运算符)向下4级。事实上,我想我知道正指数总是与树的茎位置有关。(我希望我是对的??)

相反,当你要求一个负的水平,没有共同的参考点(如上面的茎),因为不同的分支树是不同的长度。因此,如果您要求Mathematica仅提供级别1,我们得到:

In[6]:= Level[a,{-1}]
Out[6]= {z1,x1,y1,z,x,y}
当我猜测我应该返回
{x1,y1,x,y}
(没有
z1
&
z
)时,我对这个输出感到惊讶。但是好的,如果我试着理解这个,我把-1理解为“每个分支的末端”。如果是这样,那么我希望
Level[a,{-2}]
返回:

{z1*Cos[x1+y1],z*Sin[x+y],x1+y1,x+y}
但是,这不是我得到的,Mathematica得出结论:

In[8]:= Level[a,{-2}]
Out[8]= {x1+y1,x+y}
所以,现在我很困惑,没有一个一致的方法来理解负水平的输出

是否有一种一致的、更容易理解此主题的方法?有没有一种“正确”的方式来解读树的结构

很抱歉提出了“冗长的问题”,但我希望你能理解我的问题。

如果你看一下,他们会说:

负电平-n由深度为n的expr的所有部分组成


因此,负级别不是从参考点开始计算的,而是根据子表达式的深度定义的
z1*Cos[x1+y1]
的深度为4,因此当您要求
级别[…,{-2}]
简洁明了-+1时,它不会返回。我还要补充一点,没有大括号的级别规范(如
level[expr,-d]
描述了深度的所有子表达式,至少
d
,相当于
level[expr,{1,-d}]
。这允许我们以非平凡的方式组合正级别和负级别。例如:
level[a,{2,-2}]
将仅返回以下级别的子表达式,包括级别
2
,且深度至少为
2