2012-01-27 121 views
2

一个小问题,我希望你能帮助我。 (为了使我的生活更简单)LSODA到DLL - Fortran(F77)从dll调用C#

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

似乎没有成为一个体面的求解C#编写我自己的代码在C#中太耗时了,特别是因为我有非常僵硬的方程需要解决。

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

这使得LSODA仍然是Fortran,但它的调用顺序更简单 - 所以我想知道,Odepack(包括lsoda例程在内的解算器)怎么会变成一个没有多少工作的dll,所以它可能是从C#调用的? (这将让我担心的雅可比,是一个矩阵,即二维数组) 具体来说,我想类似与Fortran的NAG库的情况,而是为我提供访问lsoda:http://www.nag.co.uk/numeric/csharpinfo.asp

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

非常感谢任何回复提前。

+1

我的建议是只使用Fortran,但这当然不是解决您的问题的方法。奇怪的是,您使用VisualStudio,我在Linux上开发的一个重要原因是:没有成本,优秀的编程环境以及访问英特尔非商业编译器许可证。 – steabert 2012-01-27 15:19:50

+0

但我不想要Fortran--它似乎不想死。它意味着学习一门对数学毫无用处的编程语言...... Visual Studio - 不,并不奇怪。 Linux:如果有更好的选择,请不要(Windows) - (我并不关心Linux,因为如果我能避免它,我无意使用它,我有更好的事情要做,而不是花几个星期去学习真正从中受益)。你说的对,它不是一个解决方案,只是一个临时补丁。 – DetlevCM 2012-01-27 15:27:58

+1

具有讽刺意味的是,你抱怨Fortran不会死亡,而另一方面你不打算编写一个C#求解器:)另外,最终不会有什么好处,这不是你花在编程上的几天时间fortran等等(它基本上只是另一种语法),它会缺少学习新的东西的意愿(实际上并没有那么不同); – steabert 2012-01-27 17:40:43

回答

1

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

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

+0

如果它包含的odepack会很好......但是看起来死的往往是令人讨厌的。我会给它一个考虑 - 即将尝试它。谢谢。 – DetlevCM 2012-01-27 15:41:31

+0

嗯,odepack似乎是用C++而不是C#....这将意味着我需要将所有东西都从C#迁移到Visual C++,但可能是一个想法... – DetlevCM 2012-01-27 15:47:27

+0

不要这样做!这可能比为ODEPACK创建一个C#包装器更多的工作。 – japreiss 2012-01-27 16:02:27

0

这不是一个完整的解决方案,但是f2c(Fortran-to-C转换器)应该能够为您提供来自Fortran源代码的工作C代码。这至少可以更容易地从C#开始工作。免责声明:我从来没有使用f2c来转换例程,我只使用了其他人转换的一些例程。