Решение дифференциальных уравнений в частных производных с использованием C # - PullRequest
4 голосов
/ 21 сентября 2009

Я работаю над проектом (C # и .NET Framework), который требует от меня решения некоторых дифференциальных уравнений в частных производных. Существуют ли какие-либо конкретные библиотеки на основе .NET Framework, которые я мог бы увидеть и упростить мою работу?

Я работал с MATLAb, и решение уравнений в частных производных там очень простое. Как я могу решить эту проблему?

Ответы [ 4 ]

7 голосов
/ 21 сентября 2009

Зависит от того, какие PDE вы хотите решить и как вы хотите к ним подойти.

Каждый известный мне подход требует линейной алгебры. Вы захотите найти хороший матричный пакет для .NET, лучший из всех, которые вы можете найти, и который может эффективно обрабатывать разреженные матрицы.

Линейные эллиптические (стационарная диффузия), параболические (переходная диффузия) и гиперболические (F = MA динамические) PDE требуют немного разных подходов.

Все три из этих PDE могут использовать классическую конечно-разностную, конечный элемент (взвешенный остаток) или граничный элемент (функции Грина) для создания системной матрицы, которую вы хотите решить. Обычные нелинейные PDE, вероятно, лучше всего атаковать с использованием метода конечных элементов / взвешенных невязок.

Но параболические и гиперболические PDF-файлы превратятся в связанные наборы ODE, как только вы их дискретизируете. Вы должны сделать кратковременную интеграцию, чтобы повторно решить эволюцию времени. Параболические ОДУ имеют первый порядок во времени; гиперболические ОДУ второго порядка по времени.

Я изучаю CUDA и NVIDIA. Возможно, вы захотите изучить привязки CUDA для вашего языка.

Все это большие темы для себя. Пожалуйста, Google для некоторых источников, потому что здесь невозможно дать более краткий обзор.

ОБНОВЛЕНИЕ: недавно я узнал о Microsoft Solver Foundation . Я сам не рассматривал это, но, возможно, это поможет разработчикам на C # решить эту проблему.

3 голосов
/ 21 сентября 2009

Другое предложение - AlgLib . Мне это нравится, потому что в отличие от всеобъемлющих библиотек, где вы должны найти то, что вам нужно, в AlgLib все алгоритмы разделены и часто предлагаются на нескольких языках (включая C #, в большинстве / всех случаях). Что касается исчисления охватывает AlgLib:

        Euler's method
        Runge-Kutta method
        Runge-Kutta method for a system of ODEs
        Bulirsch-Stoer method for a system of ODEs

Однако, предостережение ... проверив эти алгоритмы в AlgLib, я заметил, что они больше не поддерживаются (AlgLib), потому что их лицензии могут быть несовместимы с лицензией AlgLib (я полагаю, GPL).

2 голосов
/ 21 сентября 2009

Вы можете решить проблему в MATLAB и использовать компилятор MATLAB + Панель инструментов Builder NE , чтобы создать сборку .NET, которая ссылается на остальную часть вашего приложения.

2 голосов
/ 21 сентября 2009

Проверьте http://www.mathdotnet.com/About.aspx, он может иметь то, что вам нужно. Однако я подозреваю, что вы должны получить лучшую библиотеку для ваших требований к приложению, а затем связать ее с вашим приложением .net.

Вы, вероятно, обнаружите, что с такими вещами (кроме тех случаев, когда вы используете для изучения либо язык, либо математику) существует несколько предварительно настроенных библиотек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...