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

作者: Frobenius (▽.(▽×▽φ)=0)   2013-02-04 03:52:16
※ 引述《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)

Links booklink

Contact Us: admin [ a t ] ucptt.com