Vous êtes sur la page 1sur 14

UNIVERSITE D’ABOMEY-CALAVI

*************
ECOLE POLYTECHNIQUE D’ABOMEY-CALAVI
*************
SECTEUR INDUSTRUEL DEUXIEME ANNEE (SI2)
************

RESOLUTION DES EXERCICES DE MATLAB

Membres du groupe : sous la direction de :


 AKOUEHOU Noé Mr. GBAGUIDI
 BONOU Habib
 DANSOU Giovanni
 ZINSOU Karl

ANNEE UNIVERSITAIRE : 2020-2021

1
Exercice 1

L’algorithme de Runge-Kutta d’ordre 4, sur l’intervalle 𝑡∈ [𝑡0 ; 𝑡1].

1.1. Construire un solveur [𝑡, 𝑦] = 𝑅𝐿𝐶 (𝐸, 𝑅, 𝐿, 𝐶, 𝑡0, 𝑡1, 𝑞0, 𝑖0, 𝑛) du circuit RLC
de l’exercice 1 de la planche

function [ t,y,dy ] = RLC( E,R,L,C,t0,t1,q0,i0,n )


%:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
% Résolution par la méthode de Runge-Kutta d'ordre quatre avec
dérivée
% seconde de problème de la forme :
% y"(t)=f(t,y,y'), y(to)= yo, y'(to)=y'o
% Fonction RLC permettant la résolution des équations
différentielles
% régissant le courant de boucle i et la charge q du
condensateur dans un
% circuit RLC série soumis à une source de tension variable
% Syntaxe :
% [ t,y,dy ] = RLC( E,R,L,C,t0,t1,q0,i0,n )
% Arguments d’entrées :
% E est une tension, fonction du temps ;
% R (scalaire): résistance ohmique ;
% L (scalaire): inductance ;
% C (scalaire): capacité ;
% t0 et t1 sont les bornes de l'intervalle de résolution
% [t0,t1] ;
% q0 et i0 sont respectivement la charge
électrique dans le
% condensateur et le courant dans le circuit a
t=t0 ;
% n est le nombre de subdivision de l'intervalle de
% résolution du problème.
% Valeurs retournées :
% t est une instante donne
% y est une approximation de la charge q a l'instant t
% dy une approximation du courant i a l'instant t
% Date : 19-12-2020
% Auteurs : AKOUEHOU Noé, BONOU Habib, DANSOU Giovanni, ZINSOU
Karl
%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
f =@(t,y,dy) (E(t)-R*dy-y/C)/L;
tfin = t1; y0 = q0; dy0 = i0;
function [ t,y,dy ] =
RK4_ordre2(f,t0,tfin,y0,dy0,n)
h = (tfin-t0)/n ;
t = zeros(1,n); y = zeros(1,n); dy =
zeros(1,n);
t(1) = t0; y(1) = y0; dy(1) = dy0;

2
for i=1:n
t(i+1) = t(i)+h;
k1 = f(t(i),y(i),dy(i));
k2 = f(t(i)+h/2,y(i)+h/2*dy(i),dy(i)
+h/2*k1);
k3 = f(t(i)+h/2,y(i)+h/2*dy(i)
+h^2/4*k1,dy(i)+h/2*k2);
k4 = f(t(i)+h,y(i)+h*dy(i)+h^2/2*k2,dy(i)
+h*k3);
y(i+1) = y(i)+h*dy(i)+h^2/6*(k1+k2+k3);
dy(i+1) = dy(i)+h/6*(k1+2*k2+2*k3+k4);
end
end
[t, y, dy] = RK4_ordre2(f,t0,tfin,y0, dy0,n);
End

1.2. Utiliser le solveur créé au 1.1. Pour résoudre le problème correspondant


aux données suivantes :

9∙𝑠𝑖𝑛 (15𝜋𝑡) 𝑠𝑖 0≤𝑡<0.05

