Hilft die Transformation von bei der numerischen Integration?


15

Ich habe anekdotisch gehört, dass, wenn man versucht, ein Integral der Form numerisch zu machen

0f(x)J0(x)dx

mit glatt und gutmütig (z. B. nicht selbst stark oszillierend, nicht singulär usw.), dann hilft es Genauigkeit, es als umzuschreibenf(x)

1π0π0f(x)cos(xsinθ)dxdθ

und führe zuerst das innere Integral numerisch durch. Ich kann keinen Grund sehen, warum ich damit rechnen sollte, aber andererseits ist die Genauigkeit einer numerischen Methode selten offensichtlich.

Natürlich weiß ich, dass der beste Weg, dies tatsächlich zu tun, darin besteht, eine Methode zu verwenden, die für solche oszillatorischen Integrale optimiert ist. Um der Neugier willen beschränke ich mich jedoch auf die Verwendung einer Quadraturregel. Kann jemand bestätigen oder widerlegen, dass diese Transformation die Genauigkeit des Integrals verbessert? Und / oder mich auf eine Quelle verweisen, die das erklärt?


1
Integriert über ... Dies ist eine der integralen Definitionen der Bessel-Funktion. 0θπ
David Z

4
So Ihre Frage: generic Gegeben -Punkt Quadraturformeln Q N [ ] auf [ 0 , ) und Q N π [ ] auf [ 0 , π ] , ist Q N M [ fNQN[][0,)QπN[][0,π] schlechter oder besser als Q M π [ Q N [ f ( x )QNM[fJ0] . QπM[QN[f(x)cos(xsinθ)]]
Stefano M

@StefanoM ja, das stimmt.
David Z

FWIW, eine der effizientesten Methoden zur Bewertung der Bessel-Funktion nullter Ordnung, ist die Trapezregel, die bekanntermaßen sehr genaue Ergebnisse liefert, wenn periodische Integranden über eine Periode integriert werden (sogar besser als die übliche Standard-Gaußsche Quadratur). Also: es könnte helfen, es könnte nicht helfen.
JM

Antworten:


3

Ich denke nicht, dass es einen Unterschied macht. Sie müssen eine ausreichend hohe Quadratur für das Integral über wählen , damit es der Bessel-Funktion J 0 entspricht . Ich habe im folgenden Beispiel die Reihenfolge 20 gewählt, aber Sie müssen immer Konvergenz in Bezug auf die exakte Funktion und das Intervall durchführen, über das Sie integrieren. Dann habe ich Konvergenz mit n gemacht , der Ordnung der Gaußschen Quadratur des Integrals über x . Ich habe f ( x ) = e - x x 2 gewählt und Domain [ 0 , x max ] verwendet . Sie können x max ändernθJ0nxf(x)=exx2[0,xmax]xmaxunten. Ich habe:

 n      direct         rewritten
 1  0.770878284949  0.770878284949
 2  0.304480978430  0.304480978430
 3  0.356922151260  0.356922151260
 4  0.362576361509  0.362576361509
 5  0.362316789057  0.362316789057
 6  0.362314010897  0.362314010897
 7  0.362314071949  0.362314071949
 8  0.362314072182  0.362314072182
 9  0.362314072179  0.362314072179
10  0.362314072179  0.362314072179

n=9

Hier ist der Code:

from scipy.integrate import fixed_quad
from scipy.special import jn
from numpy import exp, pi, sin, cos, array

def gauss(f, a, b, n):
    """Gauss quadrature"""
    return fixed_quad(f, a, b, n=n)[0]

def f(x):
    """Function f(x) to integrate"""
    return exp(-x) * x**2

xmax = 3.

print " n      direct         rewritten"
for n in range(1, 20):
    def inner(theta_array):
        return array([gauss(lambda x: f(x) * cos(x*sin(theta)), 0, xmax, n)
            for theta in theta_array])
    direct = gauss(lambda x: f(x) * jn(0, x), 0, xmax, n)
    rewritten = gauss(inner, 0, pi, 20) / pi
    print "%2d  %.12f  %.12f" % (n, direct, rewritten)

xmax[0,]f(x)rewritten = gauss(inner, 0, pi, 20) / pi


Ich vermute, Sie haben Recht, meine eigenen Tests haben ähnliche Ergebnisse gezeigt.
David Z
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.