fpg*_*ost 3 compiled wolfram-mathematica gnu ode gsl
与Mathematica 8.0 NDSolve相比,使用GSL库用C语言编写的ODE求解器是否具有明显的速度优势?在准确性方面如何公平?
我的理解是编译后的代码原则上可以更快,但是现在NDSolve已经以某种方式使用了很多已编译的代码本身?
还有使用MathLink或Mathematica的编译功能来加速解决ODE的选项吗?
Mathematica中的NDSolve和其他数值函数自动将您的操作数(例如ODE的RHS)编译为中间"字节码"语言(与编译函数使用的语言相同).如果你愿意,可以指定CompilationTarget - >"C",函数将一直编译到C代码并链接回Mathematica ...你可以在Mathematica Stack Exchange上的前一个问题中看到自己生成的C代码:
当然,原则上总是可以手写一个更快的算法...但是Mathematica会自动完成很多优化.例如,您可能不希望负责在优化问题中手动优化偏导数的稀疏矩阵的计算.