Vous êtes sur la page 1sur 11

Ecole Nationale d’Ingénieurs Monastir ENIM

Département Génie Mécanique

TP Différence fini : Programmation MATLAB

THABET Ibtissem
3ème génie Mécanique, Groupe Numérique
Année universitaire 2015/2016
I. Objectifs :
Au cours de ce TP nous avons eu l’occasion de résoudre un problème par différences finies en utilisant
différent schémas.

Les objectives de ce TP sont :

 La mise en œuvre sous MATLAB les différentes méthodes développées dans le cours.
 La validation des méthodes mises en œuvre par des exemples à solutions connues.
 L’illustration des propriétés des méthodes utilisées par des essais numériques.
II. Travaux pratiques :

1. Problème 2 :
Le problème est une barre de longueur L supposée isolé de sa surface latérale possédant un
coefficient de conduction thermique k et une capacité calorifique c. La température de la barre est
régie par l’équation de chaleur.

On écrit un programme permettant de résoudre le problème par différence finies en utilisant


un schéma explicite d’ordre 2 en x et d’ordre 1 en temps :

a) Programme sur MATLAB :

clear all;
close all;
% domaine
L=1;
c=2;
k=4;

%Nt variable
%les variables d'entrées
Nx=4;
dx= L/Nx;
for Nt=60:64
dt=L/Nt;
%Matrice des éléments
U=zeros(Nt+1,Nx+1);
% les conditions aux limites
for i=2:Nt+1
U(i,1)=10;
end
for i=1:Nx+1
U(1,i)=20;
end
% Résolution du système
for i=2:Nt+1
for j=2:Nx
U(i,j)=((k*dt)/(c*dx^2))*(U(i-1,j-1)-2*U(i-1,j)+U(i-1,j+1))+U(i-1,j);
end
U(i,Nx+1)=U(i,Nx)+dx; % condition aux limite type newman

1
end
U
j=2;
if (U(Nt+1,j) >= U(Nt+1,1))
if (U(Nt+1,j)<= U(Nt+1,Nx+1))
j=j+1;
end
fprintf ('shémab stable')
else
fprintf ('shéma instable')
end
end

hold on,
x=0:dx:L;
plot(x,U)
title(['solution approchées du schéma explicite ']);
xlabel('Position ');
ylabel(' Température');

b) Résultat obtenue :
1 er essai : On fixe dx à 0.25 et on fait varier dt entre 1/60 et 1/64 :

Figure 1: variation du pas de température de 1/60 à 1/64 pour une pas de espace fixé =0.25

2ème essai : On fixe dx à 0.25 et on fait varier dt entre 1/32 et 1/40:

Figure 2:variation du pas de température de 1/32 à 1/40 pour une pas de espace fixé =0.25

2
3ème essai : On fixe dx à 0.25 et on fait varier dt entre 1/130 et 1/150:

Figure 3: variation du pas de température de 1/130 à 1/150 pour une pas de espace fixé =0.25

4ème essai : On fixe dt à 1/64 et on fait varier dx entre ½ et ¼ :

Figure 4: variation du pas dans l'espace de 1/2 à 1/4 pour une pas de température fixé =1/64

c) Interprétation des résultats :

 Pour la 1er courbe de dt variant entre 1/60 et 1/64 on a une variation stable de la température.
Ceci est vérifié par la condition de stabilité suivante : A=k/c*dt/(dx^2)<=0.5
Soit dt=1/64 on est à la limite telle que A=0,5.
 La 2ème Courbe variant entre dt=1/32 et dt =1/40, on remarque bien une fluctuation de la
température qui est instable au-delà de dt.
Dans le cas où dt=1/32 on a : A=1>0.5 d’où l’instabilité du schéma.
 Pour la 3ème courbe de dt variant entre 1/130 et 1/150 on a une variation stable de la température.
Par rapport la 1er courbe la pente augmente.
Soit dt=1/130 schéma stable. A=0.25<0.5.

3
 Pour la 4ème courbe : courbe verte c’est pour dx=1/10 schéma instable tel que A=2>0.5 alors la non
est stabilité vérifié. bleu celle de 1/5 celle d’un schéma stable vérification : A=0.5
et jaune ¼ A=0.32<0.5

2. Problème 2 : tétha schéma :


a) Programme sur MATLAB :

clear all;
%domaine
l=1;
%descritisation
x=input('nombre d"essais à faire')
for i=1:x
dx=input('le pas dans l"espace')
dt=input(' le pas dans le temps')
tetha=input('indiquer tetha')
%conditions initiales
n=(1/dx)
%conditions initiales
for i=1:(n+1)
H(i)=20;
end
a=20
s=1;
while(s<=a)
f(1)=10;

for i=2:n
for j=2:n
if (i==j)
A(i,i)=1+2*(2*dt*tetha/(dx^2));
end
if(i<n+1)
A(i,i+1)=-(2*dt*tetha/(dx^2));
end
if(i>2)
A(i,i-1)=-(2*dt*tetha/(dx^2));
end
end
B(i)=H(i)+(2*dt*(1-tetha)/(dx^2))*(H(i+1)-2*H(i)+H(i-1));
end
A(1,1)=1;
A(n+1,n)=-1;
A(n+1,n+1)=1;
B(1)=10;
B(n+1)=dx;
f=A\B';
for i=1:(n+1)
d(i)=H(i);
end
for i=2:n

