Numerische Integrationsbibliothek in C++

Kennt jemand eine C++-Bibliothek zur numerischen Integration von Samples (Datenpunkte (x,y)), wie scipy Integrate.simps? Ich weiß, dass es nicht schwer ist, es selbst zu implementieren (tatsächlich habe ich es bereits getan), aber ich muss dies sehr oft für große Datensätze tun, deshalb suche ich nach einer vielleicht schnelleren Bibliotheksimplementierung. Ich habe bereits boost und gsl überprüft, aber nichts gefunden!

Danke und Prost

Warum ist es Ihnen wichtig, dass die Bibliothek in C++ vorliegt? Können Sie nicht einfach jede Bibliothek verwenden (dh eine .so- oder eine .dll-Shared-Library)? Vielleicht ist das auch der Grund, warum Sie keine gefunden haben, das scheint nicht besonders sprachspezifisch zu sein.
Natürlich ist jede Bibliothek in Ordnung, solange sie mit meinem Code kompatibel ist
Wie wäre es, wenn Sie Ihren Code mit einer Bibliothek kompatibel machen?
:-) .. auch ok, aber wie ich unten geschrieben habe, hilft es nicht, eine interpolierende Funktion zu schreiben, um eine kontinuierliche Funktion zu erhalten, da dies die Berechnung verlangsamen würde. Daher suche ich nach einer Bibliothek, Funktion, die ein Array, einen Vektor oder was auch immer mit einer festen Anzahl von Punkten verarbeiten kann!

Antworten (1)

Sie sollten die relativ beliebte GNU Scientific Library (GSL) in Betracht ziehen, die übrigens das ist, was GCC intern verwendet (allerdings nicht den numerischen Integrationsteil).

Es hat einen ziemlich langen Handbuchabschnitt zur numerischen Integration, in dem Folgendes beschrieben wird:

  • QNG nicht-adaptive Gauss-Kronrod-Integration
  • Adaptive QAG-Integration
    • mit Singularitäten
    • mit bekannten singulären Punkten
    • in unendlichen Intervallen:
    • für Cauchy-Hauptwerte:
    • für singuläre Funktionen
  • adaptive Integration
    • für Schwingungsfunktionen
    • für Fourierintegrale
  • Doppelt adaptive CQUAD-Integration
  • Gauß-Legendre-Integration mit fester Reihenfolge

Und die meisten/alle davon scheinen stichprobenbasiert zu sein (anstatt mithilfe einer symbolischen Darstellung zu integrieren).

Es ist in C geschrieben, aber es scheint, dass Sie bereit sind, das zu akzeptieren.

Außerdem hat Wikipedia eine lange Liste numerischer Bibliotheken in verschiedenen Sprachen , einschließlich C und C++. Ich habe nicht viel Erfahrung mit numerischer Arbeit in C oder C++ (nur ein bisschen in MatLab), also habe ich keine ausprobiert, aber - Sie sollten.

Wenn Sie dies tun, sollten Sie Ihre eigene Frage beantworten und angeben, welche Bibliotheken (grundsätzlich) Ihren Anforderungen entsprechen und welche Sie ausgewählt haben.

Vielen Dank für Ihren Vorschlag, aber soweit ich es verstehe, benötigen alle numerischen GSL-Integrationsalgorithmen eine Funktion (const gsl_function * f) als Eingabe. Natürlich könnte ich meine Datenpunkte interpolieren, um eine kontinuierliche Funktion zu erhalten, aber das würde meine Berechnungen sogar verlangsamen. Keiner dieser Algorithmen akzeptiert ein Array oder einen Vektor diskreter Punkte als Eingabe.