2009-08-29 4 views
13

Was sind die besten Werkzeuge (sehr effizient) in .NET (C#) für die Berechnung:komplexe Berechnungen in C#

  • Integrale
  • partiellen Ableitungen
  • andere nicht-triviale Mathematik

Können sich Leute bitte zu Mathematica und Matlab und deren Integration in C# äußern?

+1

Numerisch oder symbolisch? –

+0

Um Ihre letzte Bearbeitung zu verdeutlichen, versuchen Sie, Mathematica- und/oder Matlab-Funktionen in C# zu verwenden, oder versuchen Sie, C# -Klassen von Mathematica oder Matlab aufzurufen? – las3rjock

+0

Anwendung ist in C# geschrieben - ich muss Berechnungen von C# (externe Funktionen aufrufen) – mson

Antwort

13

Math.NET ist ein mathematisches Open-Source-Toolkit geschrieben in C# für die Microsoft .NET-Plattform, die ein in sich geschlossenes sauberes Framework für numerische wissenschaftliche und symbolische algebraische Berechnungen bieten soll. Insbesondere ist Math.NET Numerics das Ergebnis der Fusion von dnAnalytics mit Math.NET Iridium und umfasst die folgenden Funktionen:

  • real und komplex, dicht und spärlich lineare Algebra (mit LU, QR, eigenvalues ... Zersetzungen)
  • numerische Funktionsintegration (Quadratur) Routinen
  • Integraltransformationen
+0

Link funktioniert nicht :-) –

+0

Die URL ist falsch, sollte http://www.mathdotnet.com/ –

0

Sie könnten http://www.dmoz.org/Science/Math/Software/ - sie listet mehrere C# Einsen. Ich würde sagen, versuchen Sie ein paar (Demo-Ausgaben, wenn kommerziell) und einige Profiling, um zu sehen, ob sie Ihren Anforderungen entsprechen. Sie könnten auch MATLAB verwenden - siehe Abschnitt "Einschränkungen und Alternativen" dieses Eintrags. (Ich habe keine persönliche Erfahrung mit diesen Tools.)

1

ich habe keine Erfahrung mit der Mathematica/.NET Brücke, aber Ich habe die Mathematica/Java-Bridge benutzt, die aus der Dokumentation sehr ähnlich ist. Natürlich ist eine Frage, die ich nicht beantworten kann, wie gut die Implementierung der Schnittstelle in Bezug auf Stabilität und Leistung ist.

Konzeptionell habe ich die Java-Schnittstelle für den Aufruf zu Mathematica ziemlich gut gefunden. Sie verfügen über eine Reihe von Objekten und Methoden, mit denen Sie Mathematica-Sitzungen starten und Mathematica-Ausdrücke zur Auswertung an sie senden können. Sie können entweder Text senden (was in einfachen Fällen einfach ist, aber schwierig, wenn Sie etwas nicht-triviales wollen) oder strukturiertere Expr Objekte, die die Syntaxbaumstruktur spiegeln. Mit diesen Ausdrücken können Sie praktisch alles machen: Integrale numerisch oder symbolisch auswerten, Ableitungen nehmen, ODEs lösen und so weiter.

Der eine Bereich, in dem es fällt, ist in der Fehlerbehandlung. Mathematica hat an sich keine Ausnahmen; Stattdessen erzeugt es "Nachrichten", wenn es Probleme gibt, und versucht weiterhin, den Ausdruck zu bewerten, an dem es arbeitet.Dies ist angesichts der recht ungewöhnlichen Semantik von Mathematica (wo es Ausdrücke mit wiederholten Regelumschreibungen bearbeitet) durchaus sinnvoll, aber die Standard-Methoden zur Kommunikation mit Mathematica erlauben es nicht, diese Nachrichten innerhalb von Java einfach zu überwachen (oder es scheint so) .NET), obwohl es möglich ist, eigene Methoden zu schreiben, die das besser machen.

+0

Mathematica MathLink.NET auch sein Kämpfe mit komplexen Zahlen und Mathematica selbst ist bei solchen Problemen nicht sonderlich gut (zB war Mathematicas Fourier etwa 4 mal langsamer als die FFTW, die ich zuletzt gesehen habe, und Mathematicas Multicore-Unterstützung ist schrecklich). –

1

Microsofts sein wurde Visual F# Programmiersprache speziell entwickelt, so dass Sie wahrscheinlich eine bestehende F # Lösung nur anrufen möchten von Ihrem C# -Code. Zum Beispiel installiert in Visual Studio 2010 mit unserer F# for Numerics Bibliothek können Sie x -x-1 von Integration -3 bis 3 interaktiv wie folgt:

> Functional.integrate (fun [x] -> x**3.0 - x - 1.0) [-3.0, 3.0];; 
val it : float = -6.0 

und berechnen, die Funktion des partiellen Ableitung in Bezug auf x bei x=2 wie folgt:

> Functional.d (fun x -> x**3.0 - x - 1.0) 2.0;; 
val it : float = 11.0 
0

Wenn Sie ein Add-on-Produkt MATLAB Builder for .NET haben, können Sie MATLAB-Code in eine .NET-Assembly-Paket, das von C# aufgerufen werden kann.