Re: [問題] 請問有關迴圈與陣列

看板Mathematica作者 (-858993460)時間12年前 (2011/11/03 03:04), 編輯推噓6(605)
留言11則, 5人參與, 最新討論串3/3 (看更多)
※ 引述《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
XD 你剛好講到我最討厭學也覺得有點難度的部份...
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
剛剛才發現我用錯 應使用Solve....
11/03 03:26, 5F

11/03 03:58, , 6F
推 寫的很清楚!
11/03 03:58, 6F

11/03 04:19, , 7F
這個部份的確不好學 可是會用了之後很好用 XD
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
我也覺得這部份很複雜,以前看到這樣的 code 就跳過去。
11/04 11:26, 10F

11/24 03:38, , 11F
推~~
11/24 03:38, 11F
文章代碼(AID): #1EiPGgzs (Mathematica)
文章代碼(AID): #1EiPGgzs (Mathematica)