Kann mir jemand erklären, warum scipy.integrieren.quad gibt unterschiedliche Ergebnisse für gleich lange Bereiche, während die Integration von sin(X)?

Ich versuche, numerisch integrieren, eine willkürliche (bekannt als ich-code) Funktion in meinem Programm
mit Hilfe numerischer Integrationsverfahren. Ich bin mit Python 2.5.2 zusammen mit SciPy ist die numerische integration package. Um ein Gefühl dafür zu bekommen, habe ich beschlossen, zu versuchen, die Integration von sin(x) und beobachtet dieses Verhalten-

>>> from math import pi
>>> from scipy.integrate import quad
>>> from math import sin
>>> def integrand(x):
...     return sin(x)
... 
>>> quad(integrand, -pi, pi)
(0.0, 4.3998892617846002e-14)
>>> quad(integrand, 0, 2*pi)
(2.2579473462709165e-16, 4.3998892617846002e-14)

Dieses Verhalten finde ich seltsam, weil -

1. In der normalen integration, die Integration über den vollen Takt ergibt null.

2. In der numerischen integration, das (1) ist das nicht unbedingt der Fall, denn Sie kann nur sein,
Annäherung der Fläche unter der Kurve.

In jedem Fall, entweder Annahme 1 gilt oder Annahme: 2 ist Wahr, ich finde das Verhalten inkonsistent sein. Entweder beide Integrationen (-pi bis pi und 0 bis 2*pi) sollte die Rückkehr 0.0 (der erste Wert im Tupel ist das Ergebnis und das zweite ist der Fehler) oder die return-2.257...

Kann mir bitte jemand erklären, warum dies passiert ist? Ist das wirklich ein Widerspruch? Kann mir auch jemand sagen, wenn ich bin fehlt etwas wirklich grundlegendes zu numerischen Methoden?

In jedem Fall, meine Letzte Anwendung, die ich Plane, verwenden die obige Methode, um die Bogenlänge einer Funktion. Wenn jemand schon Erfahrung in diesem Bereich, bitte informieren Sie mich über die beste Politik für die dies in Python.

Bearbeiten

Hinweis

Ich habe bereits die erste differenzielle Werte aller Punkte in der Palette gespeichert in einem array.

Aktuelle Fehler ist tolerierbar.

Ende Hinweis

Habe ich gelesen, die Wikipaedia. Als Dimitry hingewiesen hat, werde ich die Integration von sqrt(1+diff(f(x), x)^2) um die Bogenlänge. Was ich Fragen wollte war - gibt es eine bessere Annäherung/Best practice(?) /schneller Weg, dies zu tun. Wenn mehr Kontext benötigt wird, poste ich es separat/post-Kontext hier, wie Sie es wünschen.

Hier ist ein blog post algorithmist.wordpress.com/2009/01/05/..., die Sie vielleicht nützlich finden. Ein link aus dem blog algorithmist.net/crlength.html
Danke. Ich schau die links.

InformationsquelleAutor batbrat | 2009-02-24

Schreibe einen Kommentar