Re: [心得] 小練功 - list與多項式與MapThread

看板Mathematica作者 (養花種魚數月亮賞星星)時間13年前 (2012/01/30 09:06), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《jurian0101 (Hysterisis)》之銘言: : 本小練習最早的目標是要獲得 f(n) = Σijk (0<i<j<k≦n) 的公式 : (但因為太簡單了故有後話 : btw, f(n)= n^2 (n-1)^2 (n-2) (n-3) /48) 答案應該算錯了,這邊可以用Sum來計算就好 有等號,0<i<j<k≦n Sum[i*j*k, {k, 1, n}, {j, 1, k}, {i, 1, j}] 無等號,0<i<j<k<n Sum[i*j*k, {k, 1, n - 1}, {j, 1, k - 1}, {i, 1, j - 1}] Sum,Table這系列的函數迴圈得部分都可以設定變數 : 後來變成要寫一個函式 f[一串指數, 一串變數] 輸出的結果 : 是所有變數的排列的指定的指數次方的多項式 ← 啥? (= =), : 例如 f[{1,1},{x,y,z,w}] = xy + xz + xw + yz + yw + zw : f[{2,1},{x,y,z}] = x^2 y + x y^2 + x^2 z + x z^2 + y^2z + y z^2 等等 : 請教諸位板友,是否有較直觀的作法? 使用簡單的排列組合應該就可以,變數用C,次方用P (*將次方分配到各個變數上*) g[v_List, p_List] := Times @@ MapThread[#1^#2 &, {v, p}] (*產生變數與次方得所有組合,套用到函數g上後做加總*) ff[p_List, v_List] :=Plus@@g@@@Flatten[Table[{i, j}, {i, Subsets[v, {Length@p}]}, {j, Permutations[p, {Length@p}]}],1] ff[{2, 1}, {x, y, z}] x^2 y + x y^2 + x^2 z + y^2 z + x z^2 + y z^2 -- 我打研究室走過 那獨坐電腦前的容顏如苦瓜的糾結 靈感不來 長壽的煙霧不散 研究室如小小的寂寞的城 恰如商管的電梯向晚 http://chungyuandye.twbbs.org -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.232.182.186

01/30 13:44, , 1F
謝謝,我大有收穫。Apply和Map原來異曲同工^^ Table那
01/30 13:44, 1F

01/30 13:46, , 2F
招太酷了,{i,s_List} s_List可放輸出是List的函數!
01/30 13:46, 2F
文章代碼(AID): #1F9UqnRL (Mathematica)
文章代碼(AID): #1F9UqnRL (Mathematica)