Сложные вычисления в C#

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

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

Люди, пожалуйста, прокомментируйте Mathematica и Matlab и их интеграцию в C#?


person mson    schedule 29.08.2009    source источник
comment
Чтобы уточнить ваше последнее редактирование, вы пытаетесь использовать функции Mathematica и/или Matlab в C# или пытаетесь вызвать классы C# из Mathematica или Matlab?   -  person las3rjock    schedule 30.08.2009
comment
приложение написано на C# - мне нужно выполнять вычисления из C# (вызывать внешние функции)   -  person mson    schedule 30.08.2009


Ответы (7)


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

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

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

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

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

person Alfred Myers    schedule 29.08.2009

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

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

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

person Pillsy    schedule 31.08.2009
comment
MathLink.NET от Mathematica также борется с комплексными числами, а сама Mathematica не особенно хороша в таких задачах (например, 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
person J D    schedule 22.04.2010

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

person TrueWill    schedule 29.08.2009

Взгляните на f# http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/

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

person gsharp    schedule 31.08.2009

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

person Sam Roberts    schedule 24.06.2013