Re: [問題] 請問有關迴圈與陣列
※ 引述《harry901 (forcing to A cup)》之銘言:
: ※ 引述《sphwny (時間過的真快>"<)》之銘言:
: : 小弟這兩天才裝好mathematica
: : 這個問題已經困擾我一天了
: : 請大家幫幫忙
: : 請問要如何把陣列A(長度為10)中個每個元素
: : 一一放進 2x + 0.5x^2 = A 這個方程式中去解
: : 然後再把方程式的解存到另一個陣列中阿?
: : 我想要用For迴圈但是寫不出來...
: : 麻煩各位高手了!!
: 這應該還用不到迴圈
: A = Table[i, {i, 10}]
: B = Table[sol=FindRoot[2*x +0.5*x^2 == A[[i]], {x, 0}]; x /. sol, {i, 10}]
: ====================
: 應該還有更簡潔的寫法 不過我已經習慣使用ver5版本了
: B就是你要得答案
藉此機會推廣一下 /@ (Map) 指令和純函式
首先是 Map
f /@ {a,b,c} (或 Map[f,{a,b,c}] ) 會得到 {f[a],f[b],f[c]}
很多時候要取用一個陣列裡的內容去一一代值時這很好用
類似的東西有
@@ (Apply): f @@ {a,b,c} 或 Apply[f,{a,b,c}] 會得到 f[a,b,c]
Scan: Scan[f,{a,b,c}] 會依序做 f[a], f[b], f[c] 但不回傳結果
等等
純函式則是沒有名字的函式
直接以例子來說明吧 這是這題的做法:
(x /. Solve[2x+0.5x^2 == #, x])& /@ A
前半段到 & 為止是個純函式
它的參數會就是 # 所在的地方
也就是它等同於下面這個函式:
getSolution[v_] := x /. Solve[2x+0.5x^2 == v, x]
注意寫純函式時要記得標 & 標記函式到此結束
於是將這個函式 Map 到 A 上就成了把 A 的元素一一代入上面這個函式
要的結果就出來了
純函式也可以有多於一個參數 它們會被叫做 #1 #2 #3 等等
單寫 # 就是 #1
或者也可以用 Function[] 這時就不用 & 了
Function[函式本體] 即為 函式本體&
用 Function 還可以命參數名 這樣在多層純函式時就不會搞亂了
寫法是 Function[變數,本體]
Function[{變數一,變數二,...},本體]
也就是上面那個純函式也可以改寫成以下:
Function[x /. Solve[2x+0.5x^2 == #, x]]
Function[v, x /. Solve[2x+0.5x^2 == v, x]]
Function[{v}, x /. Solve[2x+0.5x^2 == v, x]]
都是一樣的
這裡提的東西在 tutorial/FunctionalOperationsOverview 裡都各有細項說明
想仔細研究的可以去看看
--
◢ ˊ_▂▃▄▂_ˋ. ◣ ▅▅ ▅▅ ι●╮ █▄▄▄▄▄
▍./◤_▂▃▄▂_◥ \'▊ HARUHI █████ <■┘ ▄▄▄▄▄▄▄
▎⊿ ◤◤◥█◥◥█Δ ISM By-gamejye ¢|\ ▌▌▌▌▌▄▌▌
▏ζ(▏●‵◥′●▊)Ψ ▏ █ ⊿Δ ▄▄▄ ▄▄▄▄
█/|▊ 〃 、 〃▋ |\ ▎ ハルヒ主義 █▄▄▄█▄▄
◥◥|◣ ‵′ ◢/'◢◢S.O.S 世界を大いに盛り上げるための涼宮ハルヒの団
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.137
推
11/03 03:18, , 1F
11/03 03:18, 1F
推
11/03 03:20, , 2F
11/03 03:20, 2F
→
11/03 03:21, , 3F
11/03 03:21, 3F
→
11/03 03:21, , 4F
11/03 03:21, 4F
推
11/03 03:26, , 5F
11/03 03:26, 5F
推
11/03 03:58, , 6F
11/03 03:58, 6F
→
11/03 04:19, , 7F
11/03 04:19, 7F
→
11/03 04:19, , 8F
11/03 04:19, 8F
→
11/03 04:20, , 9F
11/03 04:20, 9F
推
11/04 11:26, , 10F
11/04 11:26, 10F
推
11/24 03:38, , 11F
11/24 03:38, 11F
討論串 (同標題文章)
完整討論串 (本文為第 3 之 3 篇):
6
11
Mathematica 近期熱門文章
PTT數位生活區 即時熱門文章