#!/bin/env python # -*- coding: utf-8 -*- # pour les graphiques import matplotlib.pyplot as plt # pour les fonctions mathématiques sur les vecteurs import numpy as np # pour la fonction curve_fit from scipy.optimize import curve_fit # on définit la fonction à fitter # en premier paramètre on doit avoir la variable # puis les valeurs à optimiser def func(x , a , b, c ): return a*np.exp(b*x) + c # 50 points entre 0 et 4 x = np. linspace (0 ,4 ,50) # on calcule 50 points de la fonction pour # a=2.5 , b=1.3 et c=0.5 # curve_fit devrait donc retrouver quasiment ces valeurs. y = func(x , 2.5 , 1.3 , 0.5) # on génère des points de mesures (xn,yn) légèrement éronés # autour des points théoriques (x,y) yn = y + 0.1*np.random.normal( size=len (x )) xn = x + 0.1*np.random.normal( size=len (x )) # on fitte en donnant la forme de la fonction et les points de mesures popt , pcov = curve_fit (func , xn , yn) (a,b,c) = popt print('a=',a,'b=',b,'c=',c) #en général on retrouve bien b (c'est le paramètre le plus sensible ici) # et moins bien a et c # pcov est la matrice des covariances qui permet de mesurer la qualité # de l'approximation print(pcov) # recalcule les points avec les valeurs a,b,c fittées yopt=func(x,a,b,c) plt.plot(x,y) # données théoriques plt.plot(xn,yn,'d') # valeurs 'mesurées' plt.plot(x,yopt,'r') # valeurs fittées mini = min(yn) plt.axis([0,4,mini*1.1,500]) plt.show()