Lisp,OCaml或Runge Kutta的用途?

Eel*_*vex 9 lisp ocaml numerical-methods

您建议使用哪种语言来解决系统:

  • 一阶微分方程
  • 复杂的变量
  • n维

使用4阶Runge Kutta等.

速度是相当重要的很多,但会牺牲:

  • 优雅(干净和简短)的代码
  • 灵活性和可扩展性

我主要是在Lisp和OCaml之间,但欢迎任何其他建议.

谢谢!

Les*_*zer 5

这是Common Lisp中RK的一个实现:

http://github.com/bld/bld-ode/blob/master/rk.lisp

Common Lisp的优点在于,您可以从简单而优雅的代码开始,然后使关键位快速运行(例如,通过从大多数功能切换到有状态计算,或通过声明类型).

SBCL有一个优秀的本机代码编译器.


Jam*_*mes 0

Fortran 或 C,可能想研究NAG 例程。C 会更灵活,也更容易理解,但 Fortran 通常被认为最适合数字。

  • @Idigas:回应您关于 Fortran 约定“通常仅与计算机科学家习惯的不同”的评论:我是一名受过训练的数学家,而不是计算机科学家。我引用的作者威廉·卡汉(William Kahan)(因其在数值方面的工作而获得图灵奖)也是一位数学家。Fortran 在复杂算术中的零符号约定、算术重新关联以及其他在 C 中被正确地称为“不安全”的优化对于严格的数值编程来说是适得其反的。对性能有好处,但对再现性和正确性不利。 (5认同)
  • @Stephen - 请不要在没有提供确凿证据支持的情况下给出这种“煽动战争”的意见。 (3认同)
  • @Idigas:好的,我会支持它。一个简单的例子:当输入位于多个复杂函数(尤其是平方根和对数)的分支切割上时,Fortran 会为结果选择“错误”的零符号。请参阅 Kahan 的优秀论文“复杂基本函数的分支切割,或者,无事生非”,了解 Fortran 选择不如 C 标准(遵循 Kahan 的建议)的示例。更一般地说,Fortran 允许许多性能优化,这些优化可能会对数值稳定性产生负面影响,而 C 中默认不允许这些优化。 (3认同)