Комплексные вычисления в C # - PullRequest
13 голосов
/ 30 августа 2009

Какие лучшие (наиболее эффективные) инструменты доступны в .NET (C #) для расчета:

  • интегралы
  • частные производные
  • другая нетривиальная математика

Не могли бы люди прокомментировать Mathematica и Matlab и их интеграцию в C # ?

Ответы [ 7 ]

13 голосов
/ 30 августа 2009

Math.NET - это математический набор инструментов с открытым исходным кодом, написанный на C # для платформы Microsoft .NET, который призван обеспечить автономную чистую среду для числовых научных и символьных алгебраических вычислений. В частности, Math.NET Numerics является результатом слияния dnAnalytics с Math.NET Iridium и включает следующие функции:

  • действительная и комплексная, плотная и разреженная линейная алгебра (с LU , QR , собственные значения , ... разложения)
  • процедуры интегрирования числовых функций (квадратурные)
  • интегральные преобразования
1 голос
/ 23 апреля 2010

Microsoft Visual F # язык программирования был специально разработан для такой работы, так что вы, вероятно, просто хотите вызвать существующее решение F # из своего кода C #. Например, в Visual Studio 2010 с нашей установленной библиотекой F # для чисел вы можете интерактивно интегрировать x 3 -x-1 от -3 до 3 следующим образом:

> Functional.integrate (fun [x] -> x**3.0 - x - 1.0) [-3.0, 3.0];;
val it : float = -6.0

и вычислить частную производную этой функции по x при x=2 следующим образом:

> Functional.d (fun x -> x**3.0 - x - 1.0) 2.0;;
val it : float = 11.0
1 голос
/ 31 августа 2009

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

Концептуально я нашел интерфейс Java для вызова Mathematica довольно хорошим. У вас есть набор объектов и методов, которые позволяют вам запускать сеансы Mathematica и отправлять выражения Mathematica в них для оценки. Вы можете отправить текст (что легко в простых случаях, но сложно, если вы хотите что-то нетривиальное) или более структурированные Expr объекты, которые отражают структуру синтаксического дерева. Эти выражения позволят вам делать практически все, что угодно: оценивать интегралы численно или символически, брать производные, решать ODE и т. Д.

Единственная область, где она падает, - обработка ошибок. Mathematica не имеет исключений как таковых; вместо этого он генерирует «сообщения», когда сталкивается с проблемами и продолжает пытаться оценить выражение, над которым работает. Это имеет некоторый смысл в свете довольно необычной семантики Mathematica (где он работает с выражениями с повторными переписываниями правил), но набор методов по умолчанию для связи с Mathematica не позволяет вам легко отслеживать эти сообщения изнутри Java (или, похоже, .NET), хотя можно написать свои собственные методы, которые лучше справляются с этой задачей.

1 голос
/ 30 августа 2009

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

Вы можете найти его здесь: http://code.msdn.microsoft.com/FinancialFunctions

Может быть, это будет полезно для вас.

0 голосов
/ 25 июня 2013

Если у вас есть дополнительный продукт MATLAB Builder для .NET, вы можете упаковать код MATLAB в сборку .NET, которая может быть вызвана из C #.

0 голосов
/ 31 августа 2009

Посмотрите на F # http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/

Он будет частью Visual Studio 2010.

0 голосов
/ 30 августа 2009

Вы можете проверить http://www.dmoz.org/Science/Math/Software/ - они перечисляют несколько C #. Я бы сказал, попробуйте несколько (демоверсии, если коммерческие) и проведите профилирование, чтобы увидеть, соответствуют ли они вашим требованиям. Вы также можете использовать MATLAB - см. Раздел «Ограничения и альтернативы» этой записи. (У меня нет личного опыта использования этих инструментов.)

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