[問題] 如何增加計算Runge-Kutta效率

看板Mathematica作者 (別再睡了起床了愛麗)時間5年前 (2018/10/15 03:06), 5年前編輯推噓2(205)
留言7則, 4人參與, 5年前最新討論串1/1
各位板友好,我的問題大概是這樣 我想利用4th order Runge-Kutta方法追蹤帶電粒子在靜電磁場中的軌跡,這個靜電磁場 無法用解析方法表示,所以我用Interpolation分別建立電場和磁場的內插函數,再來按照 4th order Runge-Kutta處理兩個couple的微分方程的方式寫一個函數rk4,然後用 NestWhile執行rk4 4th order Runge-Kutta https://i.imgur.com/qSgdghB.png
其中efr、efz、Br和Bz都是電磁場的內插函數 https://i.imgur.com/raE1PUy.png
不過計算的粒子數量一多就需要耗費不少時間,我覺得應該是我的程式寫得不太好,想請 問各路高手該如何提升計算效率,compile rk4對計算時間沒有顯著影響,我目前覺得問 題應該是出在內插函數算太慢,這有辦法處理嗎? Interpolation後的函數應該不用再 compile吧? 還是說rk4本身就不應該那樣寫? 感恩感恩 compile rk4 (沒影響) https://i.imgur.com/szV0baY.png
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.114.235.65 ※ 文章網址: https://www.ptt.cc/bbs/Mathematica/M.1539544019.A.9A7.html 對了,好久沒用平行計算,順便問一下我把中間的Map改成ParallelMap這樣有什麼問題, 似乎根本沒有平行化,而且速度超級慢,第一次執行的時候還出現很奇怪的錯誤訊息, 不過算出來是正確的 (那些內插函數範圍不夠的錯誤訊息請不用理會,本來內插函數的範圍就比While的範圍要 大,一個step內會跨到範圍外的下一步就會被While結束掉) https://i.imgur.com/xmmElWw.png
謝謝大家 ※ 編輯: Absolitude (140.114.235.65), 10/15/2018 03:35:18

10/15 04:06, 5年前 , 1F
不用內建的NDSolve嗎?
10/15 04:06, 1F

10/15 12:06, 5年前 , 2F
NDSolve最快 插值太貴改InterpolationOrder到2看看
10/15 12:06, 2F
原來如此,我來改一下程式,謝謝大家的意見~ ※ 編輯: Absolitude (140.114.235.65), 10/16/2018 11:03:32

11/06 22:03, 5年前 , 3F
既然不用NDsolve 這樣自己寫Runge Kutta 幹嘛還用Mathemati
11/06 22:03, 3F

11/06 22:04, 5年前 , 4F
ca 不用其他更基本的語言
11/06 22:04, 4F

11/06 22:05, 5年前 , 5F
不過以微分方程來說 NDsovle常常算法比自己寫的好很多 速
11/06 22:05, 5F

11/06 22:06, 5年前 , 6F
度快不少就是了
11/06 22:06, 6F

11/12 11:18, 5年前 , 7F
補一篇上面不遠我回另一個也是寫 RK 法的 #1Q3PAMUA
11/12 11:18, 7F
哎呀 之前沒看到後來的回應 (汗 謝謝大家的經驗分享 ※ 編輯: Absolitude (140.114.235.65), 01/01/2019 20:06:47
文章代碼(AID): #1RmvFJcd (Mathematica)
文章代碼(AID): #1RmvFJcd (Mathematica)