LSODA в dll - Фортран (F77) в dll для вызова из C # - PullRequest
2 голосов
/ 27 января 2012

маленький вопрос, в котором я надеюсь, что вы мне поможете.(Чтобы сделать мою жизнь проще)

Одним из наиболее уважаемых численных решателей для дифференциальных уравнений является LSODA, однако он написан на Фортране ... (http://www.netlib.org/odepack/index.html)

Тамне кажется подходящим решением для C #, и написание собственного слишком трудоемко в C #, тем более что у меня очень жесткие уравнения, которые необходимо решить.

Библиотеки NAG для net не содержатРешатель ODE (им не хватает процедур D02).С точки зрения "университетской" библиотеки это все.Однако служба поддержки NAG предложила вызвать их dll, что хорошо для простых переменных, но меня довольно озадачили ее внешние функции и фиктивные параметры, которые заставили меня сдаться.

Это оставляет LSODA по-прежнему, что является фортраном, ноГораздо проще в своей последовательности вызова - поэтому мне интересно, как Odepack (решатели, которые включают в себя процедуру lsoda) можно превратить в dll без особых усилий, чтобы он мог вызываться из C #?(Это заставит меня беспокоиться о якобиане, являющемся матрицей, то есть двумерным массивом.) В частности, я хотел бы получить ситуацию, аналогичную ситуации с библиотекой Fortran NAG, но вместо этого предложить мне доступ к lsoda: http://www.nag.co.uk/numeric/csharpinfo.asp

Пожалуйста, имейте в виду, что я математик - поэтому, если ваши ответы потеряют меня, пожалуйста, будьте терпеливы со мной.И почему я так сосредоточен на C # - это просто, особенно когда у вас VisualStudio 2010.

Большое спасибо за любые ответы заранее.

Ответы [ 2 ]

1 голос
/ 27 января 2012

SmartMathLibrary выглядит мертвым, но утверждает, что имеет привязки ODEPACK. Вы также можете ознакомиться с списком цифровых пакетов .NET * из Википедии .

Если вы открыты для других языков, библиотека Python SciPy содержит привязку к LSODA: введите описание ссылки здесь . Он доступен в Windows, прост в использовании, бесплатен и широко используется научным сообществом.

0 голосов
/ 28 января 2012

Это не полное решение, но f2c (конвертер Fortran-to-C) должен быть в состоянии дать вам рабочий код C из исходного кода на Fortran.Это может быть, по крайней мере, проще для работы с C #.

Отказ от ответственности: я никогда не использовал f2c для преобразования подпрограммы, я использовал только некоторые подпрограммы, которые кто-то еще преобразовал.

...