看板 Mathematica 關於我們 聯絡資訊
※ 引述《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
harry901:XD 你剛好講到我最討厭學也覺得有點難度的部份... 11/03 03:18
harry901:會用到這個應該是程式複雜時 過程需要引用計算結果 11/03 03:20
harry901:恰好計算式不需要重複被使用時 像我現在程式那麼多 11/03 03:21
harry901:有一些是不需要重複使用的 導致命名的變數超多 11/03 03:21
harry901:剛剛才發現我用錯 應使用Solve.... 11/03 03:26
chrisliu0419:推 寫的很清楚! 11/03 03:58
LPH66:這個部份的確不好學 可是會用了之後很好用 XD 11/03 04:19
LPH66:我在寫東西時常常一個式子到底 裡面一堆這種東西... 11/03 04:19
LPH66:一個式子的好處是修參數修完只要跑一個就好 不用跑好幾個 11/03 04:20
oversky0:我也覺得這部份很複雜,以前看到這樣的 code 就跳過去。 11/04 11:26
leo80042:推~~ 11/24 03:38