3

おそらくGSLライブラリを使用してCで書かれたODEソルバーは、Mathematica 8.0 NDSolveと比較して大幅な速度の利点がありますか?精度の点でどのように公平でしょうか?

私の理解では、コンパイルされたコードは原則としてより高速である可能性がありますが、最近のNDSolveは、すでに何らかの形でコンパイルされたコード自体を大量に使用していますか?

また、MathLinkやMathematicaのコンパイル関数などを使用して、ODEの解決を高速化するためのオプションはありますか?

4

2 に答える 2

6

MathematicaのNDSolveおよびその他の数値関数は、オペランド(ODEのRHSなど)を中間の「バイトコード」言語(コンパイル関数で使用されるものと同じ)に自動的にコンパイルします。必要に応じて、 CompilationTarget- > "C"を指定すると、関数はCコードにコンパイルされ、Mathematicaにリンクされます... Mathematica Stack Exchangeのこの前の質問で、生成されたCコードを自分で見ることができます。 :

https://mathematica.stackexchange.com/questions/821/how-well-does-mathematica-code-exported-to-c-compare-to-code-directly-written-fo/830#830

もちろん、原則として、より高速なアルゴリズムを手書きすることは常に可能です...しかし、Mathematicaが自動的に行うことを最適化することはたくさんあります。たとえば、最適化問題で偏導関数のスパース行列の計算を手動で最適化する責任を負いたくない場合があります。

于 2012-10-18T23:43:09.013 に答える
3

Mathematicaの焦点は使いやすさにあります。それらは数値ライブラリを使用します。したがって、速度は利用可能な最良のライブラリと同じか、それよりも悪くなります(ほとんどすべての場合)。たとえば、彼らは行列のものに固有値を使用していると聞きました。

あなたが考慮しなければならないもう一つのことは、彼らが提供する機能を最適化するが、あなた自身の機能は最適化されないということです。したがって、各ステップで計算する導関数は、cでより速くなります。

mathematicaとc++のどちらかを決める友達には、最速のコードを作成するのではなく、結果を早く得ることに集中する必要があるので、mathematicaを使うように言います。

于 2012-10-18T19:31:48.880 に答える