나는 최근 scipy.special.legendre()
(scipy documentation)과 관련된 호기심 문제를 접했습니다. legendre 다항식은 쌍으로 직교해야합니다. 그러나, 범위 x=[-1,1]
이상의 그들을 계산하고 내가 항상 제로 또는 0에 가까운 값을 얻을하지 않는 정도의 두 다항식의 스칼라 제품을 빌드 할 때. 함수 동작을 잘못 해석합니까? 의 I는 르장 드르 다항식의 특정 쌍 스칼라 제품을 생산하는 간단한 예제를 작성한 다음에 : scipy의 legendre 다항식의 직교성 문제
하지만 계산의 경우 : 하나의 다항식의 음모가 실제로 잘 보이는
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()
스칼라 제품은 수동 - ... 다른 학위 elementwise 두 르장 드르 다항식을 곱 (500 정상화위한 것입니다)을 요약
for i in range(degrees):
print("0vs{}: {:+.6e}".format(i, sum(lp_array[0]*lp_array[i])/500))
... I 출력으로서 다음 값을 얻을 :
0vs0: +1.000000e+00
0vs1: -5.906386e-17
0vs2: +2.004008e-03
0vs3: -9.903189e-17
0vs4: +2.013360e-03
0vs5: -1.367795e-16
자체 제 다항식의 내적은 (예상 할 수있는 바와 같이), 반 다른 결과와 동일 하나 거의 제로가 있지만, 어떤 값이에 존재 10e-3
의 순서와 나는 이유를 모른다. 나는 또한 scipy.special.eval_legendre(n, x)
기능을 시도했다 - 동일한 결과 : -
이것은 scipy.special.legendre()
기능의 버그입니까? 아니면 내가 잘못 했니? 나는 당신이-정확한 통합 수행하고 있기 때문에, 마르쿠스
이미지를 통합 해 주셔서 감사합니다 .-) – Markus
흠. 내 접근 방식이 올바르게 작동하지 않는 이유를 실제로 이해하지는 못하지만 그래, 다항식 제품을 통합하는 것이 맞습니다. 이 점에 감사드립니다. – Markus
통합 방법이 정확하지 않습니다. '10^{- 3} ~ 1/500'은 500 포인트로 예상되는 오차의 크기입니다. –