Étude en boucle ouverte

Question

Écrire une fonction \(\tt{liste\_temps(pas,tmax)}\) renvoyant une liste des abscisses en temps à partir du \(\tt pas\) (intervalle entre deux abscisses) et de \(\tt tmax\) (borne supérieure des temps). On pourra aussi simplement utiliser un vecteur avec la fonction de numpy arange.

On prendra \(pas=0,1s\) et \(t_{max}=10s\)

Solution

1
def liste_temps(tmax,pas):
2
    temps =np.arange(0,tmax,pas)
3
    return (temps)

Question

Écrire une fonction \(\tt ordre1\_euler(u,temps)\) renvoyant une liste d'ordonnées correspondant à la résolution par la méthode d’Euler explicite de l'équation différentielle soumise à une entrée constante \(\tt u\) et pour une liste d'abscisses \(\tt temps\) fournie.

Solution

1
def ordre1_euler(u,temps):
2
    s=0
3
    sortie=[0]
4
    for i in range(1,len(temps)):
5
        f=(K_c*u-s)/tau
6
        s=s+f*(temps[i]-temps[i-1])
7
        sortie=sortie + [s]
8
    return sortie

La solution analytique de l'équation différentielle soumise à une entrée constante s'écrit : \(v(t) = K_c U_{mot}\left(1 - exp\left(-t/\tau_c\right)\right)\)

Question

Tracer sur un même graphe la solution analytique ainsi que la solution approchée par la méthode d'Euler pour des pas de [0.1,0.3,0.5,0.7,1].

Indice

On écrira une fonction \(\tt ordre1\_th(u,temps)\)

Puis on utilisera les listes :

1
marqueurs = ['^', '+', '.', 'x', '*'] #Les marqueurs
2
couleurs = ['b', 'g', 'r', 'c', 'm'] #Les couleurs
3
liste-pas=[0.1,0.3,0.5,0.7,1]

dans une boucle pour tracer les différentes solutions en fonction du temps.

Solution

1
#Tracé reponse theorique
2
x=liste_temps(tmax,0.1)
3
z=ordre1_th(U_mot,x)
4
plt.plot(x,z)
5
6
7
#Tracé superposé pour différents pas de temps
8
marqueurs = ['^', '+', '.', 'x', '*'] #Les marqueurs
9
couleurs = ['b', 'g', 'r', 'c', 'm'] #Les couleurs
10
style = ['-', '--', '-.', ':','*']
11
liste_pas=[0.1,0.3,0.5,0.7,1]
12
k=0
13
for i in liste_pas:
14
    x=liste_temps(tmax,i)
15
    y=ordre1_euler(U_mot,x)
16
    plt.plot(x,y,'--',color=couleurs[k],marker=marqueurs[k])
17
    k=k+1
18
#Affichage superpose des courbes
19
plt.show()