2012-03-26 3 views
2

Ich bin auf der Suche nach einer numerischen Integration mit Matlab. Ich weiß, dass es in Matlab eine Trapz-Funktion gibt, aber die Genauigkeit ist nicht gut genug. Durch Online-Suche fand ich dort eine Quad-Funktion, die scheinbar nur symbolischen Ausdruck als Eingabe akzeptiert. Meine Daten sind alle diskret und eindimensional. Ist das eine Möglichkeit, Quad für meine Daten zu verwenden? Vielen Dank.Numerische Integration mit Simpson-Regel auf diskrete Daten

+0

'quad()' ist eine Implementierung der Simpson-Regel, die High-School Mathematik ist. Gibt es etwas, das dich daran hindert, Simpsons Regel selbst zu implementieren? –

+0

ist es nur die simpsons Regel verwenden, ich denke, es ist adaptive Simpson Quadratur. Aber wie auch immer, ich weiß nicht warum, quad ist schnell als meine Implementierung. Ich habe so viele Daten zu integrieren und suche nach einem schnelleren Weg. – user1285419

+0

Es ist ein paar Jahre her seit meiner numerischen Methoden Kurs, aber IIRC der einzige Unterschied zwischen regulären Simpson-Regel und die adaptive Art ist, dass Adaptive Simpson-Regel einen variablen Abstand der Stichprobenpunkte anwendet. Da Sie keinen symbolischen Ausdruck integrieren, können Sie das Abtastintervall nicht variieren - Sie haben bereits Ihre Daten und Sie können nicht mehr Punkte dazwischen interpolieren. Daher wird die reguläre Simpsons Regel so gut wie möglich sein. –

Antwort

1

Eine Antwort auf Ihre Frage wäre nein. Die einzige Möglichkeit zur numerischen Integration von Daten ohne Ausdruck in Matlab besteht in der Verwendung der trapz-Funktion. Wenn es nicht genau genug für Sie ist, versuchen Sie, Ihre eigene Quad-Funktion zu schreiben, wie Li-aung sagte, es ist sehr einfach, this kann helfen.

Eine andere Methode, die Sie versuchen können, ist die leistungsstarke Curve Werkzeugaufnahme verwenden cftool einen Anfall dann verwenden, um die integrate Funktion zu machen, die auf cfit Objekten arbeiten kann (es hat eine seltsame Konvention, die obere Grenze ist das erste Argument!). Ich glaube nicht, dass Sie sehr genaue Antworten erhalten werden als trapz, es hängt von der Passform ab.

-1

Integration einer Funktion einer Variablen ist die Berechnung der Fläche unter der Kurve des Graphen der Funktion. Für diese Antwort werde ich die bösen Funktionen und die Eckenfälle und all die Wendungen beiseite lassen, die Autoren von numerischen Integrationsroutinen auf den Kopf stellen, von denen die meisten hier wahrscheinlich nicht relevant sind.

Die Simpson-Regel ist ein Ansatz zur numerischen Integration einer Funktion, für die Sie einen Code haben, um die Funktion an Punkten innerhalb ihrer Domäne zu bewerten. Das ist hier irrelevant.

Nehmen wir an, dass Ihre Daten eine Zeitreihe von Werten darstellen, die in regelmäßigen Abständen erfasst werden. Dann können Sie Ihre Daten als Histogramm mit Balken gleicher Breite darstellen. Der gesuchte Integrand ist die Summe der Bereiche der Balken im Histogramm zwischen den Grenzen, an denen Sie interessiert sind.

Sie können diesen Ansatz auf Datensätze anwenden, bei denen die x-Achse (dh die Breite der Balken im Histogramm) zeigt keine Zeit für die Situation, in der die Balken nicht die gleiche Breite haben, für die Situation, in der die Daten die x-Achse überqueren, und für die meisten vernünftigen Datensätze ziemlich einfach.

Die Diskretisierung Ihrer Daten begrenzt die Genauigkeit des Ergebnisses, das Sie erhalten können. Wenn beispielsweise Ihre Zeitreihe in 1-Sekunden-Intervallen abgetastet wird, können Sie mit diesem Ansatz nicht über ein Intervall integrieren, das keine ganze Anzahl von Sekunden ist. Aber dann haben Sie nicht wirklich die Daten, auf denen Sie eine Zahl genauer berechnen können. Sicher, Sie können Matlab (oder etwas anderes) verwenden, um zusätzliche Stellen der Genauigkeit zu erzeugen, aber sie haben keine Bedeutung.

+0

Simpsons Regel kann auch für feste Beispielpunkte verwendet werden: zum Beispiel [scipy hat eine Implementierung davon] (http://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.simps.html#) scipy.integrate.simps). Das Histogramm, das Sie beschreiben, ist eine rechteckige Approximation, die für kontinuierliche Funktionen theoretisch sogar schlechter ist als "Trapz"; Simpsons Regel oder Romberg-Integration/etc kann das selbst mit festen Samples für die meisten Funktionen definitiv übertreffen. – Dougal

+0

Denken Sie über den Fall nach, in dem Sie wissen, dass Ihre Funktion ein 'n'-Grad-Polynom ist; Dann reichen 'n' oder mehr Sample-Punkte für eine perfekte Kenntnis der Funktion und damit für eine unbegrenzte Genauigkeit, während Ihre Behauptung ist, dass die rechteckige Annäherung das Beste ist, was Sie möglicherweise tun können, was eindeutig falsch ist. Obwohl Sie normalerweise nicht wissen, dass es ein Polynom ist, bedeuten Kontinuitätsannahmen (und z. B. Stone-Weierstrass, dass * jede * stetige Funktion die Grenze einer Sequenz von Polynomen ist), dass bessere Näherungen Ihnen bessere Ergebnisse bringen. – Dougal

+0

@Dougal: Wenn Sie unbegründete Annahmen über die Funktion machen möchten, von der die diskreten Daten abgetastet werden, gehen Sie gleich weiter. Ich tat, ich nahm an, dass die Funktion nicht kontinuierlich oder differenzierbar war. –

0

Verwenden Sie die Spline-Funktion in MATLAB, um Ihre Daten zu interpolieren, und integrieren Sie diese Daten. Dies ist die Standardmethode für die Integration von Daten in diskreter Form.

0

Sie können quadl() verwenden, um Ihre Daten zu integrieren, wenn Sie zuerst eine Funktion erstellen, in der Sie sie interpolieren.

function f = int_fun(x,xdata,ydata) 
f = interp1(xdata,ydata,x); 

Und dann führen Sie es an die quadl() Funktion:

integral = quadl(@int_fun,A,B,[],[],x,y) % syntax to pass extra arguments 
             % to the function 
Verwandte Themen