Vous êtes sur la page 1sur 15

Le principe de ce TP est de  :

- De résoudre quelques équations différentielles partielles (EDP)


- Programmer les méthodes de résolution des EDP : Méthode des différences finie.

1- Méthodes de Résolution numériquement des EDO avec Matlab   :


Quelques précisions sur Matlab  !
Tout au long de ce projet, nous nous sommes aides du logiciel de calcul Matlab (abrège de
Matrix Laboratoire) qui permet de mener `a bien des calculs principalement matriciels mais
qui fournit aussi des algorithmes efficaces d’approximations numériques (intégrales, racines
de polynôme...). Le but de cette partie est d’´éclairer et préciser les fonctionnalités de Matlab
et plus précisément celles relevant de la géométrie, des ´éléments finis et des ´équations aux d
´rivées partielles, mais aussi celles relatives au stockage des données. Ceci en vue de permettre
une meilleure compréhension des algorithmes que nous d´enveloppons par la suite.

1 La PDE Toolbox de Matlab et stockage de données   :

La PDE Toolbox de Matlab est un module de Matlab qui offre `a la fois tout un panel de
commandes principalement d´Edi ‘es `a la résolution, `a l’aide de la m´méthode des ´éléments
finis, des ´équations aux d´rivées partielles linéaires en deux dimensions et dans une
moindre mesure celles non linéaires, mais elle fournit de plus un environnement graphique
pratique et des outils typiquement géométriques intervenant dans la résolution des
´équations aux d´rivées partielles par la m´méthode des ´éléments finis (maillage,
raffinement, d´composition de domaine...). Ces fonctionnalités utilisent un codage de la
géométrie qu’il nous a fallu d´encrypter avant d’´écrire nos premiers algorithmes.
.2 Exemple de résolution `a l’aide de la PDE Toolbox sous Matlab

Soit D le disque unité. On s’intéresse au problème d’E.D.P suivant, on cherche u telle que :

−div(a(x, y)∇u) = f dans D


u = 0 sur ∂D
Avec :

a(x, y) = 2 + sin(xy)
f(x, y) = −4(2 + sin(xy) + xycos(xy))
Ce problème admet une unique solution. On peut dans ce cas la calculer, il s’agit de :
u(x, y) = x
2+y
2+1
On va donc pouvoir comparer la solution exacte et la solution approchée renvoyé par
Matlab.
– On d´efinit une fonction grav qui donne les coordonn´ees des centres de gravit´e des
triangles. function g=grav(p,t)
g=[(p(1,t(1,:))+p(1,t(2,:))+p(1,t(3,:)))/3; (p(2,t(1,:))
+p(2,t(2,:))+p(2,t(3,:)))/3]; – Voici la fonction Matlab qui
donne f aux centres de gravit´e des triangles du maillage
function f=castestf(p,t) s=grav(p,t); x=s(1,:); y=s(2,:); f =
-4*(2+sin(x.*y)+x.*y.*cos(x.*y)); x et y sont ici des vecteurs
lignes contenant respectivement toutes les coordonn´ees sur (Ox)
et (Oy) des centres de gravit´

Dans cette section, on d´ecrit la d´emarche adopt´ee pour impl´ementer l’algorithme de


Newton sous Matlab. On commence par pr´esenter de mani`ere g´en´erale les diff´erentes
´etapes de la r´esolution

2-solutions numériques d’équation différentielles ordinaires   :

Programmation de la solution analytique:


Soit: uexact(x, t) = 800 × X∞ n=0 1 π 2 (2n + 1)2 × cos π(2n + 1)(x − 1) 2 × e
−0.3738(2n+1)2 t
Puisque nous sommes en analyse numerique et non en analyse fondamentale nous
devons savoir ´ que nous ne travaillons qu’avec des points d’un maillage et non dans
tout le domaine comme on aurait cru le faire. Pour evaluer la valeur num ´ erique de ´
uexact pour tout point appartenant dans la grille, nous devons faire une boucle qui,
pour chaque point (xi , tj ), calcule uexact(xi , tj ). Posons ∞ = 100 acceptable en analyse
numerique, nous avons donc le programme suivant qui cal- ´ cule les el´ ements de la
matrice ´ v representant ´ exactement les valeurs de ´ u(xi , tj ) dans le cadrillage.

clc; clear;
k=0.13;c=0.11; p=7.8;dx=0.25;
r=1/4 dt=dx*dx*c*p*r/k;
Tmax=100*dt;%%(Nous avons fait Tmax un multiple de dt pour qu’en
le divisant par dt, nt soit toujours un entier, car sinon le
programme ne compilera pas)% cla=0; clb=0; a=0;b=2; nx=(b-a)/dx;
nt=Tmax/dt; x=0:dx:b; t=0:dt:Tmax; %

*********** la solution analytique ********************

v=zeros(nx+1,nt+1); n=0; while(n ≤ 100) for i=1:nx+1 for


j=1:nt+1 u(i, j) = v(i, j) + 800 ∗ 1/(pi2 ∗ (2 ∗n+ 1)2 ) ∗ cos(pi
∗ (2 ∗n+ 1) ∗ (x(i)−1)/2) ∗ exp(−0.3738 ∗ (2 ∗ n + 1)2 ∗ t(j));
v(i,j)=u(i,j); end end n=n+1; end mesh(t,x,v)
**************