4
if (f(i)>=f(1))&(f(i)<=f(n+1))
for i=1:(n+1)
H(i)=f(i);

end
end
end
for i=2:n
if (f(i)<f(1))
s=21;
end
if f(i)>f(n+1)
s=21;
end
end
('pour ij nombre de pas de temps egal à ')
s
('la solution par téta schemas est')
H
s=s+1;
x=0:dx:1;
end
plot(x,d)
hold on
legend('temperature')
xlabel('position x')
ylabel('température T')
title('traçage de la température approchée')
end

5
b) Résultats obtenus :

Figure 5: soit dx= 1/5 , dt=1/32 et théta =0.25(instabilité).

Figure 6: soit dx=1/5 , dt=1/64 et théta 0.25(état limite de stabilité).

Figure 7:soit dx=1/5 ,dt =1/130 est théta =0.25(stabilité)

6
Figure 8:dx=1/5 ,dt =1/64 et théta =0.5

Figure 9:dx=1/5 ,dt =1/32 et théta =0.5

Figure 10:dx=1/10 ,dt =1/64 et théta =0.25

7
 1er courbe : ( soit dx= 1/5 , dt=1/32 et théta =0.25) à x=0 la pente est strictement
supérieure à zéro, la température maximale est égale 18, la pente presque constante loin
des extrémités. (Figure 5)
 2ème courbe : (soit dx=1/5 , dt=1/64 et théta 0.25) à x=0 jusqu’à x=0.25 pente égale à
zéro, la température maximale est égale 13.6, la courbe admet 3 points de flexion avec
variation faible de la pente. (figure 6)
 3ème courbe : (soit dx=1/5 ,dt =1/130 est théta =0.25) à x=0 la pente est presque nulle, la
température maximale est égale 15.3 la courbe admet 4 points de flexions avec une
variation faible de la pente. (figure 7)
 4ème courbe : (dx=1/5 ,dt =1/64 et théta =0.5)à x=0 la pente supérieure à zéro, la
température maximale est égale 19.3 la courbe admet 4 points de flexions avec une
variation faible de la pente. (figure 8)
 5ème courbe : ( dx=1/5 ,dt =1/32 et théta =0.5) à x=0 la pente est très supérieure à zéro, la
température maximale est égale 19.3 la courbe admet 4 points de flexions avec une
variation faible de la pente. (figure 9)
 6ème courbe : par rapport à la 2ème on augmente nombre des pas dans l’espace, dt=1/64 est
théta égale 0.25, la température est constante jusqu’à dx=0.1 puis la courbure est plus
homogène jusqu’à dx=1.(figure 10).

On conclue : pour 0<=théta<0.5 les théta schémas sont conditionnellement stable.


Une condition de stabilité est nécessaire.
(dt/dx^2)<=0.5/(1-2*théta :).

3. Problème 3 :
Résolution de problèmes en dimension 2 : On écrit un programme MATLAB qui résoudre le
problème par différence fini :

clear all;
close all;
%domaine
L=1;
% ²identifier h et k (discretisation)
m=input('sisir le nombre d''element sur X m= ');
n=input('sisir le nombre d''element sur Y n= ');
h=1/m;
k=1/n;

%% %solution exacte
%%déclarer la matrice A%%

A=zeros((m-1)*(n-1),(m-1)*(n-1));
c=1/h+1/k;
for i=1:(m-1)*(n-1)
for j=1:(m-1)*(n-1)
if (i==j)
A(i,j)=-2*c;
end
if (i==j+1)
A(i,j)=1/h^2;

8
end
if( i==j-1)
A(i,j)=1/h^2;
end
if (i==j+n-1)
A(i,j)=1/k^2;
end
if (i==j-(n-1))
A(i,j)=1/k^2;
end
end
end
A

%%déclarer la matrice F

F=zeros((m-1)*(n-1),1);
for i=1:(m-1)*(n-1)
F(i,1)=2*((i*h)^2-i*h+(j*k)^2-(j*k));
end
F

%%résolution du système ,déterminer U

U=(inv(A))*F;
U

%% %solution approchée
% calcule matrce V
V=zeros((m-1)*(n-1),(m-1)*(n-1));
for i=1:(m-1)*(n-1)+1
V(i,(m-1)*(n-1)+1)=0;
V(i,1)=0;
end
for j=1:(m-1)*(n-1)
V(1,j)=0;
V((m-1)*(n-1),j)=0;
end
c=1/h+1/k;
for i=2:(m-1)*(n-1)
for j=2:(m-1)*(n-1)
if (i==j)
V(i,j)=-2*c;
end
if (i==j+1)
V(i,j)=1/h^2;
end
if( i==j-1)
V(i,j)=1/h^2;
end
if (i==j+n-1)
V(i,j)=1/k^2;
end
if (i==j-(n-1))
V(i,j)=1/k^2;
end
end
end
V

9
%calcule de Force
F=zeros((m-1)*(n-1),1);
for i=2:(m-1)*(n-1)
for j=2:(m-1)*(n-1)-1

F(i,1)=2*((i*h)^2-i*h+(j*k)^2-(j*k));

end
end
F

Ua=A\F;
Ua

%% calcule de L"erreur

for i=1:(m-1)*(n-1)
E(i)= abs((Ua(i,1)-U(i,1))/U(i,1));
end
E

10

Vous aimerez peut-être aussi