Предполагается, что моя программа рассчитывает приближение Гаусса-Лежандра, а также приближение Гаусса-Чебышева для данной функции. Ошибка, которая возникает, заключается в том, что максимальная глубина рекурсии превышена в частях pol + =. И как относительный новичок, я не вижу, как рекурсия может go бесконечна здесь.
import math
from scipy import integrate
import copy
def Legendre(k):
if k==0:
return lambda x:1
elif k==1:
return lambda x: x
else:
return lambda x: x* Legendre(k-1)(x) - (k**2)/(4*k**2 -1) *Legendre(k-2)(x)
def gauss_legendre(func,n):
pol= lambda x:0
for i in range(0,n):
normlagr= lambda x:integrate.quad(Legendre(i)(x)**2,-1,1)
scalarprod= lambda x: integrate.quad(Legendre(i)(x)*func(x))
pol= lambda x: pol(x)+ 1/normlagr(x) * scalarprod(x) *Legendre(i)(x)
return pol
def Tschebyschew(k):
if k==0:
return lambda x:1
elif k==1:
return lambda x: x
else:
return lambda x: x*Tschebyschew(k-1)(x) -1/4*Tschebyschew(k-2)(x)
def gauss_tschebyschew(func,n):
omega=lambda x: 1/(math.sqrt(1-x**2))
pol= lambda x:integrate.quad(func(x)*omega(x),-1,1)[1]
for i in range (1,n):
toint=lambda x:func(x)*Tschebyschew(i)(x)*omega(x)
constant =lambda x: 2/math.pi *integrate.quad(toint,-1,1)[1]
addendum= lambda x :constant(x) *Tschebyschew(i)(x)
pol=lambda x: pol(x)+addendum(x)
return pol
f=lambda x:x**7
print(gauss_legendre(f,5)(2))
print(gauss_tschebyschew(f,5)(2))