Re: [問題] Decipher Codes

看板Mathematica作者 (養花種魚數月亮賞星星)時間12年前 (2012/02/20 09:40), 編輯推噓3(300)
留言3則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《asid52714 (黑心人)》之銘言: : 各位版友好,今天遇到兩個看不太懂的code, : 想和各位版友有請教。 : g[n_] := Times @@ Apply[Plus, Inner[List, x^Range[n], 1/x^Range[n], List], 1] Inner[f, Range[5], Range[5], g] g[f[1, 1], f[2, 2], f[3, 3], f[4, 4], f[5, 5]] 也就是把Range[5],Range[5]這兩個的內積先作用到f,之後整個作用到g Inner[f, Range[5], Range[5]] f[1, 1] + f[2, 2] + f[3, 3] + f[4, 4] + f[5, 5] 如果後面沒有g這個函數,那預設是加法 什麼是List,不仿試試這個指令,在Mathematica中每個運算是都有個Head Head[{1,2,3,4,5}] Inner[f, x^Range[5], 1/x^Range[5]] 指的就是將{{x, x^2, x^3, x^4, x^5}, {1/x, 1/x^2, 1/x^3, 1/x^4, 1/x^5}}的內積 作用到f,這時候會得到 f[x, 1/x] + f[x^2, 1/x^2] + f[x^3, 1/x^3] + f[x^4, 1/x^4] + f[x^5, 1/x^5] 接下來稍微介紹Apply,所謂的Apply就是將原本運算式的頭拔掉,換上新的指定函數 Apply[List, f[x, 1/x]] 在這邊f[x, 1/x]的Head是f,把f用List替換,那Apply[List, f[x, 1/x]]={x, 1/x} 同理 Inner[List, x^Range[5], 1/x^Range[5], g]的Head是g,若把g拿掉用List替代就成了 {{x, 1/x}, {x^2, 1/x^2}, {x^3, 1/x^3}, {x^4, 1/x^4}, {x^5, 1/x^5}} Inner[List, x^Range[5], 1/x^Range[5], List]//Head List Inner[List, x^Range[5], 1/x^Range[5], List] // Dimensions {5,2} 也就是說上面的運算式的維度是{5,2}, 因此若要把加法套用上,就變成五個陣列相加,維度當然也是2x1 Apply[Plus, Inner[List, x^Range[5], 1/x^Range[5], List]] {x + x^2 + x^3 + x^4 + x^5, 1/x^5 + 1/x^4 + 1/x^3 + 1/x^2 + 1/x} 因此若要把加法套用到第一層的陣列上 Apply[Plus, Inner[List, x^Range[5], 1/x^Range[5], List],1] {1/x + x, 1/x^2 + x^2, 1/x^3 + x^3, 1/x^4 + x^4, 1/x^5 + x^5} @@是Apply的簡寫,@@@是Apply到第一層,@@@@就沒這種東西了 所以函數g也可以寫成這樣 Apply[Times, Apply[Plus, Inner[List, x^Range[5], 1/x^Range[5], List], 1]] 將乘法作用到{1/x + x, 1/x^2 + x^2, 1/x^3 + x^3, 1/x^4 + x^4, 1/x^5 + x^5} 這個陣列上 這個函數也可以改寫成比較簡單一點 g1[n_Integer] := Apply[Times, x^Range[n] + 1/x^Range[n]] g2[n_Integer] := Product[x^i + 1/x^i, {i, n}] : f[n_] := Times @@ Apply[Plus, Thread[List[x^Range[n]], 1/x^Range[n]], 1] : 我有試著去查各個語法如Inner,和thread的用法,無奈我太笨了想了兩個小時 : 還是看不懂。所以只好浮上水面來求救,先感謝各位的閱讀,謝謝。 -- 養花種魚數月亮賞星星 http://chungyuandye.twbbs.org -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.173.130.88

02/20 09:59, , 1F
02/20 09:59, 1F

02/21 07:54, , 2F
戴老師太厲害了我都看的傻呼呼的....
02/21 07:54, 2F

02/22 14:56, , 3F
不同人湊想要的函數方法都不一樣
02/22 14:56, 3F
文章代碼(AID): #1FGQI1EZ (Mathematica)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1FGQI1EZ (Mathematica)