2009-08-29 3 views
13

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

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

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

+1

Цифрами или символами? –

+0

Чтобы прояснить последнее изменение, пытаетесь ли вы использовать функции Mathematica и/или Matlab в C#, или вы пытаетесь вызвать классы C# из Mathematica или Matlab? – las3rjock

+0

приложение написано на C# - мне нужно выполнить вычисления из C# (вызвать внешние функции) – mson

ответ

13

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

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

ссылка не работает :-) –

+0

URL-адрес неправильный, должен быть http://www.mathdotnet.com/ –

1

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

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

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

0

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

1

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

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

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

+0

Mathematica's MathLink.NET также борьба с комплексными числами и сама Mathematica не особенно хороша в этих проблемах (например, «Фурье» Mathematica было примерно на 4 × медленнее, чем FFTW, который я смотрел, и многоядерная поддержка Mathematica ужасна). –

1

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

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

Смежные вопросы