Mathematica的Part原理是什麼?
首先說Mathematica很強大。再次說明我是新手。我現在有個關於Part問題,需要朋友們幫忙一下。Part用起來有時感覺莫名其妙,有時又高妙絕倫。
Solve[x^2 + 5 x + 1 == 0, x]
{{x -&> 1/2 (-5 - Sqrt[21])}, {x -&> 1/2 (-5 + Sqrt[21])}}
%[[1, 1, 2]]
1/2 (-5 - Sqrt[21])
為什麼取出解的數值是%[[1,1,2]]?為什麼不是%[[1,2,1]]或%[[1,1,3]]?
Mathematica中有一句老話:everything is an expression.
什麼意思呢?就是字面意思啦~從列表裡面取內容OP應該會,不就是{a,b,c,d}[[1]]么~那麼下一步就到了題主的問題,到底這是怎麼取得呢?其實,mma在kernel裡面會先把這個表達式翻譯成為Part[List[a,b,c,d],1],然後我們拋開Part不管,看看裡面的東西:諾~這不就是個表達式么~他有著頭部List和內部四個元素。wolfram一想,那麼我們就把這個頭部叫0號,內容標號1~4吧~那麼當然,別的表達式也可以這麼存取,例如你提到的-&>其實就是Rule的Infix形式,於是呢a-&>b在kernel裡面就被解釋成了Rule[a,b]這個玩意,換湯不換藥,就是List改成了Rule么你說對不對~當然更複雜的東西,原理都是一樣一樣的。於是你就可以通過這個標號在這個表達式樹中存取內容了~(你看任何一個表達式,都是一個頭部,元素裡面再好幾個表達式這麼嵌套這的一個樹形結構,我姑且管它叫表達式樹吧,樹的節點是頭部,樹的內容就是樹枝,為了更好的理解,建議你隨便搞個表達式,HoldComplete起來,然後TreeForm一下)怎麼存取呢?那自然要從樹根一個節點一個節點往上走,從樹榦到一個個分支最後到你想要的內容,每步怎麼走,就還是使用上面的方法。
那麼好,看你的例子,首先我們站在樹根上,然後往前看,嗯,有倆表達式,都是List,這時候我們走第一個節點,於是寫1。然後我們站在一個子List上重複上面的操作,只有一個元素,元素是一個Rule,很好,再寫1,在下一步我們就站在一個Rule上了,我們要取得是Rule[a,b]中的b,那簡單,寫2!
組合起來就成了[[1,1,2]]為啥我又跑知乎上來水了?!不是說好要好好學習的么?普通的張量索引。
這種事得看{},第一1,你看外面的大括弧裡面有兩個元素,選第一個
第二個1,是取出你剛取出元素里的第一個元素
第三個2,是指你第二步取出元素的第二個元素
這個形式,可以理解為集合套集合,按照這個思路
Table[Range[i*j], {i, 1, 10}, {j, 11, 20}]
你取一下第三行第四列里第5個元素
推薦閱讀:
※Mathematica 直接計算二重極限(double limit)的格式是什麼?
※理論物理學生如何用mathematica記錄筆記並進行管理?
※下面這個mathematica語句怎麼理解?
※如何看待工科生因為現在數學軟體太強了,進而對數學不重視的觀念?
※Mathematica還有哪些美麗的地方?
TAG:數學軟體 | WolframMathematica |