Derivadas de polinomios de Lagrange

Parece que hay alguna relación entre el polinomio de Lagrange y el polinomio de Legendre. Es decir, el polinomio de Lagrange se puede expresar como una función del polinomio de Legendre. Si es así, podría usar esta relación para codificar en Matlab. He estado buscando la relacion por mucho tiempo pero no la encontre.

Mi pregunta es: ¿alguien podría decirme la relación entre el polinomio de Lagrange y el de Legendre?

Estoy tratando de codificar en Matlab para calcular cualquier derivado de orden del polinomio de Lagrange. Sé cómo calcular la primera derivada como aquí . Pero este método necesita alrededor de N bucles FOR para calcular la N-ésima derivada.

¡Gracias a todos!

Respuestas (1)

Puede encontrar los coeficientes del polinomio de interpolación de Lagrange o cualquiera de sus derivados con relativa facilidad si utiliza una forma matricial de la interpolación de Lagrange presentada en " Guía para principiantes para mapear símplexes afines ", sección "Interpolación de Lagrange". La fórmula general para el polinomio se ve de la siguiente manera

F ( X ) = ( 1 ) det ( 0 F 0 F 1 F norte X norte X 0 norte X 1 norte X norte norte X norte 1 X 0 norte 1 X 1 norte 1 X norte norte 1 X X 0 X 1 X norte 1 1 1 1 ) det ( X 0 norte X 1 norte X norte norte X 0 norte 1 X 1 norte 1 X norte norte 1 X 0 X 1 X norte 1 1 1 ) .
Aquí ( X 0 ; F 0 ) , , ( X norte ; F norte ) son los puntos por los que pasa. Usando la expansión de Laplace a lo largo de la primera columna, puede obtener expresiones para los coeficientes en X i .

DERIVADO

Si derivamos la expresión anterior, solo actuará sobre la primera columna de la matriz en el numerador (la única que contiene X 's). Uno puede probar esto expandiendo el determinante en el numerador a lo largo de la primera columna, tomando la derivada y luego recogiendo todo. Como resultado, la primera derivada queda de la siguiente manera

F ( X ) = ( 1 ) det ( 0 F 0 F 1 F norte norte X norte 1 X 0 norte X 1 norte X norte norte ( norte 1 ) X norte 2 X 0 norte 1 X 1 norte 1 X norte norte 1 1 X 0 X 1 X norte 0 1 1 1 ) det ( X 0 norte X 1 norte X norte norte X 0 norte 1 X 1 norte 1 X norte norte 1 X 0 X 1 X norte 1 1 1 ) .
Las derivadas de orden superior se pueden calcular de la misma manera --- cambias la primera columna apropiadamente, todo lo demás permanece.

CÓDIGO

Me temo que no conozco Matlab lo suficiente como para brindarle el código apropiado, pero trabajé un poco con Python, tal vez lo siguiente pueda ayudar (perdón por el estilo de código incorrecto: soy matemático, no programador)

import numpy as np
# input
x = [0, 2, 4, 5]  # <- x's
y = [2, 5, 7, 7]  # <- y's
# calculating coefficients
M = [[_x**i*(-1)**(i*len(x)) for _x in x] for i in range(len(x))]
C = [np.linalg.det((M+[y]+M)[d:d+len(x)]) for d in range(len(x)+1)]
C = (C / C[0] * (-1)**(len(x)+1) )[1:]
# polynomial lambda-function
poly = lambda _x: sum([C[i] * _x**i for i in range(len(x))])
# output and tests
print("Coefficients:\n", C)
print("TESTING:")
for _x, _y in zip(x, y):
    result = "[OK]" if np.allclose(_y, poly(_x)) else "[ERROR]"
    print(_x, " mapped to: ", poly(_x), " ; expected: ", _y, result)

Este código calcula los coeficientes del polinomio de interpolación de Lagrange, los imprime y prueba que las x dadas se asignan a las y esperadas. Puede probar este código con Google colab , por lo que no tiene que instalar nada. Probablemente, puede traducirlo a Matlab y modificarlo para que calcule derivadas (multiplique cada sumando por la constante apropiada y modifique las potencias de X respectivamente).