Комплексные вычисления в С#

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

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

Могут ли люди прокомментировать Mathematica и Matlab и их интеграцию в С#?

Ответы

Ответ 1

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

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

Ответ 2

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

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

Возможно, это будет полезно для вас.

Ответ 3

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

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

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

Ответ 4

Microsoft Язык программирования Visual F # был специально разработан для такого рода работ, поэтому вы, вероятно, просто хотите вызвать существующее решение F # из своего С# код. Например, в Visual Studio 2010 с установленной нашей библиотекой F # для Numerics вы можете интегрировать 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

Ответ 5

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

Ответ 7

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