Interpolation de Lagrange en python

J'ai appris l'interpolation de Lagrange dans une classe universitaire, donc je l'ai implémentée en Python.

Qu'est-ce que l'interpolation de fonction?

L'interpolation de fonction consiste à dériver une fonction concaténée qui les relie à partir des points obtenus discrètement. [Discret] img1
【Continu】 img2

Qu'est-ce que la méthode d'interpolation de Lagrange?

Lorsque les valeurs de xj et f (xj) sont définies comme des points de données connus pour j = 0,1,2… n

l_j(x) = \frac{(x-x_0)(x-x_1)…(x-x_{j-1})(x-x_{j+1})…(x-x_n)}{(x_j-x_0)(x_j-x_1)…(x_j-x_{j-1})(x_j-x_{j+1})…(x_j-x_n)}\\  
P_n(x) = \sum_{j=0}^{n}f(x_j)l_j(x)

Ce sera comme ça. Le point important est de sauter le jth lors de la recherche de lj (x). (Parce que ce sera 0)

Méthode d'interpolation de Lagrange en Python

Ce sera comme suit.

Lagrange.py


import numpy as np
import matplotlib.pyplot as plt

def lagurange(x,xp,fx):
    results = [];
    for l in range(len(x)):
        if(x[l] in xp):
            results.append(fx[np.where(xp==x[l])])
        else:
            result=0
            for j in range(len(xp)):
                lag = lx(x[l],j,xp)
                result += fx[j]*lag
            results.append(result)
    return results

def lx(x,j,xp):
    numerator,denominator = 1,1
    for i in range(len(xp)):
        if(i!=j):
            numerator *= x-xp[i]
            denominator *= xp[j]-xp[i]
    return numerator/denominator

def main():
    xp = np.arange(-10,10,3)
    fx = xp**3
    x = np.floor(np.arange(-10,10,0.1)*10)/10
    y = lagurange(x,xp,fx)
    plt.plot(x,y)
    plt.plot(xp,fx,"o")
    plt.show()

if __name__ == '__main__':
    main()

Je pense qu'il y a une manière d'écrire plus efficace car je l'ai implémentée telle quelle sans penser à quoi que ce soit primitivement. Dans ce programme, x de la fonction y = x ^ 3 est connu sous le nom de données en 3 incréments, et l'interpolation de Lagrange est effectuée dans la plage de x = -10 à 10 par incréments de 0,1.

Points de données connus img4
Après interpolation de Lagrange img5
Vous avez une approximation solide de y = x ^ 3.

Recommended Posts

Interpolation de Lagrange en python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
SendKeys en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Liste triée en Python
AtCoder # 36 quotidien avec Python
Texte de cluster en Python
AtCoder # 2 tous les jours avec Python
Daily AtCoder # 32 en Python
Daily AtCoder # 6 en Python
Daily AtCoder # 18 en Python
Modifier les polices en Python
Motif singleton en Python
Opérations sur les fichiers en Python
Lire DXF avec python
Daily AtCoder # 53 en Python
Séquence de touches en Python
Utilisez config.ini avec Python
Daily AtCoder # 33 en Python
Résoudre ABC168D en Python
Distribution logistique en Python
AtCoder # 7 tous les jours avec Python
Décomposition LU en Python
GRPC simple en Python
AtCoder # 24 tous les jours avec Python