Circuit RL
Description du problème et étude préliminaire
On étudie le dispositif illustré par la figure suivante : un circuit RL alimenté par une source de tension continue E via un interrupteur. On ferme l'interrupteur à l'instant \(t=0\), et on cherche à calculer l'établissement du courant dans le circuit (et donc la tension au bornes de la résistance).
Les valeurs numériques des différentes grandeurs sont :
E = 200 V
L = 10 mH
R = 10 Ω
Question
Donner l'équation différentielle à laquelle obéit le courant, et sa condition initiale.
Indice
On pourra utiliser la loi des mailles et se rappeler la tension aux bornes d'une inductance : \(v_L(t) = L\,\frac{d\,i}{dt}\).
Solution
Pour \(t\geq 0\), \(E = R\,i(t) + L\,\frac{d\,i(t)}{dt}\)
Initialement, le circuit est ouvert : \(i(0) = 0\)
Question
Implantation sous Matlab ou Octave
Dans la suite, nous allons utiliser un des deux logiciels pour tracer cette solution analytique. Ouvrez celui que vous avez choisi et enregistrez un nouveau script (on l’appellera par exemple CircuitRL.m)
Pour commencer le script, on procède à un petit nettoyage après un en-tête rapide (les "%" permettent d'ajouter des commentaires) :
% Fichier CircuitRL.m correspondant au 1er exercice du TP% Circuit RL soumis a un echelon de tensionclear % Nettoyage du Workspace
close all % Fermeture des fenetres restees ouvertes
clc % Nettoyage du terminal de commande
On définit ensuite les grandeurs du problème (les ";" clôturent l'instruction courante et évitent un affichage dans le terminal de commande) :
L = 100e-3; % H
R = 10; % Ohm
E = 200; % V (~ 2*sqrt(2)/pi*230)
t_ini = 0; % instant initial
t_fin = 10*L/R; % instant final = 10 fois la constante de temps
Nous devons ensuite définir 2 vecteurs pour pouvoir tracer la solution analytique :
celui contenant les valeurs de temps (t_ana) ;
celui contenant les valeurs de courant correspondantes (i_ana). On utilisera la notation vectorielle pour simplifier l'écriture, d'où le ".*" devant "t_ana" pour effectuer une opération terme à terme.
npoints_ana = 10000; % nombre de points utilisés pour le trace
t_ana = t_ini:(t_fin-t_ini)/(npoints_ana-1):t_fin; % vecteur de temps
i_ana = E/R*(1-exp(-R/L.*t_ana)); % valeurs de courant correspondantes
On crée ensuite une figure pour le tracé de i_ana en fonction de t_ana :
figure(1) % nouvelle figure 1
plot(t_ana,i_ana,'b-','LineWidth',2) % trace avec une ligne d'epaisseur 2
grid on % affiche la grille
xlabel('Temps (en sec)') % label des abscisses
ylabel('Courant (en A)') % label des ordonnees
title('Solution analytique') % titre de la figure
axis([t_ini, t_fin, 0, round(max(i_ana))+1]) % echelle des axes
Question
Mettre le problème sous forme résolue et implanter la méthode d'Euler dans le fichier *.m pour calculer les vecteurs t_euler et i_euler contenant les résultats correspondants.
Solution
Forme résolue
On a : \(i'(t) = f(t,i)\) et \(i(0) = 0\) avec :
\(f(t,i) = -\frac{R}{L}\,i +\frac{E}{L}\)
Implantation
On programme l'algorithme de la méthode d'Euler : cliquez ici pour rappel[1].
On commence par définir la fonction donnant l'équation différentielle et la condition initiale :
f = @(t,i) -R/L*i + E/L; % fonction de t et de i definissant l'equa. diff.
i0 = 0; % condition initiale
On implante directement l'algorithme (il faut juste penser à un décalage d'indice car Matlab ou Octave ne peuvent que commencer à 1) :
n = 20; % nombre de pas de calcul
h = (t_fin-t_ini)/n;
% initialisation t_euler = zeros(1,n+1);
i_euler = zeros(1,n+1);
t_euler(1) = t_ini; % condition initiale (sur t)
i_euler(1) = i0; % condition initiale (sur i)
for k = 2:n+1 % on boucle de 2 a n+1 car on ne peut pas indicer a partir de zero
i_euler(k) = i_euler(k-1) + h*f(t_euler(k-1),i_euler(k-1));
t_euler(k) = t_euler(k-1)+h;
endTracé des nouveaux résultats
On va modifier la figure courante pour rajouter le tracé de i_euler en fonction de t_euler :
hold on % on rajoute le trace sur la figure courante
plot(t_euler,i_euler,'g','LineWidth',2) % trace avec une ligne verte
title('Comparaison analytique / Euler') % modification du titre de la figure
Question
Mettre en œuvre la méthode de Runge-Kutta 4 pour calculer aussi t_RK4 et i_RK4.
Solution
Implantation
On implante l'algorithme tel que donné dans la partie précédente : cliquez ici pour rappel[2].
On garde le même pas que pour la méthode d'Euler, il reste :
t_RK4 = zeros(1,n);
i_RK4 = zeros(1,n);
t_RK4(1) = t_ini;
i_RK4(1) = i0;
for k = 2:n+1
f1 = f( t_RK4(k-1) , i_RK4(k-1) );
f2 = f( t_RK4(k-1)+h/2 , i_RK4(k-1)+h/2*f1 );
f3 = f( t_RK4(k-1)+h/2 , i_RK4(k-1)+h/2*f2 );
f4 = f( t_RK4(k-1)+h , i_RK4(k-1)+h*f3 );
i_RK4(k) = i_RK4(k-1) + h/6*(f1+2*f2+2*f3+f4);
t_RK4(k) = t_RK4(k-1)+h;
endTracé final
Question
Tester et comparer les performances des méthodes en modifiant le pas de calcul (en modifiant la valeur du nombre de pas n).
Indice
On pourra essayer n = 10, 20 ou 100...