𝐸(𝑡) = 6.36 𝑠𝑖 0.05≤𝑡<0.1

6.36−2.7∙𝑐𝑜𝑠(15𝜋𝑡) 𝑠𝑖 0.1≤𝑡<0.15

𝑡0=0, 𝑡1=0.15, 𝑖0=0 et 𝑞0=0,


On donne en unité SI : 𝑅 = 1.0Ω, 𝐿 = 2H, 𝐶 = 0.45F
NB : Une comparaison sera effectuée avec le solveur prédéfini ode45 de
MATLAB en vue de validation. Pour cela, tracer les courbes de i et q pour
chacune des solutions par ode45 et par le solveur créé au 1.1.

function [ dy ] = rigid( t, y )
R =1.0; L =2; C =0.45;
E = @(t) (t>=0)*(t<0.05)*(9*sin(15*pi*t))+
(t>=0.05)*(t<0.1)*6.36+(t>=0.1)*(t<=0.15)*(6.36-
2.7*cos(15*pi*t));
dy = zeros(2,1);
dy(1) = y(2);
dy(2) = (E(t)-R*y(2)-y(1)/C)/L;
end

3
Suite de la question 1.2 de l’exercice 1
% Résolution du problème suivant: L(di/dt)+Ri+q/C = E(t),
dq/dt = i
% Contions initiales: q(0)=0; i(0)=0;
% En posant: y1 = q et y2 = i,
% le probleme equivaut au système suivant:
%
% y'1 = y2, y1(0)=0;
% y'2 = (E(t)-Ry2-y1/C)/L, y2(0)=0.

% ==================== Données du probleme===============


E = @(t) (t>=0)*(t<0.05)*(9*sin(15*pi*t))+
(t>=0.05)*(t<0.1)*6.36+(t>=0.1)*(t<=0.15)*(6.36-
2.7*cos(15*pi*t));
R =1.0; L =2; C =0.45; t0 =0; t1 =0.15; q0 =0;
i0 =0; n =40;
% ============== Utilisation du solveur RLC ==================

[ t,y,dy ] = RLC( E,R,L,C,t0,t1,q0,i0,n );


