Комплексные вычисления в С#
Какие лучшие инструменты (наиболее эффективные) доступны в .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 - см. Раздел "Ограничения и альтернативы" этой записи. (У меня нет личного опыта работы с этими инструментами.)
Ответ 6
Посмотрите на f # http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/
Он будет частью Visual Studio 2010.
Ответ 7
Если у вас есть дополнительный продукт MATLAB Builder для .NET, вы можете упаковать код MATLAB в сборку .NET, которую можно вызвать из С#.