【发布时间】:2011-02-23 21:04:20
【问题描述】:
您建议使用哪种语言来解决系统问题:
- 一阶微分方程
- 复杂变量
- N 维
使用 4 阶 Runge Kutta 等。
速度很重要很多,但会牺牲:
- 优雅(简洁)的代码
- 灵活性 + 可扩展性
我主要介于 Lisp 和 OCaml 之间,但欢迎任何其他建议。
谢谢!
【问题讨论】:
标签: lisp ocaml numerical-methods
您建议使用哪种语言来解决系统问题:
使用 4 阶 Runge Kutta 等。
速度很重要很多,但会牺牲:
我主要介于 Lisp 和 OCaml 之间,但欢迎任何其他建议。
谢谢!
【问题讨论】:
标签: lisp ocaml numerical-methods
下面是 RK 在 Common Lisp 中的实现:
http://github.com/bld/bld-ode/blob/master/rk.lisp
Common Lisp 的好处在于,您可以从简单而优雅的代码开始,然后让关键位快速运行(例如,通过从主要功能性计算切换到有状态计算,或通过声明类型)。
SBCL 拥有出色的原生代码编译器。
【讨论】:
RK4 是一个非常基础的方法,已经编写了很多优秀的实现。使用其中之一,然后将精力花在项目的其他方面。
【讨论】:
我不熟悉 Runge Kutta,但 OCaml 总体上可以提供良好的速度和可读性,至少如果你有点小心的话。然后,您就可以在应用程序的其余部分使用健壮的静态类型系统。
【讨论】:
除此之外,您还可以将 ocaml 绑定写入现有的 C runge-kutta 求解器。
【讨论】:
很难说哪种语言最简单,有lisp、C++、C# 等库来实现这一点,如果它与个人喜好有关,那就很多了。我推测 Matlab 是专门针对这些类型的任务最量身定制和最优雅的解决方案,它有很多 built in support for ODEs... Lisp 可能比较慢...而且我不能代表 OCaml。
【讨论】:
我建议使用 python+numpy+scipy,一般的数学和数值支持(超级多维数组)非常好。无论如何,这取决于具体需求。
【讨论】:
Fortran 或 C,可能需要查看 NAG routines。 C 会更灵活,更容易理解,但 Fortran 通常被认为是最适合数字的。
【讨论】: