2017-04-07 2 views
-2

Wer weiß, wie man Boost verwendet, um einfache bestimmte Integrale zu lösen?C++: Boost verwenden, um einfache bestimmte Integrale zu berechnen

z. -x^2 + 1 von -1 bis 1?

Ich habe versucht, die boost documentation zu lesen, aber ich kann nicht scheinen, herauszufinden, wie man die Funktion richtig übergeben.

Dank

Edit: Mein Versuch so weit

using namespace boost::math; 

typename function_type; // this is probably wrong 

function_type f  // and this 
{ 
    return -x*x+1; 
}; 

int main(int, char**) 
{ 
    const double val = 
    integral(0.0, 
    1, 
    0.001, 
    f);  // my question is, what do I put in here? How do I format f. 
} 
+1

Was haben Sie bereits versucht, und was sind die Fehler, denen Sie begegnen? – JHBonarius

+0

Ich habe mein bisher Gesuchtes hinzugefügt. Scheint wie der Befehl function_type ist schlecht, weil ich einen unbekannten Typnamen bekomme. Aber wenn ich f eine gewöhnliche Funktion mache, double f (double x), gibt mir der Integralbefehl einen Fehler "uneclared identifier", was ich schätze, weil er einen function_type erwartet ... – storluffarn

+0

Da bin ich kein Häufiger Stack-Überlauf Benutzer: war nicht die Art von Frage, die für diese Community gedacht war? Oder habe ich es schlecht formuliert? Ich frage mich nur, weil es downvoted war, und ich würde natürlich in Zukunft an der Community-Politik festhalten wollen. – storluffarn

Antwort

0

Das erste, was ist zu beachten, dass die Boost-Bibliothek, die Sie nicht wirklich haben eine Funktion zur Berechnung Integrale gezeigt haben. Das könnte dich auf die falsche Fährte gebracht haben.

Die Bibliothek wird für Gleitkommaoperationen mit Mehrfachpräzision verwendet, und eines der Beispiele ist eine einfache Approximation von Integralen, gemäß Riemann. Der Punkt des Beispiels ist, dass Riemann-Integrale so einfach sind, dass Sie sie verwenden können, um eine ausgefallene Bibliothek zu demonstrieren.

In Ihrem Fall müssten Sie sich nicht einmal darum kümmern, eine Funktion zu übergeben. Sie können einfach die Riemann-Methode schreiben, die -x^2 + 1 direkt ersetzt.

Das heißt, der typische C++ Weg, es als ein Argument zu übergeben wäre [](double x) { return -x*x+1.0;}. Das ist eine unbenannte Funktion oder Lambda. Es benötigt keinen eigenen Namen, da der Parameter bereits einen Namen hat.

+0

Ich dachte, es gäbe einen standardmäßigen, allgemeinen Zweck, numerische Integration Löser. GSL bekam die gsl_integration_qags, aber es schien eher c als C++ zu sein. Beim Googeln habe ich einen Boost gefunden, der den Trick zu machen scheint, aber vielleicht ist es nur eines dieser Dinge, die einfach und billiger (Ressourcen) sind, um sich selbst zu schreiben. Wie auch immer, danke für die Antwort. – storluffarn

Verwandte Themen