Re: [問題] Do指令中產生的Table如何listplot[已解決]

看板Mathematica作者 (養花種魚數月亮賞星星)時間13年前 (2012/01/25 21:58), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《prays (:)))》之銘言: : : 這個問題好像很簡單,找了好久都找不到比較好的方法。 : : 希望有高手幫忙。 : : 我用Do指令批次產生Table : : {{a,b},{c,d},...} : : 然後希望用ListPlot把所有產生的Table都畫出來 : : 找不到可以直接抽出Table作圖的方法, : : 向高手求救,感謝 : 我用了個笨方法,方法如下 : result={}; : Do[.........; : Q=Table (*我要產生的*) : ,{i,1,100}] : ListPlot[Flatten[result,1]] : 終於畫出來拉:) Flatten這個函數再Mathematica中算是相當常用的函數, 它的功能是將一個List中各項元素合併。 假設u = {{a, b}, {c, d}}; mat = {{u, 0 u}, {0 u, u}}; 檢查mat的維度 Dimensions@mat 所以可以知道mat是一個2x2x2x2的矩陣 mat//matrixform 很明顯可以看出mat為4個子矩陣所組成 去除mat第一層括號 Flatten[mat, 1] {{{a, b}, {c, d}}, {{0, 0}, {0, 0}}, {{0, 0}, {0, 0}}, {{a, b}, {c, d}}} Flatten[mat, 1]//Dimensions {4, 2, 2} 去除mat第一層括號後變成{4, 2, 2}的矩陣 由於mat有四層括號,所以Flatten[mat, 3]所得到的矩陣會是一個1x16的向量。 比較進階的用法是 Flatten[mat,{{s11,s12},{s21,s22}}] 意思是將mat的s11,s12層合併為第一層,s21,s22層合併為第二層 為了方便說明,先幫mat的各項元素加上足標 mat1 = MapIndexed[f, {{u, 0 u}, {0 u, u}}, {4}] //. f[x_, y_List] :> Subscript[x, Row@y] mat1 // MatrixForm Flatten[mat1, {{1, 3}, {2, 4}}] // Dimensions {4,4} 所已經合併後會變成4x4的矩陣 Flatten[mat1, {{1, 3}, {2, 4}}] // MatrixForm 你會發現在每一列中,第一個足標和第三個足標都是相同的。 而在每一行中,第二個足標和第四個足標都是相同的。 因為mat的1,3層合併為第一層,剩下的2,4合併為第二層 Flatten[mat1, {{1, 4}, {2, 3}}] // MatrixForm 同樣的,上面的函數傳回的結果每一列第一個足標和第四個足標都是相同的。 而在每一行中,第二個足標和第三個足標都是相同的。 因為mat的1,4層合併為第一層,剩下的2,3合併為第二層。 -- 我打研究室走過 那獨坐電腦前的容顏如苦瓜的糾結 靈感不來 長壽的煙霧不散 研究室如小小的寂寞的城 恰如商管的電梯向晚 http://chungyuandye.twbbs.org -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.173.129.60 ※ 編輯: chungyuandye 來自: 218.173.129.60 (01/25 21:58)

01/26 03:59, , 1F
太精闢了,感謝:)
01/26 03:59, 1F
文章代碼(AID): #1F80f-O6 (Mathematica)
文章代碼(AID): #1F80f-O6 (Mathematica)