Какие инструменты (наиболее эффективные) доступны в .NET (C#) для расчета:
- интегралы
- частные производные
- другая нетривиальная математика
Люди, пожалуйста, прокомментируйте Mathematica и Matlab и их интеграцию в C#?
Какие инструменты (наиболее эффективные) доступны в .NET (C#) для расчета:
Люди, пожалуйста, прокомментируйте Mathematica и Matlab и их интеграцию в C#?
Math.NET – это математический инструментарий с открытым исходным кодом, написанный на C# для платформы Microsoft .NET и предназначенный для предоставления содержал чистую основу как для числовых научных, так и для символьных алгебраических вычислений. В частности, Math.NET Numerics является результатом слияния dnAnalytics с Math.NET Iridium и включает следующие Функции:
Я не могу поручиться за то, что он лучший или более эффективный, но пару дней назад я узнал, что Лука Болоньезе разработал библиотеку финансовых функций для .NET.
Вы можете найти его здесь: http://code.msdn.microsoft.com/FinancialFunctions
Может быть, это будет полезно для вас.
У меня нет опыта работы с мостом Mathematica/.NET, но я использовал мост Mathematica/Java, который, судя по документации, очень похож. Конечно, я не могу ответить на один вопрос: насколько хороша реализация интерфейса с точки зрения стабильности и производительности.
Концептуально я считаю, что интерфейс Java для обращения к Mathematica довольно хорош. У вас есть набор объектов и методов, которые позволяют запускать сеансы Mathematica и отправлять им выражения Mathematica для оценки. Вы можете отправлять текст (что легко в простых случаях, но сложно, если вы хотите что-то нетривиальное) или более структурированные Expr
объекты, которые отражают структуру синтаксического дерева. Эти выражения позволят вам делать практически все: вычислять интегралы численно или символически, брать производные, решать ОДУ и так далее.
Единственная область, где он несколько падает, — это обработка ошибок. Mathematica не имеет исключений как таковых; вместо этого он выдает «сообщения», когда сталкивается с проблемой и продолжает пытаться вычислить выражение, над которым работает. Это имеет некоторый смысл в свете довольно необычной семантики Mathematica (где она работает с выражениями с повторяющимися переписываниями правил), но набор методов по умолчанию для связи с Mathematica не позволяет вам легко отслеживать эти сообщения из Java (или, как кажется, , .NET), хотя можно написать свои собственные методы, которые лучше справляются с этой задачей.
Fourier
в Mathematica была примерно в 4 раза медленнее, чем FFTW, которую я смотрел в последний раз, а многоядерная поддержка Mathematica ужасна).
- person J D; 23.04.2010
Язык программирования Microsoft Visual F# был специально разработан для такой работы, поэтому вы, вероятно, просто хотите вызвать существующее решение F # из своего кода C #. Например, в Visual Studio 2010 с установленной библиотекой F# for Numerics можно интегрировать x3-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
Вы можете проверить http://www.dmoz.org/Science/Math/Software/ - они перечисляют несколько C#. Я бы посоветовал попробовать несколько (демонстрационных версий, если они коммерческие) и выполнить профилирование, чтобы увидеть, соответствуют ли они вашим требованиям. Вы также можете использовать MATLAB — см. раздел Ограничения и альтернативы этой записи. (У меня нет личного опыта работы с этими инструментами.)
Взгляните на f# http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/
Он будет частью Visual Studio 2010.
Если у вас есть дополнительный продукт MATLAB Builder для .NET, вы можете упаковать код MATLAB в сборку .NET, которую можно вызывать из C#.