我正在使用Haskell進行粒子模擬程序。對於其中一個函數,我試圖根據所有周圍粒子的質量和速度來確定模擬中所有粒子的新速度。Haskell粒子模擬 - 計算粒子速度
功能是這個形式:
accelerate :: Float -> [Particle] -> [Particle]
粒子是包含質量,位置矢量和的速度矢量數據類型,「浮動」參數表示在各個時間步的增量時間模擬
我想對可能的函數提供一些建議,我可以用它來遍歷列表,同時計算每個粒子相對於列表中其他粒子的速度。
一種可能的方法,我能想到的:
假設有另一個功能「velocityCalculator」的定義如下:
velocityCalculator :: Particle -> Particle -> (Float,Float)
這需要兩個粒子並返回更新第一個粒子的速度矢量。
apply foldl;使用上述函數作爲二進制運算符,顆粒和顆粒作爲參數的列表,即
foldl velocityCalculator particle particleList
迭代通過粒子的列表中,將與foldl到每個元件和構建包含與顆粒的新列表更新的速度
我不確定這是否是最有效的方法,所以任何建議和改進都非常感謝。
請注意 - >正如我所說我只是在尋找建議而不是答案!
謝謝!
你想應用速度verlet算法或類似的東西嗎?我的意思是,你是否願意用一些分析或數字勢能來整合牛頓的運動方程? – felipez
沒有什麼特別的,我只是在haskell中尋找可能的更高階的函數,它可以在列表中應用velocityCalculator函數更快地完成工作 – dfj328