Re: [問題] 如何加速FindRoot運算速度?

看板Mathematica作者 (▽.(▽×▽φ)=0)時間11年前 (2013/02/04 03:52), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
※ 引述《chungyuandye (養花種魚數月亮賞星星)》之銘言: : ※ 引述《suinegoast (想不到暱稱)》之銘言: : : 小弟在研究遇到了一些技術性的瓶頸 : : 指令FindRoot求解1200條方程式耗時25秒 : : 使用Do迴圈執行60000次上述事情 : : 估計費時17天8小時40分鐘 : : 請問版上高手是否知道更省時的辦法呢?感激不盡! : Exp[x - a] == y, y^2 == x+b : data = Flatten[Table[{a, b}, {a, 1, 2, 0.1}, {b, 0, 1, 0.1}], 1]; : (* 平行運算 *) : ParallelMap[ : FindRoot[{Exp[x - #[[1]]] == y, : y^2 == x + #[[2]]}, {{x, 1}, {y, 1}}] &, data] : 如果有Lightweight Grid,記得安裝打開,整個實驗室的電腦一起算。 圖示法 (可視情況增加需要) data = Flatten[Table[{a, b}, {a, 1, 2, 1/10}, {b, 0, 1, 1/10}], 1]; (*Parallel computing*) ParallelMap[ FindRoot[{Exp[x - #[[1]]] == y, y^2 == x + #[[2]]}, {{x, 1}, {y, 1}}] &, data] Flatten@Table[{Exp[x - a], Sqrt[x + b], -Sqrt[x + b]}, {a, 1, 2, 0.1}, {b, 0, 1, 0.1}]; Plot[%, {x, Min[({x, y} /. %2)[[All, 1]]], Max[({x, y} /. %2)[[All, 1]]]}, PlotStyle -> {Red, Blue, Blue}]; ListPlot[{x, y} /. %2, PlotStyle -> {Green}]; {{x, Min[({x, y} /. %2)[[All, 1]]], Max[({x, y} /. %2)[[All, 1]]]}, {y, Min[({x, y} /. %2)[[All, 2]]], Max[({x, y} /. %2)[[All, 2]]]}} Show[%%%, %%] 結果: http://enjoy.phy.ntnu.edu.tw/file.php?file=/userdir/5443/Parallelcomputing.pdf (http://tinyurl.com/b9ynwq5) -- Maxwell's Electromagnetic Equations ▽‧D=ρ ∮D‧ds=Q ▽╳E=-dB/dt ∮E‧dl=-d(∫B‧ds)/dt ▽‧B=0 ∮B‧ds=0 ▽╳H=J+dD/dt ∮H‧dl=I+d(∫D‧ds)/dt -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.68.94
文章代碼(AID): #1H3h_tDL (Mathematica)
文章代碼(AID): #1H3h_tDL (Mathematica)