TP – Résolution numérique d`EDP 1 Résolution numérique de l

publicité
PC*
2014–2015 – Informatique pour tous
TP – Résolution numérique d’EDP
TP – Résolution numérique d’EDP
1
Résolution numérique de l’équation de Laplace
Dans tout ce qui suit, nx et ny seront des variables globales que l’on fixera à 70.
1.1
Discrétisation
On cherche à résoudre l’équation de Laplace ∆V = 0 sur un domaine D.
Dans le TP nous nous contenterons d’un domaine D rectangulaire de taille Lx sur Ly . Pour approximer les solution
de l’équation, nous discrétisons le domaine D, la solution sera approximée sur un nombre fini de points. On maille ainsi
le domaine en grille de pas dx = dh = h de manière à obtenir nx = Lx /h + 1 lignes verticales et ny = Ly /h + 1 lignes
horizontales.
Les points de la grille seront répérés par la ligne et la colonne sur lesquels ils se trouvent :
y
•
(0, ny − 1)
D
(i, j)
•
j
Ly
h
(0, 0)
i
•
(nx − 1, 0)
x
Lx
Quadrillage du domaine D
Les valeurs de V aux croisements du quadrillage seront stockées dans une matrice V de taille nx × ny de la manière
suivante :
∀0 6 i 6 nx − 1; ∀j ∈ ny − 1; V[i,j] = V (ih, jh)
Q1. Différences finies.
(a) Étant donnée une fonction f : R −→ R de classe C 3 donner une approximation à l’ordre 3 en h de f (a + h) et
f (a − h) et en déduire une approximation de f 00 (a) à l’aide de f (a + h), f (a − h) et f (a).
∂2V
(b) En déduire, pour i ∈ J1, nx − 2K, une approximation de
(ih, jh) à l’aide de V.
∂x2
2
∂ V
Faites de même pour
(ih, jh) en précisant les indices pour lesquels cette approximation est valide.
∂y 2
Justifier ainsi l’approximation
∀i ∈ J1, nx − 2K; ∀j ∈ J1, ny − 2K;
∆V (ih, jh) ≈
V[i + 1, j] + V[i − 1, j] + V[i, j + 1] + V[i, j − 1] − 4V[i, j]
h2
(c) Sur les bords du domaine, l’approximation n’est plus valide car les points V[i+1,j], V[i-1,j], . . .ne sont pas
tous définis.
Donner une approximation à l’ordre 2 en h de f (a + 2h) et en déduire une approximation de f 00 (a) à l’aide de
f (a + 2h), f (a + h) et f (a)..
∂2V
En déduire alors une approximation de
(ih, jh) en fonction de V[i+2,j], V[i+1],j et V[i,j].
∂x2
∂2V
De la même façon, donner une approximation de
(ih, jh) en fonction de V[i-2,j], V[i-1],j et V[i,j].
∂x2
Ainsi, avec les approximations décrites plus haut, l’équation ∆V = 0 se transforme en le système d’équation dont les
inconnues sont les V[i,j] avec i ∈ J0, nx − 1K et j ∈ J0, ny − 1K, les équations étant données par :
∀i ∈ J1, nx − 2K; ∀j ∈ J1, ny − 2K;
Lycée Louis Thuillier
V[i + 1, j] + V[i − 1, j] + V[i, j + 1] + V[i, j − 1] − 4V[i, j] = 0
1
(intérieur)
5 février 2015
PC*
2014–2015 – Informatique pour tous
TP – Résolution numérique d’EDP
pour le domaine intérieur, et pour les bords (hors coins) :
∀j ∈ J1, ny − 2K;
i = 0 V[i + 2, j] − 2V[i + 1, j] + V[i, j + 1] + V[i, j − 1] − V[i, j] = 0
V[i − 2, j] − 2V[i − 1, j] + V[i, j + 1] + V[i, j − 1] − V[i, j] = 0
(droite)
∀i ∈ J1, nx − 2K;
j = 0 V[i, j + 2] − 2V[i, j + 1] + V[i + 1, j] + V[i − 1, j] − V[i, j] = 0
(bas)
∀i ∈ J1, nx − 2K; V[i, j − 2] − 2V[i, j − 1] + V[i + 1, j] + V[i − 1, j] − V[i, j] = 0
(haut)
∀j ∈ J1, ny − 2K;
i = nx − 1
(gauche)
et enfin, les quatres équations aux coins :
i = j = 0 V[2, 0] − 2V[1, 0] + V[0, 2] − 2V[0, 1] + 2V [0, 0] = 0
(bas − gauche)
i = nx − 1; j = 0 V[i − 2, 0] − 2V[i − 1, 0] + V[i, 2] − 2V[i, 1] + 2V[i, 0] = 0
(bas − droite)
i = nx − 1; j = ny − 1
i = 0; j = ny − 1
1.2
V[i − 2, j] − 2V[i − 1, j] + V[i, j − 2] − 2V[i, j − 1] + 2V[i, j] = 0
(haut − droite)
V[2, j] − 2V[1, j] + V[i, j − 2] − 2V[i, j − 1] + 2V[0, j] = 0
(haut − gauche)
Gestion des conditions aux limites
Une équation aux dérivées partielles est souvent couplées à des conditions aux limites, c’est à dire que l’on impose à la
fonction inconnue de vérifier certaines conditions sur un sous–ensemble du domaine D. Cela peut être par exemple, V = 0
sur le bord x = 0 et V = 10 sur le bord x = Lx . Dans ce cas, la valeur de V[i,j] sera imposée pour certains couples
(i,j). Par exemple, dans le cas précédent, V[0,j]=0 et V[nx-1,j]=10, mais on peut imposer d’autres conditions aux
limites.
Nous déciderons d’implémenter les conditions aux limites sous la forme d’un tableau C à trois entrées de taille nx ×ny ×2
défini comme suit :
(
0 s’il n’y a pas de condition au limite en (i,j)
∀i ∈ J0, nx − 1K; ∀j ∈ J0, ny − 1K; C[i, j, 0] =
1 sinon, la condition étant alors V[i,j]=C[i,j,1]
Q2. Implémentation des conditions aux limites.
Écrire des fonctions condition1() et condition2(a=0.5) construisant les tableaux correspondant aux conditions
au limites suivantes :
y
a × Lx
y
Lx /3
V=0
V=10
V=0
V=10
Lx /3
a × Lx
x
(0, 0)
Condition 1
1.3
x
Condition 2
Résolution numérique : première méthode
Une fois l’équation discrétisée, le problème revient à résoudre un système déquations linéaires dont les inconnues sont
les coefficients V[i,j] avec i ∈ J0, nx − 1K, j ∈ J0, ny − 1K. Ces équations sont données par V[i,j]=C[i,j,1] si on
a une condition initiale en (i,j) et sinon, par les équations précédentes suivant les cas où on est à l’intérieur du domaine ( i ∈ J1, nx −2K; j ∈ J1, ny −2K) ou sur les bords (i = 0, i = nx −1, j = 0, j = ny −1). Il y a ainsi nx ×ny inconnues.
Il existe plusieurs méthodes pour résoudre un tel système d’équation. Pour les système pas trop gros (moins de 10000
inconnues pour un ordinateur raisonnable) on peut tenter une résolution exacte du système par une décomposition QR
ou LU . La module numpy de python contient un sous–module linalg contenant la fonction solve permettant de résoudre efficacement un tel système : si A contient une matrice N × N et B un vecteur de taille N , alors la commande
linalg.solve(A, B) renvoie la solution du système linéaire AX = B.
Pour utiliser la fonction linalg.solve il faut donc construire la matrice A du système linéaire et le second membre B.
La matrice A sera une matrice de taille N × N avec N = nx × ny qui sera construite à partir des équations précédentes
et B un vecteur de taille N qui sera donné par les conditions initiales.
Lycée Louis Thuillier
2
5 février 2015
PC*
2014–2015 – Informatique pour tous
TP – Résolution numérique d’EDP
Pour construire B, il faut aplatir la matrice V, c’est à dire ranger ses coefficients dans un longs vecteur de taille nx × ny .
Pour cela on range les coefficients colonne par colonne dans un vecteur X. Ainsi, le coefficient V[i,j] de la matrice V
correspondra au coefficient X[i+nx*j] de X :
V[i, j] ←→ X[i + nx j]
Q3. Aplatissement de la matrice
(a) Écrire une fonction num(i,j) renvoyant le numéro du coefficient (i,j) dans le vecteur X.
Écrire la fonction coeff(n) renvoyant le couple (i,j) tel que V[i,j] correspond à X[n].
(b) En déduire une fonction vecteurVersMatrice(X) qui étant donné un vecteur X de taille nx × ny renvoie la
matrice V qui lui est associée.
Q4. Construction de la matrice A et du vecteur B.
La matrice B du système linéaire est construite comme suit : si on a une condition initiale en (i,j) alors
A[num(i,j),num(i,j)]=1 et B[num(i,j)]=C[i,j,1], sinon, les coefficients de la num(i,j)–ième ligne correspondent à une des équations (intérieur), (gauche), ..., (haut-gauche). Par exemple pour un point intérieur, on aura :
avec u=num(i,j), A[u,num(i+1,j)]=1, A[u,num(i-1,j)]=1, A[u,num(i,j+1)]=1, etc. . .
Écrire une fonction consrtuireAB(C) qui étant donnée une matrice de condition initiale C, renvoie la matrice A et
le second membre B associé.
Q5. Résolution et affichage de la solution.
Résoudre le problème avec les différentes conditions initiales définies précédemment.
Pour visualiser les solutions, on pourra dans un premier temps utiliser la fonction matshow du package plot de
matplotlib. On importera ainsi ce module à l’aide de la commande import matplotlib.pyplot as plt. On peut
alors visualiser une matrice à l’aide de la commande plt.matshow(V) (ou plt.imshow(V)). Pour obtenir l’echelle
de couleur utilisée, on peut entrer la commande plt.colorbar().
Q6. Champ électrique.
Il
déterminer le champ électrique en tout point du quadrillage. On rappelle la relation E = −gradV =
s’agit ici de ∂V
∂V
,−
.
−
∂x
∂y
Pour calculer E on doit ainsi être capable d’estimer les dérivées partielles par rapport à x et y.
(a) Expliquer les approximations :

V[i + 1, j] − V[i − 1, j]


si i ∈ J1, nx − 2K


2h

∂V
1
(ih, jh) ≈
(V[i + 1, j] − V[i, j])
si i = 0

∂x
h


1

 (V[i, j] − V[i − 1, j])
si i = nx − 1
h
et donner la précision de celles–ci.
(b) Écrire une fonction E(V) qui étant donné V envoie un couple de matrice Ex et Ey donnant respectivement la
première et la seconde coordonnée du champ E en tout point du quadrillage.
(c) Écrire une fonction normeE(Ex,Ey) renvoyant une matrice donnant en chaque point du qudrillage la norme du
vecteur E.
Tracer la matrice obtenue et observer la pouvoir des pointes.
1.4
Résolution numérique : méthode par relaxation
La méthode précédente nécessite de résoudre un système linéaire avec un très grand nombre d’inconnues ce qui n’est
pas toujours possible en partique, par exemple sur des grilles possédant des millions de points. On peut alors tenter de
cherche une méthode de résolution approchée du système linéaire (lui même étant issu d’une approximation du système
réel).
On remarque que les équations que l’on doit résoudre s’écrivent sous la forme :

C[i, j, 1]
si (i,j) est une condition au limite,



 1 (V[i + 1, j] + V[i − 1, j] + V[i, j + 1] + V[i, j − 1]) (intérieur)
V[i, j] = 4

−V[i + 2, j] + 2V[i + 1, j] − V[i, j + 1] − V[i, j − 1] (gauche)



...
(1)
Ainsi, on peut voir une solution du système linéaire comme un point fixe V=F (V) où F désigne l’application qui à une
matrice V associe le second membre de (1). Une idée pour tenter de résoudre le système est de définir la suite de matrice
Lycée Louis Thuillier
3
5 février 2015
PC*
2014–2015 – Informatique pour tous
TP – Résolution numérique d’EDP
(Vn )n de la manière suivante : V0 = 0 et pour tout n, Vn+1 = F (Vn ). Si la suite (Vn )n converge vers une limite L, alors
L vérifie L = F (L), c’est à dire que L est solution du système linéaire.
Reste le problème de la convergence la suite. Celle–ci dépend beaucoup des conditions initiales, il se trouve que pour
être assuré de la convergence de la méthode, il faut donner des conditions initiales sur les bords du domaine. Ainsi, seul
les points intérieurs au domaine seront itérés suivant (hors les conditions aux limites éventuelles) :
Vn+1 [i, j] =
1
(Vn [i + 1, j] + Vn [i − 1, j] + Vn [i, j + 1] + Vn [i, j − 1])
4
Ainsi, nous étudierons une configuration similaire au second problème mais « vu de loin » :
y
Ly /4
a2Lx
4
a2Lx
4
V=-5
Ly /8
Ly /8
V=0
V=+5
Ly /4
x
Lx /4
Lx /4
Conditions aux limites 3
Pour approximer la solution du système linéaire, nous allons donc calculer la suite de matrice (Vn )n jusqu’à ce que
kVn+1 − Vn k∞ 6 seuil où seuil est un paramètre fixé. La solution approchée du système sera alors la dernière matrice
calculée.
Q7. Écrire une fonction F(V,C) qui étant donné une matrice V et des conditions au limites C renvoie un couple
(V’,erreur) avec V’=F (V) et erreur=kV0 − Vk∞ .
On supposera que les conditions aux limites contiennent les bords du domaine, de sorte que seul la formule pour
les points intérieurs sera utilisée.
On pourra commencer par ne renvoyer que V 0 puis modifier sa fonction pour calculer en même temps l’erreur.
Q8. En déduire une fonction relaxation(C,seuil,nbMaxIteration=1000) qui, étant donné une condition initiale C
et un seuil seuil, renvoie la solution approchée avec le seuil seuil.
On limitera le nombre d’itération à 1000.
Q9. Appliquer votre méthode avec la condition initiale 3 et comparer avec la méthode précédente.
Lycée Louis Thuillier
4
5 février 2015
Téléchargement