Программа о интерполяции легенд / чебычев, дающая ошибку рекурсии - PullRequest
0 голосов
/ 20 января 2020

Предполагается, что моя программа рассчитывает приближение Гаусса-Лежандра, а также приближение Гаусса-Чебышева для данной функции. Ошибка, которая возникает, заключается в том, что максимальная глубина рекурсии превышена в частях 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...