2012-01-27 141 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來轉換例程,我只使用了其他人轉換的一些例程。