diff --git a/module3/exo3/exercice_python_fr.org b/module3/exo3/exercice_python_fr.org index 4c09a1a1b07863a8e4554945a348aa6da4c7ae63..013d0c8edfe343487a6126e52cc20eb9b3e850af 100644 --- a/module3/exo3/exercice_python_fr.org +++ b/module3/exo3/exercice_python_fr.org @@ -134,9 +134,10 @@ les oscillations rapides observés précédément. #+RESULTS: [[file:zoomRawData.png]] -Sur cette figure on met plus en évidence les oscillations rapides sur +Sur cette figure on met plus en évidence le phénomène périodique sur le niveau de concentration de CO2. D'après la figure, dans un premier -temps supposer que les oscillations ont une période de un ans. +temps supposer que les oscillations ont une période de un an et une +amplitude entre cinq et sept. * Analyse fréquentielle de la variation de la concentration de CO2. #+begin_src python :results file :session :var matplot_lib_filename="dataFFT.png" :exports both @@ -225,7 +226,9 @@ précédemment. #+RESULTS: [[file:smallOsillations.png]] -** Reconstruction du signal : petites oscillations +** Reconstruction du du phénomène périodique +L'objectif est de déterminer l'amplitude des oscillations en prenant +en compte toutes les mesures. #+begin_src python :results file :session :var matplot_lib_filename="smallOsillationsTime.png" :exports both smallFreqSignal = smallNorm*np.exp(1j*concentrationFFTAngle) @@ -244,7 +247,6 @@ précédemment. [[file:smallOsillationsTime.png]] - #+begin_src python :results file :session :var matplot_lib_filename="smallOsillationsTimeZoom.png" :exports both plt.figure(figsize=(10,5)) plt.plot(t,smallSignal) @@ -324,5 +326,58 @@ signal périodique avec \(t\) en semaine on a : s_p(t) = 5 \cos (0.02 t) \end{equation} +** Contribution lente du signal +L'analyse fréquentielle nous a pas permis d'avoir plus d'information +quant à la contribution lente du signal. Cependant si l'on regarde +l'allure générale des données peut supposer dans un premier temps que +le concentration de CO2 varie de façon quadratique par rapport au +temps. Donc on va modéliser cette contribution lente par un polynôme +d'ordre deux \( y(t) = at^2 +bt +c \). On utilisera un outil de /curve +fitting/ pour caractériser ce polynôme. + +Compte tenu de la modélisation du phénomène périodique, celui-ci +possède une valeur moyenne nulle. Or les outils de /curve fitting/ +calculent la norme deux de l'erreur entre le modèle et les données, +donc il est inutile de filtrer les données brute pour tenter d'enlever +le phénomène périodique pour caractériser la contribution lente. + +Dans un premier temps on définit une fonction de notre modèle pour la +contribution lente + +#+begin_src python :results silent :session :exports both + def slowContributionModel(t,a,b,c): + return a*t*t + b*t + c +#+end_src + +Puis l'on utilise le module =scipy= plus spécifiquement le module +=scipy.optimize= pour déterminer les paramètres de notre modèle. + +#+begin_src python :results output :session :exports both + from scipy import optimize + params, params_covariance = optimize.curve_fit(slowContributionModel,t,co2, p0=[1, 1, 1]) + print("Parameters :\t",params) + print("Parameters covariance :\t", params_covariance) +#+end_src + +#+RESULTS: +: Parameters : [4.83379437e-06 1.54227807e-02 3.15061312e+02] +: Parameters covariance : [[ 2.85416803e-15 -9.05056674e-12 4.78171606e-09] +: [-9.05056674e-12 3.06138429e-08 -1.81982548e-05] +: [ 4.78171606e-09 -1.81982548e-05 1.44289419e-02]] + +Finalement on compare le modèle obtenu avec les données des mesures : +#+begin_src python :results file :session :var matplot_lib_filename="modelBigOsillations.png" :exports both + co2Model = slowContributionModel(t,params[0], params[1], params[2]) + plt.figure(figsize=(10,5)) + plt.plot(t,co2,label="Measures") + plt.plot(t,co2Model,label="Model") + plt.legend() + plt.tight_layout() + + plt.savefig(matplot_lib_filename) + matplot_lib_filename +#+end_src +#+RESULTS: +[[file:modelBigOsillations.png]]