Bonjour à tous ,
Nous cherchons à trouver par la méthode des moindres carrés les constantes a0, a1, a2, b1, b2,c1 de la fonction suivante:
FF=a0 + a1 * altitude+ a2 * altitude**2+ b1 * FN + b2 * FN+ c1 * altitude * FN
où par exemple nous aurions les vecteurs suivants (ces valeurs ne sont pas significatives, nous vous les donnons comme ça juste pour comprendre la méthode):
FN=[1,3,5,4,2,6]
altitude=[100,201,540,200,144,100]
Nous avons alors codé ce que vous trouvez ci-dessous, mais le résultat obtenu n'est vraiment pas cohérent: les valeurs de a0 et a1 sont toujours identiques (= à 1), puis l'ordre de grandeur de a2 varie de 10^(-2) à 10^4.. Nous avons clairement fait une grosse erreur quelque part, mais nous ne savons pas où: seriez-vous en mesure de nous aider ?
Pour information, nous avons utilisé cette documentation là pour la fonction leastsq :
http://docs.scipy.org/doc/scipy/refe.../optimize.html
Merci beaucoup !
' Calcul FF'
for i in range (0,6):
fuelflow[i] = FN[i] * SFC[i]
print (fuelflow)
'Estimation de l\'equation FF en fonction de ps et la poussée nécessaire Tn'
a0,a1,a2,b1,b2,c1= 1,1,1,1,1,1
for i in range (0,6):
FF_true[i]=a0 + a1 * altitude[i] + a2 * altitude[i]**2+ b1 * FN[i] + b2 * FN[i] + c1 * altitude[i] * FN[i]
FF_measured[i] = FF_true[i] + 2*random.randn(6)[i]
def residuals(p,fuelflow,altitude,FN):
a0,a1,a2,b1,b2,c1 = p
for i in range (0,6):
err[i] = fuelflow[i] - (a0 + a1 * altitude + a2 * altitude[i]**2 + b1 * FN + b2 * FN[i]**2+ c1 * altitude[i]*FN[i] )
return err[i]
'''
def peval (FN,altitude,p):
for i in range (0,6):
calcul[i]= p[0] + p[1] * altitude[i] + p[2] * altitude[i]**2 + p[3] * FN[i] + p[4] * FN[i]**2 + p[5] * altitude[i] * FN[i]
return calcul
'''
p0 = [1,1,1,1,1,1]
from scipy.optimize import leastsq
plsq = leastsq(residuals,p0,args=(FF_measured,FN,altitude))
print (plsq)
for i in range (0,6):
FuelFlow_estime[i] = a0 + a1 * altitude[i] + a2 * altitude[i]**2+ b1 * FN[i] + b2 * FN[i] + c1 * altitude[i] * FN[i]
print (FuelFlow_estime)
Partager