システムを解くためにどの言語を提案しますか:
- 一階微分方程式
- 複雑な変数
- N次元
4次ルンゲクッタなどを使用。
速度は非常に重要ですが、次の点で犠牲になります。
- エレガントな (クリーンで短い) コード
- 柔軟性 + スケーラビリティ
私は主に Lisp と OCaml の間ですが、他の提案は大歓迎です。
ありがとう!
システムを解くためにどの言語を提案しますか:
4次ルンゲクッタなどを使用。
速度は非常に重要ですが、次の点で犠牲になります。
私は主に Lisp と OCaml の間ですが、他の提案は大歓迎です。
ありがとう!
CommonLispでのRKの実装は次のとおりです。
http://github.com/bld/bld-ode/blob/master/rk.lisp
Common Lispの良いところは、シンプルで洗練されたコードから始めて、重要なビットを高速に実行できることです(たとえば、ほとんど機能的な計算からステートフルな計算に切り替えるか、型を宣言することによって)。
SBCLには優れたネイティブコードコンパイラがあります。
RK4は非常に基本的な方法であり、すでに作成されている優れた実装がたくさんあります。それらの1つを使用して、プロジェクトの他の側面に労力を費やしてください。
他のものとは別に、既存のCルンゲクッタソルバーにocamlバインディングを書き込むことができます。
私は Runge Kutta には詳しくありませんが、OCaml は一般的に、少なくとも少し注意すれば、優れた速度と可読性を提供できます。これにより、アプリケーションの残りの部分で堅牢な静的型システムの利点が得られます。
python + numpy + scipy を使用することをお勧めします。一般的な数学と数値のサポート (優れた多次元配列) は優れています。とにかく、それは特定のニーズに依存します。
どの言語が最も簡単かを言うのは難しいです。これを達成するためのlisp、C++、C#などのライブラリがあります。Matlab は、これらのタイプのタスクに特化した最も調整されたエレガントなソリューションであり、ODE のサポートが組み込まれていると推測します... Lisp は遅い側にある可能性があります...そして OCaml について話すことはできません。 .
Fortran または C では、 NAG ルーチンを調べる必要があるかもしれません。C の方が柔軟で理解しやすいですが、通常は Fortran が数値計算に最適と見なされています。