$ M $ Gradkurve $ y = a_mx ^ m + a_ {m-1} x ^ {Übergeben von $ n $ Punkten $ (x_1, y_1), \ cdots, (x_n, y_n) $ auf der zweidimensionalen Ebene Ich möchte den Koeffizienten $ a_0, \ dots, a_m $ von m-1} + \ cdots + a_1x + a_0 $ finden. Wenn $ n \ le m + 1 $ und die Werte von $ x_1, \ cdots, x_n $ unterschiedlich sind, gibt es eine Kurve, die durch alle Punkte verläuft, andernfalls gibt es einen Koeffizienten, der den Fehler zwischen den Punkten und der Kurve minimiert. Muss nehmen. Zu diesem Zeitpunkt scheint es, dass die fmin-Methode von scipy verwendet werden kann. Beachten Sie jedoch, dass die fmin-Funktion möglicherweise nicht die optimale Lösung ist, da sie die lokale optimale Lösung der Zielfunktion findet.
import numpy as np
from scipy.optimize import fmin
def f(a, x):
#Kubische Kurve
return a[0] + a[1]*x + a[2]*x**2 + a[3]*x**3
def obj_func(a,x,y):
#Die Zielfunktion ist die Summe der quadratischen Fehler des Scheitelpunkts und der Kurve.
return sum((f(a,x) - y)**2)
#Gib 5 Punkte
x = np.array([ -8., -3., 2., 6., 9.])
y = np.array([ 30., -22., 15., -17., -25.])
#Anfangswert des Koeffizienten
a= np.array([ 0., 0., 0., 0.])
#Finden Sie den optimalen Koeffizienten
opt = fmin(obj_func, a, args=(x,y))
print(opt)
# [-8.20775435 3.2028276 0.2150416 -0.09395258]
Recommended Posts