3_-Manupilation  :
A) Tracer le graphe de fonction  :
2
Y=x -3x+10
Tracer les fonctions sur une même graph :
2
Y1=sin(x) ;Y2=cos(x) ;Y3=x  ;Y4=tan(x) :

B) Methodes de resolustion numériquement des intégrales   :


2
f (x)= x*exp(-x)*cos(2.*x), f(x)=(x -x+5).√x
Calculer les intégrale de ces fonctions par matlab en utilisant les procédures :int et trapz
a-créez deux fichiers u0.m et a0.m contenant la définition des
deuxfonctions
suivantes  :
u0.m
function [y]=u0(x)
%donnee initiale
y=zeros(size(x));
for j=1:length(x)
if (x(j)<=-1) y(j)=0;
elseif (x(j)<=-0.75) y(j)=4*(x(j)+1);
elseif (x(j)<=-0.5) y(j)=-4*(x(j)+1/2);
else y(j)=0;
end
end
a0.m

function [y]=a0(x)
% coefficient
y=ones(size(x));

2- Simuler le programme suivant  :

clc;clear
h=0.5;
a=0;
b=20;
c=0; d=10;
nx=(b-a)/h;
ny=(d-c)/h;
n=(nx-1)*(ny-1);
%%% (remplissage des éléments de la matrice A)
A=zeros(n);
for i=1:(n-1)
A(i,i)=-4;
A(i+1,i)=1;
A(i,i+1)=1;
if (mod(i,(nx-1))==0)
A(i+1,i)=0;
A(i,i+1)=0;
end
end
for i=1:n-nx+1
A(nx-1+i,i)=1;
A(i,nx-1+i)=1;
end
A(n,n)=-4;
%%% (remplissage des éléments de la matrice B)
for i=1:n
B(i)=0;
if (mod(i,nx-1)==0)
B(i)=-100;
end
end
%%%% (résolution du système Av=B et transformation du vecteur ~v en
la matrice U).
V=A\B';
k=1;
for j=1:ny-1
for i=1:nx-1
u(j,i)=V(k);
k=k+1;
end
end
%%% (Décalage des éléments pour insérer les conditions aux limites)
for j=ny:-1:2
for i=nx:-1:2
u(j,i)=u((j-1),i-1);
end
end
for i=1:nx
for j=1:ny
u(1,i)=0;
u(j,1)=0;
u(ny+1,i)=0;
u(j,nx+1)=100;
end
end
u(1,nx+1)=0;
%%% les vecteurs x et y
x=0:h:b; y=0:h:d;
%%% (affichage la courbe en tenant compte des vecteurs x,y et de la
matrice U)
mesh(x,y,u)

figure des fonction n et ny, nx

100

80

60
n

40

20

0
10
8 20
6 15
4 10
2 5
0 0
ny nx

Conclusion
• La formule du trapèze a un degré de précision de 1 (l’erreur sera nulle pour les

polynômes de degré 0 et 1).

• Plus l’intervalle sera grand plus l’erreur sera grande.

Partant du fait que

il est clair qu’il est intéressant de subdiviser l’intégrale et d’appliquer la formule du trapèze

sur chaque sous-intervalle: c’est la formule du trapèze composée.

• Le trapèze composé revient à intégrer une interpolation linéaire par morceaux de la

fonction  f .

• La formule du trapèze est d’ordre 2.


Pour l’erreur le théorème utilisé pour le trapèze n’est plus valable (on a pas une fonction

qui ne change pas de signe sur x0,x2   . On aborde le problème d’une autre manière (voir
p314 pour les détails) et on obtient

On obtient la formule à de Newton-Cotes à 3 points appelée formule de Simpson 1/3

• Cette formule a un degré de précision de 3.

• Comme pour le trapèze, il est préférable de subdiviser en sous intervalle.

Travail a Réaliser  :
La programme en Matlab résolvant cette équation

Implementation numérique ´

Code:
clear all; clc;

function I = fonction_trapeze(a,b,n,f)
h=(b-a)/n;
I=0;
for k=0:n-1
x=a+(k*h);
f1=f(x);
x=a+((k+1)*h);
f2=f(x);
I=I+f1+f2;
end
I=I*h/2;

Code :

function [ I ] = IntSimpson(X,F)
a=0 ;
N=length(X) ;
for k=1 : (N-2) ;
a=a+ ((F(k)+4*F(k+1)+F(k+2))*( X (k+2)-X(k)))/6 ;
end ;
I=a/2

Expliquer ce programmer:
Stratégie générale ´

Nous allons maintenant donner les grandes lignes pour resoudre l’EDP ´ 2.1 par une
integration ´ numerique le long des caract ´ eristiques. On consid ´ ere deux points ` P et Q
(voir figure1), l’equation ´ aux deriv ´ ees partielles ´ 2.1 etant hyperbolique, il y a deux caract
´ eristiques en chaque point. La ´ courbe caracteristique ´ a droite de ` P, de pente m+,
intersecte celle de gauche de Q, de pente m− au point R. La solution du probleme ` 2.1 peut-
etre trouv ˆ ee en r ´ esolvant ´ amdp + cdq + edt = 0 le long de ces