figure;
s = [subplot(2,1,1) subplot(2,1,2)];
plot(s(1),t,y,t,dy,'r'); title(s(1),'Resolution
avec RLC');
a = legend(s(1),'q(t)','i(t)'); xlabel(s(1),'temps');
% ============= Utilisation du solveur ode45 ===============

[ T,Y ] = ode45(@rigid,[t0 t1],[q0 i0]);


plot(s(2),T,Y(:,1),T,Y(:,2),'r');
title(s(2),'Résolution avec ode45');
xlabel(s(2),'temps');

4
EXERCICE 2

La figure ci-contre montre le cycle thermodynamique


d’un moteur. Le rendement de ce moteur pour un gaz
monoatomique est donné par :

𝜂 = (𝑇1/𝑇2−1) − 𝑙𝑛(𝑇1/𝑇2) /𝑙𝑛(𝑇2/𝑇1) + (1−𝑇1/𝑇2) /(𝛾−1)


On donne 𝛾=5/3. Déterminer à l’aide d’un code MATLAB basé sur l’algorithme de Newton-
Raphson avec le critère 𝜀=10−6, le rapport de température 𝑇2/𝑇1 pour lequel le
rendement du moteur vaut 𝜂=0.3. On pourra déterminer graphiquement la valeur d’essai
de 𝑇2/𝑇1.
function [ conv,Nit,y ] =NewRaph( fdf,xo,Nmax,epsi )
%...................................................
%Syntax:[conv,Nit,y]=NewRaph( fdf,xo,Nmax,epsi )
%Résolution d'équation non linéaire
% suivant l'algorithme de Newton-Raphson
% Arguments:
% fdf(x)=[f(x),f'(x)]: définie la fonction dont on
5
% cherche un zéro et le dérivée f'
% xo: initiale
% Nmax : Nombre maximal d'itération
%epsi: Critère de convergence
%Valeur retournés:
% conv: prend la valeur de convergence et 0 si non
% Nit: Nombre d'itérations effectué
% y:solution recherché
%Auteurs : AKOUEHOU Noé, BONOU Habib, DANSOU Giovanni, ZINSOU
Karl

%Date:19/12/2020
%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::
%Initialisation
x1=xo;
conv0=0;
Nit0=0;
%Itérations
while(1>0)
Rapport=fdf(x1);
x2=x1-Rapport(1)/Rapport(2);
Nit0=Nit0+1;
test=abs((x2-x1)/x2);
if(test<epsi)
conv0=1;
break;
end
if(Nit0>=Nmax)
break;
end
x1=x2;
end
conv=conv0;Nit=Nit0;y=x2;

end
suite de l’exercice 2

%=============================================================
%programme permettant d'évaluer le rendement d'un moteur pour
un gaz
%monoatomique
%Arguments d'entrés
% gamma: scalaire
% epsi: scalaire
% nu: le rendement du moteur
%Date: 20 / 01 /2020
% Auteurs: AKOUEHOU Noé, BONOU Habib, DANSOU Giovanni, ZINSOU
Karl

6
%Utilisons l'algorithme de NewRaph pour déterminer le rapport
T2/T1 tel que:
% nu = [T1/T2-1-ln(T1/T2)/[ln(T2/T1)+(1-T1/T2)(gamma-1)]
% n et gamma sont donne
%=============================================================
z = 5/3; nu = 0.3;
f = @(x) ((1/x-1)-log(1/x))*(z-1)-nu*(log(x)*(z-1)+(1-1/x));
df = @(x) (-1/x^2+1/x)*(z-1)-nu*((z-1)/x+1/x^2);
%================ NewRaph=====================================
fdf = @(x) [ f(x) df(x)]; x0 = 5; Nmax = 100; epsi=1e-6;
[ conv,Nit,y ] = NewRaph( fdf,x0,Nmax,epsi );
fplot(f,[0 10]); grid on;

Après exécution de l’exercice 2 on obtient la courbe suivant l’échelle choisie.

7
EXERCICE 3

Un engin spatial est lancé à l'altitude H au-dessus du


niveau de la mer avec la vitesse 𝑣0 dans la direction
indiquée. Les équations différentielles décrivant le
mouvement de l'engin spatial sont données par :

𝑟̈ = 𝑟𝜃̇ − 𝐺𝑀𝑒/𝑟^2 𝑟̇(0) = 0𝑟(0) = 𝑅𝑒 + 𝐻

𝜃̈ = − 2𝑟̇𝜃̇/𝑟 𝜃̇(0) = 𝑣0/𝑟(0) 𝜃 (0)=0

𝑟̇=𝑑𝑟/𝑑𝑡, 𝜃̇ =𝑑𝜃 /𝑑𝑡, 𝑟̈ = d2r /𝑑𝑡2, 𝜃̈ = d2 𝜃̈/dt2

𝑀𝑒,𝐺,𝑅𝑒,𝐻 et 𝑣0 sont des constantes données.

3.2. Écrire un script MATLAB utilisant le solveur ode45 pour la résolution de ce


problème avec :

• 𝐺=6.672×10−11𝑚3𝑘𝑔−1𝑠−1=𝑐𝑜𝑛𝑠𝑡𝑎𝑛𝑡𝑒 𝑑𝑒 𝑔𝑟𝑎𝑣𝑖𝑡𝑎𝑡𝑖𝑜𝑛 𝑢𝑛𝑖𝑣𝑒𝑟𝑠𝑒𝑙𝑙𝑒 ;


• 𝑀𝑒=5.9742×1024𝑘𝑔=𝑚𝑎𝑠𝑠𝑒 𝑑𝑒 𝑙𝑎 𝑡𝑒𝑟𝑟𝑒 ;
• 𝐻=772𝑘𝑚 ;
• 𝑣0=6700𝑚/𝑠 ;

8
• 𝑅𝑒=6378.14𝑘𝑚=𝑟𝑎𝑦𝑜𝑛 𝑑𝑒 𝑙𝑎 𝑡𝑒𝑟𝑟𝑒 𝑎𝑢 𝑛𝑖𝑣𝑒𝑎𝑢 𝑑𝑒𝑠 𝑚𝑒𝑟𝑠.

function [ dy ] = spatial( t,y)


%Auteurs:
%Date:19/01/2021
%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
dy=zeros(4,1);
G=6.672*1e-11;
Me=5.9742*1e24;
H=772000;
vo=6700;
Re=6378.14*1e3;
dy(1)=y(2)*y(4)-G*Me*1/(y(2))^2;
dy(2)=y(1);
dy(3)=2*y(1)*y(3)/y(2);
dy(4)=y(3);

end

Suite de l’exercice 3

%Résolution du système d'équation différentielle a l'aide du solver ode45


%Représentation graphique des solution
%Y(:,1)<=>r'(t)
%Y(:,2)<=>r(t)
%Y(:,3)<=>theta'(t)
%Y(:,4)<=>theta(t)
%Auteurs: AKOUEHOU Noé, BONOU Habib, DANSOU Giovanni, ZINSOU
Karl
%Date:19/01/2021
%:::::::::::::::::::::::::::::::::::::::::::::::
G=6.672*1e-11;
Me=5.9742*1e24;
H=772000;
vo=6700;
Re=6378.14*1e3;
[T,Y]=ode45(@spatial,[0 20],[0 Re+H vo/(Re+H) 0]);
plot(T,Y(:,1),T,Y(:,2),T,Y(:,3),T,Y(:,4));
legend('r\prime(t)','r','theta\prime(t)','theta')

Après exécution du programme on obtient les courbes suivants selon


l’intervalle choisi :

9
Exercice 4

4.1.1. Créer une fonction [𝑀]=𝐽(𝑢) pour le calcul de la matrice jacobienne.


𝐽(𝑢)=𝐴+𝜃(𝑢)
function [ M ] =J( u )
%Syntaxe [ M ] =J( u ):
%Argument:
%u: une matrice carrée
%Valeur retournée:
% M:la matrice jacobienne de u
%Auteurs: : AKOUEHOU Noé, BONOU Habib, DANSOU Giovanni, ZINSOU
Karl
%Date:19/01/2021
%::::::::::::::::::::::::::::::::::::::::::::
[n,a]=size(u);
D=zeros(n,n);
Ti=zeros(n,n);
Ts=zeros(n,n);
for i=1:n

10
D(i,i)=u(i,i);
for j=i+1:n
Ts(i,j)=u(i,j);
Ti(j,i)=u(j,i);
end
end
M=-1*inv(D)*(Ts+Ti);
end

4.1.2. Créer une fonction [𝑈]=𝑠𝑜𝑙𝑣𝑒𝑆𝐶(𝑈0,𝐾,𝜆,𝑒𝑝𝑠𝑖,𝑛,𝑁𝑚𝑎𝑥) pour la résolution du système (1)


selon l’algorithme de Newton pour les systèmes d’équations non linéaires, 𝑁𝑚𝑎𝑥 étant le
nombre maximal d’itérations.

function [ D ] = dF(K,n,X )
%UNTITLED3 Summary of this function goes here
% Detailed explanation goes here
%Auteurs: AKOUEHOU Noé, BONOU Habib, DANSOU Giovanni, ZINSOU
Karl

[line,col]=size(X);
A=tridiag(n);
B=Diag(X);
for i=1:line
for j=1:col
D(i,j)=A(i,j)+2*K*B(i,j);
end
end

end

function [ D ] = Diag( u )
%UNTITLED3 Summary of this function goes here
% Detailed explanation goes here
%Auteurs: AKOUEHOU Noé, BONOU Habib, DANSOU Giovanni, ZINSOU
Karl

[line,col]=size(u);
D=zeros(line,line);
for i=1:line-1
D(i,i)=cosh(u(i,1));
end
D(line,line)=cosh(u(line,1));

end

11
function [ D ] = Fa( n,landa,h,K,X,C)
%UNTITLED5 Summary of this function goes here
% Detailed explanation goes here
%Auteurs: AKOUEHOU Noé, BONOU Habib, DANSOU Giovanni, ZINSOU
Karl

A=tridiag(n);
[line,col]=size(C);
[line,col]=size(X);
B=A*X;
for i=1:line
for j=1:col
D(i,j)=B(i,j)*(landa/h)^2+2*K*sinh(X(i,j))-C(i,j);
end
end
end

function [ U ] = SolvesSC(Uo,K,landa,C,epsi,n,Nmax)
%Syntaxe:[ U ] = SolvesSC(Uo,K,landa,epsi,n,Nmax)
%Argument:
%Nmax le nombre maximal d'itération
%epsi: le critère de convergence
% landa,K et n des constantes
% Uo: une matrice colonne
%Valeur retournée:
%U:
%Auteurs: AKOUEHOU Noé, BONOU Habib, DANSOU Giovanni, ZINSOU
Karl
%:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
h=1/(n+1);
compteur=0;conv=1;
N=size(Uo,1);
X1=Uo;
%=======================Boucle d'itérations==========================
while 1>0
compteur=compteur+1;
M=dF(K,n,X1);
B=-Fa(n,landa,h,K,X1,C);
dX=M\B;
X2=X1+dX;
Norme1=norm(dX)/norm(X2);
Norme2=norm(Fa(n,landa,h,K,X2,C));
%-----------------------test de convergence--------------------------
if (Norme1<epsi) && (Norme2<epsi)
Nbit=compteur;
break;
end
%------------------Test sur le nombre d'itérations-------------------
if compteur>=Nmax
conv=0;
Nbit=Nmax;
break;
end
%-------------Copie et retour à la prochaine itération----------------
X1=X2;
end
%=====================Fin de boucle d'itération=======================
U=X2;

12
end

function [ D] = tridiag(n )
%UNTITLED2 Summary of this function goes here
% Detailed explanation goes here
%Auteurs: AKOUEHOU Noé, BONOU Habib, DANSOU Giovanni, ZINSOU
Karl

D=zeros(n,n);
for i=1:n-1
D(i,i)=2;
D(i+1,i)=-1;
D(i,i+1)=-1;
end
D(n,n)=2;
end

4.2. On suppose à présent que 𝑛=2,𝐾=1,𝜆=1/3 et on obtient alors le système


suivant

2𝑢1−𝑢2+2𝑠𝑖𝑛ℎ(𝑢1)−0.5=0

−𝑢1+2𝑢2+2𝑠𝑖𝑛ℎ(𝑢2)−0.4=0 (2)

13
4.2.1. en partant de 𝑈0=[−0.21−0.1]𝑇, déterminer u avec le critère de convergence 𝜀=10−3 la
solution de (2).
%Resolution du système d'équation avec n=2
%et pour epsi=1e-3
% en utilisant le solver solvesSC
%Auteurs: AKOUEHOU Noé, BONOU Habib, DANSOU Giovanni, ZINSOU
Karl

%Date:19/01/2021
%::::::::::::::::::::::::::::::::::::::::::::::
global k lambda
U0 = [-0.21-0.1]' ; k = 1; lambda = 1/3; epsi = 1e-3; n = 2; Nmax = 100;
b = [0.5 0.4]';
[ U ] = SolvesSC( U0,k,lambda,epsi,n,Nmax );
fprintf('\n la solution du système est :[% %]',U(1),U(2));

la solution du système est : [0.159578 0.1396671]

14

Vous aimerez peut-être aussi