$ M $ courbe en degrés $ y = a_mx ^ m + a_ {m-1} x ^ {en passant $ n $ points $ (x_1, y_1), \ cdots, (x_n, y_n) $ sur le plan bidimensionnel Je veux trouver le coefficient $ a_0, \ dots, a_m $ de m-1} + \ cdots + a_1x + a_0 $. Si $ n \ le m + 1 $ et les valeurs de $ x_1, \ cdots, x_n $ sont toutes différentes, il y a une courbe qui passe par tous les points, sinon il y a un coefficient qui minimise l'erreur entre les points et la courbe. Besoin de prendre. A ce moment, il semble que la méthode fmin de scipy puisse être utilisée. Cependant, notez que la fonction fmin peut ne pas être la solution optimale car elle trouve la solution optimale locale de la fonction objectif.
import numpy as np
from scipy.optimize import fmin
def f(a, x):
#Courbe cubique
return a[0] + a[1]*x + a[2]*x**2 + a[3]*x**3
def obj_func(a,x,y):
#La fonction objectif est la somme des erreurs quadratiques du sommet et de la courbe.
return sum((f(a,x) - y)**2)
#Donner 5 points
x = np.array([ -8., -3., 2., 6., 9.])
y = np.array([ 30., -22., 15., -17., -25.])
#Valeur initiale du coefficient
a= np.array([ 0., 0., 0., 0.])
#Trouvez le coefficient optimal
opt = fmin(obj_func, a, args=(x,y))
print(opt)
# [-8.20775435 3.2028276 0.2150416 -0.09395258]
Recommended Posts