Ich bin vor kurzem auf ein merkwürdiges Problem bezüglich der scipy.special.legendre()
(scipy documentation) gestoßen. Die Legenden-Polynome sollten paarweise orthogonal sein. Wenn ich sie jedoch über einen Bereich x=[-1,1]
berechne und das Skalarprodukt von zwei Polynomen unterschiedlichen Grades erstelle, werde ich nicht immer Null oder Werte nahe Null erhalten. Interpretiere ich das Funktionsverhalten falsch? Im Folgenden möchte ich ein kurzes Beispiel geschrieben haben, die das Skalarprodukt bestimmte Paare von Legendre-Polynome erzeugt:Orthogonalitätsproblem in Scipys legendre Polynomen
from __future__ import print_function, division
import numpy as np
from scipy import special
import matplotlib.pyplot as plt
# create range for evaluation
x = np.linspace(-1,1, 500)
degrees = 6
lp_array = np.empty((degrees, len(x)))
for n in np.arange(degrees):
LP = special.legendre(n)(x)
# alternatively:
# LP = special.eval_legendre(n, x)
lp_array[n, ] = LP
plt.plot(x, LP, label=r"$P_{}(x)$".format(n))
plt.grid()
plt.gca().set_ylim([-1.1, 1.1])
plt.legend(fontsize=9, loc="lower right")
plt.show()
Die Handlung der einzelnen Polynome fein tatsächlich aussieht:
Aber wenn ich berechnen manuell die Skalarprodukte - multiplizieren zwei Legendre-Polynome verschiedenen Grade element und sUM sie (die 500 für die Normalisierung ist) ...
for i in range(degrees):
print("0vs{}: {:+.6e}".format(i, sum(lp_array[0]*lp_array[i])/500))
... I erhalten Sie die folgenden Werte als Ausgabe:
0vs0: +1.000000e+00
0vs1: -5.906386e-17
0vs2: +2.004008e-03
0vs3: -9.903189e-17
0vs4: +2.013360e-03
0vs5: -1.367795e-16
Das Skalarprodukt des ersten Polynom mit sich selbst gleich ein (wie zu erwarten), und die Hälfte der anderen Ergebnisse sind fast Null, aber es gibt einige Werte in der Bestellung von 10e-3
und ich habe keine Ahnung warum. Ich versuchte auch die scipy.special.eval_legendre(n, x)
Funktion - das gleiche Ergebnis: - \
Ist das ein Fehler in der scipy.special.legendre()
Funktion? Oder mache ich etwas falsch? Ich bin auf der Suche nach konstruktiven antwortet :-)
prost, Markus
danke für die Integration des Bildes :-) – Markus
Hmm, ok. Ich verstehe nicht wirklich, warum mein Ansatz nicht richtig funktioniert, aber ja, es macht definitiv Sinn, das Polynomprodukt zu integrieren. Danke für diesen Punkt. – Markus
Ihr Integrationsansatz ist nicht exakt. '10^{- 3} ~ 1/500' ist die Größenordnung des Fehlers, den Sie mit 500 Punkten erwarten würden. –