2015-10-03 28 views
3

我想解決耦合微分方程系統使用boost :: numeric :: odeint :: runge_kutta4。這是一個三維網格系統,因此對於我來說(和方便)使用3D數組是很自然的。有沒有辦法讓runge_kutta4使用用戶定義的數據結構或增強multi_array?更高維數組與runge_kutta4

回答

2

原則上這是可能的。 odeint提供了使用自定義數據結構 - 代數和操作的機制。看看here。要麼使用現有的代數之一,並嘗試調整數據結構以使用這個代數。或者你實現自己的代數並用它實例化Runge Kutta步進器。

您可能還想看看Eigen,Mtl4,boost.ublas或Armadillo等圖書館。他們可能有更高階張量的數據類型。例如Eigen可以很好地與odeint配合使用。

+2

犰狳有[Cube](http://arma.sourceforge.net/docs.html#Cube)類,它本質上是一個三階張量(又名「3D矩陣」) – hbrerkere

+0

我試過使用boost :: multi_array即使有2個維度,但似乎並不奏效。 – Bociek

+0

@headmyshoulder你能提供一個簡單的例子,使用Eigen :: Matrix ,Eigen :: Dynamic,Eigen :: Dynamic>?我正在嘗試運行測試,但我收到了很多錯誤。我認爲這是主要的錯誤:**錯誤:沒有匹配函數調用'開始(const Eigen :: Matrix ,-1,-1>&)'** – Bociek