roots_legendre#
- scipy.special.roots_legendre(n, mu=False)[Quelle]#
Gauß-Legendre-Quadratur.
Berechnet die Abtastpunkte und Gewichte für die Gauß-Legendre-Quadratur [GL]. Die Abtastpunkte sind die Wurzeln des Legendre-Polynoms vom Grad n \(P_n(x)\). Diese Abtastpunkte und Gewichte integrieren Polynome vom Grad \(2n - 1\) oder weniger über das Intervall \([-1, 1]\) mit der Gewichtungsfunktion \(w(x) = 1\) korrekt. Weitere Details finden Sie unter 2.2.10 in [AS].
- Parameter:
- nint
Ordnung der Quadratur
- mubool, optional
Wenn True, wird die Summe der Gewichte zurückgegeben, optional.
- Rückgabe:
- xndarray
Abtastpunkte
- wndarray
Gewichte
- mufloat
Summe der Gewichte
Referenzen
[AS]Milton Abramowitz und Irene A. Stegun, Hrsg. Handbook of Mathematical Functions with Formulas, Graphs, and Mathematical Tables. New York: Dover, 1972.
[GL] (1,2)Gauß-Legendre-Quadratur, Wikipedia, https://en.wikipedia.org/wiki/Gauss%E2%80%93Legendre_quadrature
Beispiele
>>> import numpy as np >>> from scipy.special import roots_legendre, eval_legendre >>> roots, weights = roots_legendre(9)
rootsenthält die Wurzeln undweightsenthält die Gewichte für die Gauß-Legendre-Quadratur.>>> roots array([-0.96816024, -0.83603111, -0.61337143, -0.32425342, 0. , 0.32425342, 0.61337143, 0.83603111, 0.96816024]) >>> weights array([0.08127439, 0.18064816, 0.2606107 , 0.31234708, 0.33023936, 0.31234708, 0.2606107 , 0.18064816, 0.08127439])
Überprüfen Sie, ob wir die Wurzeln haben, indem Sie das Legendre-Polynom vom Grad 9 an den Punkten
rootsauswerten. Alle Werte sind ungefähr Null.>>> eval_legendre(9, roots) array([-8.88178420e-16, -2.22044605e-16, 1.11022302e-16, 1.11022302e-16, 0.00000000e+00, -5.55111512e-17, -1.94289029e-16, 1.38777878e-16, -8.32667268e-17])
Hier zeigen wir, wie die obigen Werte verwendet werden können, um das Integral von 1 bis 2 von f(t) = t + 1/t mit der Gauß-Legendre-Quadratur [GL] abzuschätzen. Definieren Sie zuerst die Funktion und die Integrationsgrenzen.
>>> def f(t): ... return t + 1/t ... >>> a = 1 >>> b = 2
Wir verwenden
integral(f(t), t=a, t=b), um das bestimmte Integral von f von t=a bis t=b zu bezeichnen. Die Abtastpunkte inrootsstammen aus dem Intervall [-1, 1], daher werden wir das Integral mit der einfachen Variablenänderung umschreibenx = 2/(b - a) * t - (a + b)/(b - a)
mit der Umkehrung
t = (b - a)/2 * x + (a + b)/2
Dann
integral(f(t), a, b) = (b - a)/2 * integral(f((b-a)/2*x + (a+b)/2), x=-1, x=1)
Wir können das letztere Integral mit den von
roots_legendrezurückgegebenen Werten approximieren.Ordnen Sie die oben berechneten Wurzeln von [-1, 1] auf [a, b] ab.
>>> t = (b - a)/2 * roots + (a + b)/2
Approximieren Sie das Integral als gewichtete Summe der Funktionswerte.
>>> (b - a)/2 * f(t).dot(weights) 2.1931471805599276
Vergleichen Sie das mit dem exakten Ergebnis, das 3/2 + log(2) ist.
>>> 1.5 + np.log(2) 2.1931471805599454