LSODA到dll - Fortran(F77)到dll从C#调用

时间:2012-01-27 15:04:45

标签: c# math dll fortran numerical-methods

我希望你能帮助我的一个小问题。 (为了让我的生活更简单)

最受尊敬的微分方程数值求解器之一是LSODA,但它是用Fortran编写的......(http://www.netlib.org/odepack/index.html

对于C#来说似乎没有一个像样的解决方案,在C#中编写自己的求解器太费时了,特别是因为我有非常僵硬的方程需要解决。

net的NAG库不包含ODE解算器(它们缺少D02例程)。就“大学方面”的图书馆来说就是这样。 然而,NAG支持建议调用它们的dll,这对于简单的变量很好,但让我更加困惑的是它的外部函数和伪参数让我放弃了。

这仍然留下了LSODA,这是fortran,但是它的调用序列要简单得多 - 所以我想知道,Odepack(包含lsoda例程的求解器)怎么能变成一个没有多少工作的dll,所以它可以从C#调用? (这会让我担心雅可比,是一个矩阵,即2D阵列。) 具体来说,我想要一个类似于Fortran NAG库的情况,而是让我访问lsoda:http://www.nag.co.uk/numeric/csharpinfo.asp

请记住我是一名数学家 - 所以如果你的回答让我失望,请耐心等待我。为什么我如此专注于C# - 嗯,这很简单,特别是当有一个VisualStudio 2010时。

非常感谢您提前做出的任何回复。

2 个答案:

答案 0 :(得分:1)

SmartMathLibrary看起来死了,但声称有ODEPACK绑定。您还可以查看维基百科的List of .NET Numerical Packages

如果您对其他语言开放,Python的SciPy库包含对LSODA的绑定:enter link description here。它可以在Windows上使用,易于使用,免费,并被科学界广泛接受。

答案 1 :(得分:0)

这不是一个完整的解决方案,但f2c(Fortran-to-C转换器)应该能够为您提供Fortran源代码的C代码。这可能至少更容易从C#开始工作。

免责声明:我从未使用过f2c转换例程,我只使用了其他人转换的一些例程。