#!/home/cbp/Documents/Python-3.4.0/python # -*- coding: utf-8 -*- """ Créé le 8 juillet 2014 @author: Matthieu """ #from __future__ import print_function #from __future__ import division from scipy.integrate import odeint import numpy as np import matplotlib.pyplot as plt # ici est l'amplification avec une valeur limitée à 15 def ampli(x): if abs(coeff*x)<15: return coeff elif x>0: return 15/x else: return -15/x # là est l'équation différentielle sous la accélération = fonction(v,x,t) def acc(v,x,t): return(-x+(ampli(x)-3)*v) # ici est l'astuce pour transformer une ED2 en 2 ED1 def oscillateur(var,t): return [acc(var[0],var[1],t),var[0]] # plage temporelle t=np.linspace(0,200,2000) ################################# ### oscillateur croissant ################################# # valeur d'amplification coeff = 3.1 # conditions initiales y0=[0,0.1] # la résolution simulation = odeint(oscillateur,y0,t) # on fait une image avec deux graphiques f, ax = plt.subplots(1,2) #ax[0].subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) ax[0].plot(t[0:900],simulation[0:900,1]) ax[0].set_title(u'évolution temporelle') ax[1].plot(simulation[0:900,1],simulation[0:900,0]) ax[1].set_title(u'portrait de phase') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) plt.show() ################################# ### oscillateur légèrement croissant ################################# # valeur d'amplification coeff = 3.02 # conditions initiales y0=[0,0.1] # la résolution simulation = odeint(oscillateur,y0,t) # on fait une image avec deux graphiques f, ax = plt.subplots(1,2) #ax[0].subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) ax[0].plot(t,simulation[:,1]) ax[0].set_title(u'évolution temporelle') ax[1].plot(simulation[:,1],simulation[:,0]) ax[1].set_title(u'portrait de phase') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) plt.show() ################################# ### oscillateur décroissant ################################# # valeur d'amplification coeff = 2.95 # conditions initiales y0=[0,6] # la résolution simulation = odeint(oscillateur,y0,t) # on fait une image avec deux graphiques f, ax = plt.subplots(1,2) #ax[0].subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) ax[0].plot(t,simulation[:,1]) ax[0].set_title(u'évolution temporelle') ax[1].plot(simulation[:,1],simulation[:,0]) ax[1].set_title(u'portrait de phase') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) plt.show() ################################# ### oscillateur très décroissant ################################# # valeur d'amplification coeff = 2.80 # conditions initiales y0=[0,6] # la résolution simulation = odeint(oscillateur,y0,t) # on fait une image avec deux graphiques f, ax = plt.subplots(1,2) #ax[0].subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) ax[0].plot(t,simulation[:,1]) ax[0].set_title(u'évolution temporelle') ax[1].plot(simulation[:,1],simulation[:,0]) ax[1].set_title(u'portrait de phase') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) plt.show() ################################# ### oscillateur constant ################################# # valeur d'amplification coeff = 3.0 # conditions initiales y0=[0,4.5] # la résolution simulation = odeint(oscillateur,y0,t) # on fait une image avec deux graphiques f, ax = plt.subplots(1,2) #ax[0].subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) ax[0].plot(t,simulation[:,1]) ax[0].set_title(u'évolution temporelle') ax[1].plot(simulation[:,1],simulation[:,0]) ax[1].set_title(u'portrait de phase') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) plt.show() ################################# ### oscillateur légèrement croissant ################################# # valeur d'amplification coeff = 3.1 # conditions initiales y0=[0,0.1] # la résolution simulation = odeint(oscillateur,y0,t) # on fait une image avec deux graphiques f, ax = plt.subplots(1,2) #ax[0].subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) ax[0].plot(t,simulation[:,1]) ax[0].set_title(u'évolution temporelle') ax[1].plot(simulation[:,1],simulation[:,0]) ax[1].set_title(u'portrait de phase') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) plt.show() ################################# ### oscillateur fortement croissant ################################# # valeur d'amplification coeff = 3.5 # conditions initiales y0=[0,0.1] # la résolution simulation = odeint(oscillateur,y0,t) # on fait une image avec deux graphiques f, ax = plt.subplots(1,2) #ax[0].subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) ax[0].plot(t,simulation[:,1]) ax[0].set_title(u'évolution temporelle') ax[1].plot(simulation[:,1],simulation[:,0]) ax[1].set_title(u'portrait de phase') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) plt.show() ################################# ### oscillateur très fortement croissant ################################# # valeur d'amplification coeff = 4 # conditions initiales y0=[0,0.1] # la résolution simulation = odeint(oscillateur,y0,t) # on fait une image avec deux graphiques f, ax = plt.subplots(1,2) #ax[0].subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) ax[0].plot(t,simulation[:,1]) ax[0].set_title(u'évolution temporelle') ax[1].plot(simulation[:,1],simulation[:,0]) ax[1].set_title(u'portrait de phase') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) plt.show()