Re: [問題] Decipher Codes
看板Mathematica作者chungyuandye (養花種魚數月亮賞星星)時間12年前 (2012/02/20 09:40)推噓3(3推 0噓 0→)留言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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Mathematica 近期熱門文章
PTT數位生活區 即時熱門文章