Wolfram mathematica 使用GNU gsl编写的ODE是否优于Mathematica';什么是解决方案?

Wolfram mathematica 使用GNU gsl编写的ODE是否优于Mathematica';什么是解决方案?,wolfram-mathematica,gnu,gsl,ode,compiled,Wolfram Mathematica,Gnu,Gsl,Ode,Compiled,与Mathematica 8.0 NDSolve相比,使用GSL库编写的ODE解算器是否具有显著的速度优势?在准确性方面如何公平 我的理解是,编译代码原则上可以更快,但现在NDSolve本身已经不知何故使用了大量编译代码 还有什么方法可以使用MathLink或Mathematica的编译函数来加快解颂歌的速度?Mathematica的重点是可用性。他们确实使用数字库。因此,速度将与最佳可用库相同或更差(在几乎所有情况下)。例如,我听说他们用特征值来表示矩阵 你应该考虑的是,尽管他们优化了他们提供

与Mathematica 8.0 NDSolve相比,使用GSL库编写的ODE解算器是否具有显著的速度优势?在准确性方面如何公平

我的理解是,编译代码原则上可以更快,但现在NDSolve本身已经不知何故使用了大量编译代码


还有什么方法可以使用MathLink或Mathematica的编译函数来加快解颂歌的速度?

Mathematica的重点是可用性。他们确实使用数字库。因此,速度将与最佳可用库相同或更差(在几乎所有情况下)。例如,我听说他们用特征值来表示矩阵


你应该考虑的是,尽管他们优化了他们提供的功能,但是你自己的功能并没有得到优化。所以你在每一步计算的导数在c中会更快


对于我的朋友,在Mathematica和C++之间,我告诉你用Mathematica去做,因为他们应该专注于快速地获得结果,而不是建立最快的代码。

< P> NDebug和Mathematica中的其他数值函数自动编译你的操作数(例如,一个ODE的RHS)到中间的“字节码”语言。(与编译函数使用的相同)。如果您愿意,可以指定->“C”,函数将一直编译为C代码并链接回Mathematica…您可以在Mathematica堆栈交换的上一个问题中看到生成的C代码:


当然,从原则上讲,手工编写一个更快的算法是可能的……但是Mathematica会自动完成许多优化工作。例如,在优化问题中,你可能不想负责手动优化偏导数稀疏矩阵的计算

“尽管他们优化了自己提供的功能,但您自己的功能并未得到优化"有没有一种方法可以使用Mathematica的编译来避免这个陷阱,从而达到与c相同的速度?不是Mathematica编译,但是你可以用c libs来创建Mathematica接口。所以你应该将你的函数设置为c lib。如果你知道或者想学习如何做到这一点,只使用c会更容易。顺便说一句,我发现它非常适合原型设计。它是fa顺便说一下,如果你关注性能,试试C++ ODETIN。这就是我所使用的。它有更多的现代积分器和更好的性能。