2011-08-09 31 views
14

Tôi đang cố gắng tìm hiểu sâu hơn về cách biểu thức Mathematica được biểu diễn bên trong, và bị bối rối bởi logic của lệnh Level trong Mathematica. Nếu chúng ta có đầu vào sau:Làm thế nào để bạn giải thích các mức tiêu cực trong Mathematica?

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] 

Chúng tôi nhận được cây sau:

tree form of expression a, above

Nếu chúng tôi yêu cầu Mathematica trở Cấp 4 chỉ, chúng tôi nhận được:

In[4]:= Level[a,{4}] 
Out[4]= {x1,y1,x,y} 

tôi hiểu rằng chúng tôi có 4 cấp độ từ "gốc" (toán tử Plus ở Cấp 0). Trong thực tế, tôi nghĩ rằng tôi hiểu rằng các chỉ số dương luôn liên quan đến vị trí gốc của cây. (Tôi hy vọng tôi chính xác về điều đó?)

Ngược lại, khi bạn yêu cầu mức âm, không có điểm tham chiếu chung (giống như thân trên), vì các nhánh khác nhau của cây có độ dài khác nhau . Vì vậy, nếu bạn hỏi Mathematica để cung cấp chỉ Cấp -1, ta có:

In[6]:= Level[a,{-1}] 
Out[6]= {z1,x1,y1,z,x,y} 

Tôi đã rất ngạc nhiên bởi kết quả này, khi tôi đã đoán rằng tôi sẽ nhận lại {x1, y1, x, y} (không z1 & z). Nhưng ok, nếu tôi cố gắng hiểu điều này, tôi lấy -1 để có nghĩa là "cuối mỗi nhánh". Nếu đúng như vậy, sau đó tôi mong chờ Level[a,{-2}] trở lại:

{z1*Cos[x1+y1],z*Sin[x+y],x1+y1,x+y} 

Nhưng, đây không phải là những gì tôi nhận được trở lại, sản lượng Mathematica:

In[8]:= Level[a,{-2}] 
Out[8]= {x1+y1,x+y} 

Vì vậy, bây giờ tôi đang bối rối, và don' t thấy một cách nhất quán của sự hiểu biết đầu ra của các cấp độ tiêu cực.

Có cách nào phù hợp, dễ hiểu hơn về chủ đề này không? Có cách nào "đúng" nhất định tôi nên đọc cấu trúc của cây không?

Xin lỗi vì "câu hỏi dài", nhưng tôi hy vọng bạn hiểu những gì tôi đang yêu cầu.

Trả lời

14

Nếu bạn nhìn vào docs, họ nói:

Mức -n tiêu cực bao gồm tất cả các bộ phận của expr với độ sâu n.

Vì vậy, mức âm không được tính từ điểm tham chiếu, nhưng được xác định dựa trên độ sâu của biểu thức con. z1*Cos[x1+y1] có độ sâu 4, vì vậy nó không được trả lại khi bạn yêu cầu Level[..., {-2}].

+7

Ngắn gọn và rõ ràng - +1. Tôi muốn thêm vào điều này, các thông số kỹ thuật cấp mà không có các dấu ngoặc nhọn (như trong 'Level [expr, -d]' mô tả tất cả các biểu thức con của chiều sâu * ít nhất * 'd', tương đương với' Level [expr, {1 , -d}] '. Điều này cho phép chúng ta kết hợp các cấp độ tích cực và tiêu cực theo những cách không tầm thường. Ví dụ: 'Level [a, {2, -2}]' sẽ chỉ trả về các biểu thức con ở các mức dưới đây và bao gồm cấp độ '2', * và * có chiều sâu * ít nhất *' 2'. –

Các vấn đề liên quan