Sous-sections

4.2 Équation de Poisson

4.2.1 Problème physique

On considère une membrane carrée de coté \bgroup\color{black}$ a$\egroup qui se déforme sous l'effet d'une charge surfacique \bgroup\color{black}$ f(x,y)$\egroup . La membrane est sous tension et fixée sur les bords. On suppose qu'en chacun des points la tension \bgroup\color{black}$ T$\egroup est constante et tangente à la membrane (on néglige les forces élastiques dues à la déformation de la membrane). On note \bgroup\color{black}$ u(x,y)$\egroup la déformée. Les forces exercées sur un élément de membrane \bgroup\color{black}$ dx$\egroup \bgroup\color{black}$ dy$\egroup sont:

Figure 4.1: Équilibre statique d'une membrane dans le plan (x,z)
\includegraphics[width=0.25\paperwidth,keepaspectratio]{CHAP4/membrane}

  1. des forces de tension exercées sur les cotés de l'élément. Pour le coté de longueur $ dy$ et d'abcisse $ x$ , cette force est perpendiculaire au coté $ dy$ et tangente à la surface $ u(x,y)$ . Elle est située dans le plan $ (x,z)$ et a pour composantes:

    $\displaystyle Tdy\left[\begin{array}{c}
-\cos\theta_{x}\\
0\\
\sin\theta_{x}\end{array}\right]$

    en notant $ \theta_{x}$ l'angle de la surface $ u(x,y)$ avec l'horizontal. De même pour le coté d'abscisse $ y$ , la force de tension s'écrit:

    $\displaystyle Tdx\left[\begin{array}{c}
0\\
-\cos\theta_{y}\\
\sin\theta_{y}\end{array}\right]$

  2. des forces de chargement verticales:

    $\displaystyle f(x,y)dxdy$

L'équilibre statique conduit donc aux équations suivantes:


$\displaystyle Tdy(\cos\theta_{x+dx}-\cos\theta_{x})$ $\displaystyle =$ 0  
$\displaystyle Tdx(\cos\theta_{y+dy}-\cos\theta_{y})$ $\displaystyle =$ 0  
$\displaystyle Tdy(\sin\theta_{x}-\sin\theta_{x+dx})+Tdx(\sin\theta_{y}-\sin\theta_{y+dy})$ $\displaystyle =$ $\displaystyle f(x,y)dxdy$  

avec \bgroup\color{black}$ \tan\theta_{x}=\frac{\partial u}{\partial x}$\egroup et \bgroup\color{black}$ \tan\theta_{y}=\frac{\partial u}{\partial y}$\egroup . En supposant que les angles \bgroup\color{black}$ \theta$\egroup sont petits, i.e:

\bgroup\color{black}$\displaystyle \cos\theta_{x}\approx1, \sin\theta_{x}\appro...
...s\theta_{y}\approx1, \sin\theta_{y}\approx\frac{\partial u}{\partial y}$\egroup

On effectue des développements limités à l'ordre 1 dans les équations précédentes, qui conduisent à l'équation d'équilibre de la membrane:

$\displaystyle -\frac{\partial}{\partial x}\left(T\frac{\partial u}{\partial x}\...
...)-\frac{\partial}{\partial y}\left(T\frac{\partial u}{\partial y}\right)=f(x,y)$ (4.1)

auquel on ajoute les conditions aux limites:

\bgroup\color{black}$\displaystyle u(0,y)=u(a,y)=u(x,0)=u(x,a)=0$\egroup

En effectuant un changement de variables, on obtiens le problème modèle suivant, qui est une équation de Poisson:

$\displaystyle -\Delta U=F  $       dans $\displaystyle  \Omega=]0,1[*]0,1[$ (4.2)
$\displaystyle U(0,y)=U(1,y)=U(x,0)=U(x,1)=0$    

4.2.2 Étude de la solution analytique

Pour déterminer la solution générale de l'équation de Poisson (4.2), on décompose \bgroup\color{black}$ U(x,y)$\egroup en série de Fourier vérifiant les conditions aux limites:

$\displaystyle U(x,y)=\sum_{k=1}^{\infty}\sum_{p=1}^{\infty}U_{kp}\sin\left(k\pi x\right)\sin\left(p\pi y\right)$ (4.3)

En remplaçant dans (4.2), on obtiens:

\bgroup\color{black}$\displaystyle \sum_{k=1}^{\infty}\sum_{p=1}^{\infty}(k^{2}+p^{2})\pi^{2}U_{kp}\sin\left(k\pi x\right)\sin\left(p\pi y\right)=F(x,y)$\egroup

d'où les valeurs de \bgroup\color{black}$ U_{kp}$\egroup , en multipliant cette relation par \bgroup\color{black}$ \sin\left(k\pi x\right)\sin\left(p\pi x\right)$\egroup . En intégrant sur le domaine \bgroup\color{black}$ \Omega$\egroup et en utilisant l'orthogonalité des fonctions \bgroup\color{black}$ \sin(k\pi x)$\egroup , il vient:

$\displaystyle U_{kp}=\frac{4}{(k^{2}+p^{2})\pi^{2}}\int_{0}^{1}\int_{0}^{1}F(x,y)\sin\left(k\pi x\right)\sin\left(p\pi y\right)dxdy$ (4.4)

4.2.2.1 cas d'un chargement constant \bgroup\color{black}$ F=-1$\egroup

Dans le cas d'un chargement constant \bgroup\color{black}$ F=-1$\egroup , la valeur du coefficient de Fourier \bgroup\color{black}$ U_{kp}$\egroup se calcule simplement avec Maple et on trouve:

\bgroup\color{black}$\displaystyle U_{kp}=\frac{-4}{(k^{2}+p^{2})\pi^{4}kp}\left(1-(-1)^{k}\right)\left(1-(-1)^{p}\right)$\egroup

Ce coefficient est non nul si et seulement si \bgroup\color{black}$ k$\egroup et \bgroup\color{black}$ p$\egroup sont tous les deux impaires. La solution exacte s'écrit donc:

$\displaystyle U(x,y)=\sum_{l=1}^{\infty}\sum_{m=1}^{\infty}U_{lm}\sin\left((2l-1)\pi x\right)\sin\left((2m-1)\pi y\right)$    
avec  $\displaystyle U_{lm}=\frac{-16}{((2l-1)^{2}+(2m-1)^{2})\pi^{4}(2l-1)(2m-1)}$    

L'allure de la solution est donnée sur la figure (4.2).

Figure 4.2: solution exacte de (4.2) pour $ F=-1$
\includegraphics[width=0.25\paperwidth,keepaspectratio]{CHAP4/solexacte}

La valeur maximale \bgroup\color{black}$ U_{max}$\egroup de la déformation se trouve au centre et a pour expression:

\bgroup\color{black}$\displaystyle U_{max}=\sum_{l=1}^{\infty}\sum_{m=1}^{\infty}\frac{16(-1)^{l+1}(-1)^{m+1}}{((2l-1)^{2}+(2m-1)^{2})\pi^{4}(2l-1)(2m-1)}$\egroup

On peut calculer une valeur approchée très précise de cette série avec Maple, et on trouve (pour \bgroup\color{black}$ m=l=200$\egroup ):

$\displaystyle U_{max}=-0.07367135123$ (4.5)


4.2.3 Schéma aux différences finies pour le laplacien

Sur un maillage de \bgroup\color{black}$ N_{x}$\egroup points suivant \bgroup\color{black}$ x$\egroup et \bgroup\color{black}$ N_{y}$\egroup points suivant \bgroup\color{black}$ y$\egroup (figure 4.3), la discrétisation par différences finies centrées de l'équation (4.2) s'écrit:


$\displaystyle \frac{-U_{i+1,j}+2U_{i,j}-U_{i-1,j}}{dx^{2}}+\frac{-U_{i,j+1}+2U_{i,j}-U_{i,j-1}}{dy^{2}}$ $\displaystyle =$ $\displaystyle F_{i,j}$ (4.6)
$\displaystyle \forall i=2,N_{x}-1   \forall j=2,N_{y}-1$      

avec les conditions aux limites:

\bgroup\color{black}$\displaystyle U_{1,j}=U_{N_{x},j}=0  \forall j=1,N_{y}  $\egroup   et  \bgroup\color{black}$\displaystyle U_{i,1}=U_{i,N_{y}}=0  \forall i=1,N_{x}$\egroup

Les pas de discrétisation en espace sont équidistants et vérifient \bgroup\color{black}$ dx=\frac{1}{N_{x}-1}$\egroup et \bgroup\color{black}$ dy=\frac{1}{N_{y}-1}$\egroup .

Figure 4.3: discrétisation différences finies du laplacien
\begin{figure}\begin{centering}
\input{schemlap2d.pstex_t}
\par
\end{centering}\par\par
\end{figure}

Ce schéma conduit à un système matriciel de \bgroup\color{black}$ N=N_{x}N_{y}$\egroup inconnues \bgroup\color{black}$ U_{i,j}$\egroup . Pour écrire ce système sous la forme matricielle \bgroup\color{black}$ \mathcal{A}X=\mathcal{B}$\egroup , on doit transformer la matrice des inconnues \bgroup\color{black}$ U_{i,j}$\egroup en un vecteur inconnu \bgroup\color{black}$ X_{k}$\egroup . Pour cela on numérote les inconnues par lignes, i.e. on effectue la transformation d'indice \bgroup\color{black}$ (i,j)$\egroup vers le mono-indice \bgroup\color{black}$ k=i+(j-1)N_{x}$\egroup . Avec ce changement d'indice, l'équation aux différences (4.6) s'écrit:

\bgroup\color{black}$\displaystyle cU_{k-N_{x}-1}+bU_{k-1}+aU_{k}+bU_{k+1}+cU_{k+N_{x}+1}=F_{k}$\egroup

pour tous les noeuds internes \bgroup\color{black}$ k=i+(j-1)N_{x}$\egroup avec \bgroup\color{black}$ 1<i<N_{x}$\egroup et \bgroup\color{black}$ 1<j<N_{y}$\egroup en notant \bgroup\color{black}$ a=\frac{2}{dx^{2}}+\frac{2}{dy^{2}}$\egroup , \bgroup\color{black}$ b=\frac{-1}{dx^{2}}$\egroup et \bgroup\color{black}$ c=\frac{-1}{dy^{2}}$\egroup .

Les conditions aux limites s'écrivent \bgroup\color{black}$ U_{k}=0$\egroup pour les noeuds frontières \bgroup\color{black}$ k=1+(j-1)N_{x}$\egroup , \bgroup\color{black}$ k=N_{x}+(j-1)N_{x}$\egroup avec \bgroup\color{black}$ 1<j<N_{y}$\egroup et \bgroup\color{black}$ k=i$\egroup , \bgroup\color{black}$ k=i+(N_{y}-1)N_{x}$\egroup avec \bgroup\color{black}$ 1<i<N_{x}$\egroup .

La matrice \bgroup\color{black}$ \mathcal{A}$\egroup est une matrice penta-diagonale dont la forme est donnée sur la figure (4.4a). On vérifie que la matrice possède bien au maximum 5 coefficients non nuls répartis sur la diagonale de coefficients \bgroup\color{black}$ a$\egroup , les 2 co-diagonales adjacentes de coefficients \bgroup\color{black}$ b$\egroup et les 2 co-diagonales distantes de \bgroup\color{black}$ N_{x}-1$\egroup de la diagonale de coefficients \bgroup\color{black}$ c$\egroup . On constate aussi que la matrice \bgroup\color{black}$ \mathcal{A}$\egroup est non symétrique, à cause de la façon d'appliquer les conditions aux limites. En effet pour un noeud \bgroup\color{black}$ k$\egroup sur la frontière, on applique la condition aux limites \bgroup\color{black}$ X_{k}=0$\egroup dans la ligne \bgroup\color{black}$ k$\egroup de la matrice en annulant la ligne et en mettant \bgroup\color{black}$ 1$\egroup sur la diagonale. On ne tiens pas compte de cette condition aux limites dans les équations où intervient la valeur de \bgroup\color{black}$ X_{k}$\egroup , i.e. dans les lignes de \bgroup\color{black}$ \mathcal{A}$\egroup ayant un coefficient non nul dans la colonne \bgroup\color{black}$ k$\egroup . Pour conserver la symétrie de la matrice, qui traduit la symétrie du problème physique, il faut aussi annuler les coefficients de la colonne \bgroup\color{black}$ k$\egroup (figure 4.4b). Dans le cas \bgroup\color{black}$ X_{k}=X_{0}$\egroup , il faut en outre retrancher la colonne \bgroup\color{black}$ X_{0}\mathcal{A}_{k,j}$\egroup du second membre \bgroup\color{black}$ \mathcal{B}$\egroup .

Figure 4.4: matrice du laplacien pour $ N_{x}=7$ et $ N_{y}=7$
[matrice initiale]\includegraphics[width=0.25\paperwidth,keepaspectratio]{CHAP4/matrice1}[matrice symétrisée]\includegraphics[width=0.25\paperwidth,keepaspectratio]{CHAP4/matrice2}

On note aussi que le nombre de coefficients non nuls de la matrice \bgroup\color{black}$ \mathcal{A}$\egroup est de l'ordre de \bgroup\color{black}$ 5N_{x}N_{y}\approx5N^{2}$\egroup , ce qui est beaucoup plus petit que le nombre de coefficients \bgroup\color{black}$ N_{x}^{2}N_{y}^{2}\approx N^{4}$\egroup de la matrice \bgroup\color{black}$ \mathcal{A}$\egroup . On tiendra compte de ces propriétés lors de la résolution du système matriciel.

4.2.3.1 Précision et erreur de troncature

On utilise une discrétisation centrée et d'ordre 2 de la dérivée seconde en \bgroup\color{black}$ x$\egroup et en \bgroup\color{black}$ y$\egroup , donc l'erreur de troncature du schéma est d'ordre \bgroup\color{black}$ O(dx^{2},dy^{2})$\egroup . Elle s'écrit:

\bgroup\color{black}$\displaystyle ErrT=\frac{1}{12}\frac{\partial^{4}U}{\partia...
...rac{1}{12}\frac{\partial^{4}U}{\partial y^{4}}  dy^{2}+O(dx^{4},dy^{4})$\egroup

La précision du schéma (4.6) est donc d'ordre 2 en espace, i.e. en \bgroup\color{black}$ O(dx^{2},dy^{2})$\egroup .

4.2.4 Expérimentation numérique avec Matlab

La fonction Matlab laplace2d (4.2.4) calcule la matrice \bgroup\color{black}$ \mathcal{A}$\egroup et le second membre \bgroup\color{black}$ \mathcal{B}$\egroup sur un maillage différences finis de \bgroup\color{black}$ N_{x}N_{y}$\egroup points pour une fonction \bgroup\color{black}$ F$\egroup définie aux noeuds \bgroup\color{black}$ (i,j)$\egroup du maillage et des conditions aux limites homogènes. Compte tenu des remarques sur la structure de la matrice \bgroup\color{black}$ \mathcal{A}$\egroup , on utilise une structure de donnée de matrice creuse (sparse matrix en anglais) qui permet de ne stocker que les éléments non nuls. Pour cela on stocke les coefficients non nuls de \bgroup\color{black}$ \mathcal{A}$\egroup dans un vecteur Ac, ainsi que leurs indices (i,j) dans deux autres vecteurs I et J. Pour la matrice \bgroup\color{black}$ \mathcal{A}$\egroup ci dessous:

\bgroup\color{black}$\displaystyle \mathcal{A}=\left[\begin{array}{ccccc}
4 & -1...
...4 & -1 & 0\\
0 & 0 & -1 & 4 & 0\\
-1 & 0 & 0 & 0 & 4\end{array}\right]$\egroup

on utilise les 3 tableaux suivants:


$\displaystyle Ac$ $\displaystyle =$ $\displaystyle \left[\begin{array}{ccccccccccc}
4 & -1 & -1 & -1 & 4 & 4 & -1 & -1 & 4 & -1 & 4\end{array}\right]$  
$\displaystyle I$ $\displaystyle =$ $\displaystyle \left[\begin{array}{ccccccccccc}
1 & 1 & 1 & 2 & 2 & 3 & 3 & 4 & 4 & 5 & 5\end{array}\right]$  
$\displaystyle J$ $\displaystyle =$ $\displaystyle \left[\begin{array}{ccccccccccc}
1 & 2 & 5 & 1 & 2 & 3 & 4 & 3 & 4 & 1 & 5\end{array}\right]$  

Pour utiliser cette structure de données avec Matlab, on initialise \bgroup\color{black}$ \mathcal{A}$\egroup avec la fonction Matlab spalloc (ligne 18), qui permet de créer une matrice creuse de \bgroup\color{black}$ 5N$\egroup éléments, au lieu d'utiliser la fonction zeros(N,N) qui crée une matrice carrée de \bgroup\color{black}$ N^{2}$\egroup éléments. Pour \bgroup\color{black}$ N_{x}=N_{y}=100$\egroup , on a \bgroup\color{black}$ N=10^{4}$\egroup et le stockage de \bgroup\color{black}$ A$\egroup sous forme de matrice creuse nécessite alors \bgroup\color{black}$ 640$\egroup kilo-octets de mémoire au lieu des \bgroup\color{black}$ 100$\egroup méga-octets nécessaire au stockage de tous les coefficients de \bgroup\color{black}$ \mathcal{A}$\egroup , ce qui rend la résolution du problème possible sur un ordinateur de bureau. On remarque aussi que la taille nécessaire au stockage de \bgroup\color{black}$ \mathcal{A}$\egroup est supérieur à \bgroup\color{black}$ 5N$\egroup réels (soit \bgroup\color{black}$ 400$\egroup kilo-octets) puisque pour chaque valeur non nulle \bgroup\color{black}$ \mathcal{A}_{pq}$\egroup on stocke aussi les indices \bgroup\color{black}$ p$\egroup et \bgroup\color{black}$ q$\egroup correspondants.


programme Matlab 4.2.4: Fonction laplace2d: calcul de la matrice du laplacien

function [A,B]=laplace2d(F,nx,ny)
% entree:
% matrice F du second membre Fij valeur de F au noeud (i,j)
% nx,ny  nombre de points en x et en y
% sortie:
% matrice A et second membre B
% en utilisant un stocage creux 
% pble  -lap(U)=f avec des C.L. homogene
dx=1/(nx-1); dy=1/(ny-1);
% coefficiant du shema pour les nds
% (i,j-1) (i-1,j) (i,j) (i+1,j) (i,j+1)
coeff=[-1/dy^2,-1/dx^2,2/dx^2+2/dy^2,-1/dx^2,-1/dy^2];
% decalage / au neud (i,j) dans la numérotation
num = [  -nx, -1, 0, 1, nx];
% assemblage de la matrice pour un stocage par ligne
% i.e le noeud (i,j) a pour adresse k=(j-1)*nx+i
N=nx*ny; % dimension
A=spalloc(N,N,5*N); % matrice creuse de 5 elts maxi / ligne
B=reshape(F,N,1);
for i=2:nx-1
    for j=2:ny-1
        k=(j-1)*nx+i;
        A(k,k+num)=coeff;
    end
end
% conditions aux limites
% ======================
% C.L. sur les frontieres i=1,i=nx (Dirichlet)
for j=1:ny
    k=(j-1)*nx+1; A(k,:)=0; A(:,k);A(k,k)=1.0; B(k)=0;
    k=(j-1)*nx+nx; A(k,:)=0; A(:,k)=0; A(k,k)=1.0; B(k)=0;
end;
% C.L. sur les frontieres j=1,j=ny (Dirichlet)
for i=1:nx
    k=i; A(k,:)=0; A(:,k)=0; A(k,k)=1.0; B(k)=0;
    k=(ny-1)*nx+i; A(k,:)=0; A(:,k)=0; A(k,k)=1.0; B(k)=0;
end;
% fin

Pour le second membre \bgroup\color{black}$ \mathcal{B}$\egroup on transforme la matrice \bgroup\color{black}$ F$\egroup des valeurs aux noeuds du maillage en un vecteur de colonne de dimension \bgroup\color{black}$ N$\egroup avec la fonction Matlab reshape. La boucle d'assemblage de \bgroup\color{black}$ \mathcal{A}$\egroup correspond aux lignes 20 à 25, et se fait ligne par ligne en utilisant la structure matricielle de Matlab (ligne 23). Les conditions aux limites sont imposées sur les cotés \bgroup\color{black}$ x=0$\egroup et \bgroup\color{black}$ x=1$\egroup (lignes 29 à 32) et \bgroup\color{black}$ y=0$\egroup et \bgroup\color{black}$ y=1$\egroup (lignes 34 à 37), en annulant la ligne et la colonne \bgroup\color{black}$ k$\egroup de \bgroup\color{black}$ \mathcal{A}$\egroup ainsi que le second membre \bgroup\color{black}$ \mathcal{B}_{k}$\egroup puis en imposant \bgroup\color{black}$ \mathcal{A}_{k,k}=1$\egroup .

Le script Matlab (4.2.4) résout numériquement le problème (4.2) dans le cas d'une fonction \bgroup\color{black}$ F=-1$\egroup (ligne 8). On utilise la fonction Laplace2d précédente pour calculer la matrice \bgroup\color{black}$ \mathcal{A}$\egroup et le second membre \bgroup\color{black}$ \mathcal{B}$\egroup du problème. On résout le système (ligne 11) avec l'opérateur standard \bgroup\color{black}$  \setminus$\egroup de Matlab, qui pour des matrices creuses utilisent un algorithme de Gauss par bande. C'est la méthode la plus efficace sous Matlab, même si elle nécessite un stockage temporaire important, de l'ordre de \bgroup\color{black}$ 2N_{x}^{2}N_{y}$\egroup puisque la largeur de bande vaut \bgroup\color{black}$ N_{x}$\egroup . En utilisant la structure particulière de la matrice \bgroup\color{black}$ \mathcal{A}$\egroup (tri-diagonale par blocs), on pourrait utiliser un algorithme très efficace, qui est l'extension de l'algorithme de Thomas. Son principe est décrit dans l'annexe 3DBloc, mais il n'est pas implémenté sous Matlab.

La fin du script permet la visualisation en 3D de la solution calculée.


programme Matlab 4.2.4: Résolution du problème (4.2)

% resolution du laplacien
clear
% dimension
nx=21; ny=21;
dx=1/(nx-1); dy=1/(ny-1);
X=[0:dx:1]; Y=[0:dy:1];
% assemblage matrice et 2nd membre
F=-ones(nx,ny);
[A,B]=laplace2d(F,nx,ny);
% resolution
U=A\B;
% transformation de U en matrice pour visualisation
U1=reshape(U,nx,ny);
% visualisation
surfc(X,Y,U1); title('deformee'); shading interp;

On a tracé le résultat obtenu pour \bgroup\color{black}$ N_{x}=N_{y}=21$\egroup sur la figure (4.5). En comparant avec la solution exacte (figure 4.2), on constate une bonne concordance. L'erreur relative sur la valeur maximale de la déformée est inférieure à 3%:

\bgroup\color{black}$\displaystyle Err=\left\vert\frac{U_{max}-U_{max}^{h}}{U_{max}}\right\vert\approx0.027$\egroup

où on a noté \bgroup\color{black}$ U_{max}$\egroup la valeur exacte (4.5) et \bgroup\color{black}$ U_{max}^{h}$\egroup est la valeur approchée.

Figure 4.5: solution numérique ( $ N_{x}=N_{y}=11$ ) du problème (4.2)
\includegraphics[width=0.25\paperwidth,keepaspectratio]{CHAP4/solDF}

Pour terminer cette étude, nous avons effectué une étude de précision en calculant cette erreur relative pour différents maillages (avec un nombre de points identique suivant \bgroup\color{black}$ x$\egroup et \bgroup\color{black}$ y$\egroup ). Chaque maillage est caractérisée par un pas de discrétisation \bgroup\color{black}$ h=dx=dy$\egroup . Sur la figure (4.6), on a tracé l'évolution de l'erreur relative \bgroup\color{black}$ Err$\egroup en fonction de \bgroup\color{black}$ h$\egroup , et on trouve sur une échelle logarithmique une droite de pente 2. Cela montre que l'erreur relative est en \bgroup\color{black}$  O(h^{2})$\egroup , ce qui confirme le calcul de l'erreur de troncature en \bgroup\color{black}$ O(dx^{2},dy^{2})$\egroup .

Figure 4.6: Erreur relative en fonction du pas $ h$ du maillage
\includegraphics[width=0.25\paperwidth,keepaspectratio]{CHAP4/ErrLap2d}


Pr. Marc BUFFAT
marc.buffat@univ-lyon1.fr
2008-04-07