Interpolation de Lagrange en Python
Je veux interpoler un polynôme avec la méthode de Lagrange, mais ce code ne fonctionne pas:
def interpolate(x_values, y_values):
def _basis(j):
p = [(x - x_values[m])/(x_values[j] - x_values[m]) for m in xrange(k + 1) if m != j]
return reduce(operator.mul, p)
assert len(x_values) != 0 and (len(x_values) == len(y_values)), 'x and y cannot be empty and must have the same length'
k = len(x_values)
return sum(_basis(j) for j in xrange(k))
J'ai suivi Wikipédia, mais quand je le lance j'ai un message d'IndexError à la ligne 3!
Grâce
Je vous serais reconnaissant si la downvoters expliquerait le downvote...
OriginalL'auteur rubik | 2010-10-23
Vous devez vous connecter pour publier un commentaire.
Vérifier les indices, Wikipedia dit: "k+1 points de données", mais de la configuration de
k = len(x_values)
où il devrait êtrek = len(x_values) - 1
si vous avez suivi la formule exactement.Ok, et pourquoi, si je fais:
interpolate([1, 2, 3], [1, 4, 9])
il retourne-0.5x^2 + 1.5x
? Jetez un oeil à ceci: i.imgur.com/MkATz.gifDésolé, mais je ne peux pas vous aider avec un problème spécifique sans connaître l'algorithme d'interpolation (et je ne vais pas la lire). Vérifier votre logique à nouveau ou de rechercher une mise en œuvre. Si vous publiez plus de code sur la manière d'appliquer l'interpolation (par exemple, la définition/valeur initiale de
x
est manquant dans votre question), alors quelqu'un pourrait être en mesure de vous aider.Je suis en utilisant pypol (pypol.altervista.org) et x est monomial(x=1) (pypol.altervista.org/functions.html#pypol.monomial)
OriginalL'auteur AndiDog
Essayer
Vous pouvez le confirmer comme suit:
De sorte que le résultat est la valeur interpolée basé sur le polynôme qui passe par les points donnés. Dans ce cas, les 3 points de définir une parabole et les 3 premiers tests montrent que l'a déclaré y_value est retourné pour le x_value.
OriginalL'auteur smichr