4.5.1 Un exemple : la diffusion de la chaleur ` a une dimension.
La loi de Fourier de diffusion de la chaleur dit simple-ment que le flux de chaleur en un point est proportionnel au gradient de temp´erature :
φ(~r) =~ −κ(~r)grad~ T(~r)
o`u κ(~r) est la conductivit´e thermique qui d´epend de la nature du milieu. Si celui-ci est homog`ene,κest une con-stante, sinonκd´epend de la position~r.
Si l’on produit de la chaleur en un point~r donn´e (par effet Joule ou par un apport quelconque, ou encore au contraire par une perte dans l’atmosph`ere), cette chaleur doit diffuser et cette chaleur diffus´ee par unit´e de temps doit ˆetre ´egale `a la quantit´e ˙Q(~r) de chaleur produite par unit´e de temps, ce qui donne :
div~φ(~r) = ˙Q(~r)
En combinant ces deux ´equations, on obtient facilement : grad~ κ(~r)·grad~ T(~r) +κ(~r) ∆T(~r) =−Q(~r)˙ (4.5) Cette ´equation, alli´ee `a d’´eventuelles conditions aux lim-ites, permet, en principe, de calculer la distribution de temp´erature en r´egime stationnaire dans un objet, con-naissant ˙Q(~r) et κ(~r). Autant dire que ce n’est pas tou-jours facile : que faudrait-il faire pour une r´esolution num´erique ?
Pour simplifier, on se restreindra ici `a une dimension, mais le probl`eme n’est pas tr`es diff´erent `a trois dimensions, du moins dans des g´eom´etries simples. L’´equation (4.5) se r´eduit alors `a :
dκ dx
dT
dx +κd2T
dx2 =−Q(x)˙
Le premi`ere ´etape est de discr´etiser le probl`eme : on pose,
x=i δx
o`uiest un entier etδxun pas d’int´egration, similaire `a ce qui a d´ej`a ´et´e vu dans le chapitre 4.3.2. On note alors :
T(x) =T(i δx) =Ti
La d´eriv´ee dT
dx peut ˆetre approch´ee par : dT
dx ∼ Ti+1−Ti
δx
ou bien
dT
dx ∼ Ti−Ti−1
δx
56 Licence de physique L3 : PHYTEM, Universit´e Pierre et Marie Curie Paris-6 & ENS-Cachan
ou encore :
dT
dx ∼Ti+1−Ti−1
2δx
On pr´ef`erera la troisi`eme forme plus sym´etrique. La d´eriv´ee seconde, la d´eriv´ee de la d´eriv´ee, s’´ecrit :
d2T Cela donne donc, avec des notations ´evidentes : dκ de segments sur le barreau : c’est a priori un nombre qui peut ˆetre grand, quelques centaines, milliers, voire plus ; or, l’´equation (4.6) se re´ecrit ais´ement :
1 Ti. On vient de reformuler le probl`eme comme un syst`eme lin´eaire de n´equations `aninconnues (les Ti) : si on peut trouver des m´ethodes pour r´esoudre de tr`es gros syst`emes d’´equations lin´eaires, alors le probl`eme ci-dessus peut ˆetre consid´er´e comme r´esolu.
4.5.2 Syst` emes d’´ equations lin´ eaires.
Au del`a de n= 2 ou 3, il ne faut surtout pas tenter de r´esoudre le syst`eme lin´eaire en proc´edant par ´elimination comme on le fait d’habitude pour une r´esolution `a la main : les probl`emes de stabilit´e num´erique deviennent tr`es vite cruciaux. Il vaut bien mieux utiliser des sous-programmes de biblioth`eque : ce sont des programmes d´ej`a ´ecrits, sou-vent depuis longtemps, ´eprouv´es, dont les qualit´es et les d´efauts sont connus, compil´es et rassembl´es dans des bib-lioth`eques. Il suffit d’appeller le sous-programme choisi par uncalldans le programme que l’on a ´ecrit comme n’im-porte quel autre sous-programme, en suivant toutefois les indications fournies dans la documentation10 puis d’in-voquer la biblioth`eque lors de la compilation : c’est en g´en´eral une option de compilation11 : le compilateur ira puiser dans la biblioth`eque ce dont il a besoin. . .
Il n’y a donc aucune raison de r´einventer la roue ! C’est en fait une d´emarche tr`es courante en calcul scientifique : on se pose un probl`eme de physique, puis on se demande comment le traduire de fa¸con `a le traiter avec un pro-gramme de biblioth`eque d´ej`a existant.
10. Souvent en ligne.
11. g´en´eralement, l’option-l(pourlibrary=biblioth`eque), par ex-emple avec la biblioth`equelinpack:g95 machin.f90 -llinpack -o machin.
Dans le cas pr´esent, un syst`eme d’´equations lin´eaires se pr´esente de la fa¸con suivante :
o`u l’on cherche lesxi. Le probl`eme peut se reformuler en termes matriciels :
Pour ce qui est de la matrice A, il faut savoir que fortran stocke les matrices multicolonnes colonne par colonne : une colonne, puis une autre, puis une autre.
En m´emoire, se succ`edent ainsi : a11, a21, a31,· · · an1
(premi`ere colonne),a12, a22,. . .(deuxi`eme colonne),. . . etc., c’est-`a-dire que le premier indice≪ va le plus vite ≫ (en C, c’est l’inverse). Si l’on veut ´ecrire des programmes effi-caces, il faut tenter de privil´egier les appels `a des ´el´ements successifs en m´emoire12, et donc dans les boucles im-briqu´ees, mettre autant que possible, le premier indice dans la boucle la plus interne. Par exemple :
do j = 1, n ! boucles dans le bon ordre a(1:n,j) = ...
enddo
et non l’inverse :
do i = 1, n ! boucles dans le mauvais ordre a(i,1:n) = ...
enddo
Pour r´esoudre le syst`eme d’´equations, on pourrait imag-iner qu’il suffise de calculer l’inverse de la matrice A et faire le produit :
x=A−1·b
mais il se trouve que les algorithmes de r´esolution directe du syst`eme d’´equations sont plus efficaces.
4.5.2.1 La m´ethode LU
C’est le v´eritable cheval de bataille de tous ces probl`emes (voir r´ef. [3] pour une discussion plus appro-fondies des qualit´es et d´efauts des diff´erentes m´ethodes, par exemple Gauss-Jordan).
12. Parce que le compilateur g`ere mieux les transferts entre m´emoire et processeur de paquets de nombres connexes que des nom-bres pris dans n’importe quel ordre.
Imaginons que l’on ait d´ecompos´e la matrice A en un produit de deux matrices :
A=L·U
o`u L est une matrice triangulaire inf´erieure (L = lower) qui n’a des ´el´ements que sur et sous la diagonale :
L= sup´erieure (U=upper) qui n’a des ´el´ements que sur et au dessus de la diagonale :
U=
Le syst`eme initial se re´ecrit : L·(U·x) =b il reste `a chercherytel que :
L·y=b puisxtel que :
U·x=y
L’avantage de proc´eder ainsi est que maintenant le syst`eme est trivial `a cause de la forme triangulaire des deux ma-trices :
puis, en proc´edant de mˆeme `a l’envers : xn = yn
unn
· · ·
Reste `a faire la d´ecomposition proprement dite.
Il s’agit d’un algorithme typique de ceux dont sont friands les amateurs. Nous le d´etaillons ici pour le plaisir de ce genre de tourisme13! Cela s’appelle l’algorithme de Crout. priori non nuls, ainsi queU, soitn2+ninconnues, et donc nde trop. On fixe alors :
lii= 1, ∀i
13. Et surtout pas pour l’apprendre par cœur. . .
Pouri≤j, on obtient ais´ement : Tous les termes dans les sommes des ´equations (4.8) et (4.9) sont d´ej`a calcul´es `a condition d’appliquer les deux
´equations par i croissants pour unj donn´e, puis changer dej. Il ne s’agit finalement que d’un r´eordonancement tr`es simple du probl`eme.
En g´en´eral, les programmes qui appliquent cet algo-rithmes d´etruisent le contenu de la matriceAen rangeant les ´el´ements de L dans la partie inf´erieure de A, et les
´el´ements deUdans la partie sup´erieure, sachant que leslii
ne sont pas conserv´es, puisqu’ils valent 1. En outre, afin de limiter les d´egˆats lors des divisions parujj dans l’´equation (4.9), un certain r´earrangement des lignes et colonnes du syst`eme d’´equations doit ˆetre fait pour commencer par les ´el´ements pour lesquels ujj est grand (une divi-sion par un nombre tr`es petit donne parfois des r´esultats impr´evisibles). Les programmes de biblioth`eque font cela et souvent fournissent en prime des diagnostics lorsqueA est singuli`ere, ou trop proche d’une matrice singuli`ere.
4.5.2.2 Am´elioration it´erative de la pr´ecision.
Il faut n´eanmoins faire un peu attention `a la pr´ecision du r´esultat obtenu, car les termes du type 1
lii
et 1 uii
dans les
´equations (4.7) et (4.9) peuvent donner lieu `a des surprises si les diviseurs sont petits. Il y a plusieurs fa¸cons de s’en sortir. La premi`ere consiste `a utiliser un sous-programme de biblioth`eque capable de d´etecter ce genre de probl`eme : pratiquement toutes les biblioth`eques en proposent. Un autre test possible est de comparer les r´esultats obtenus en simple et en double pr´ecision.
Une cure possible est de partir d’une solution approch´ee x′, et donc fausse, obtenue par, mettons, la m´ethodeLU et de chercher `a l’am´eliorer.
Soit :
qui est un syst`eme que l’on peut r´esoudre pour obtenirδx.
On peut alors corrigerx′ et recommencer jusqu’`a obtenir la pr´ecision voulue, `a condition ´evidemment que l’algo-rithme converge. . .
Il faut savoir cependant que les biblioth`eques pro-posent g´en´eralement un tr`es grand nombre de sous-programmes pr´evus pour des cas tr`es divers : il est donc conseill´e de choisir le programme adapt´e. Toutefois, pour la plupart des probl`emes ≪ standards ≫ du physi-cien, la m´ethodeLU est tr`es satisfaisante, mais pour les probl`emes exigeant d’´enormes matrices creuses tels que les
58 Licence de physique L3 : PHYTEM, Universit´e Pierre et Marie Curie Paris-6 & ENS-Cachan
m´ethodes d’´el´ements finis (pour la r´esolution de probl`emes de m´ecanique des fluides par exemple), des m´ethodes sp´ecialement pr´evues `a cet effet doivent ˆetre utilis´ees.
4.5.2.3 Matrice inverse.
Une fois la d´ecomposition achev´ee, il est facile de
rem-placer bpar :
ce qui donne la premi`ere colonne de A−1 dansx, puis on proc`ede colonne par colonne en posant :
b=
en pla¸cant le nombre 1 sur lai-`eme ligne debpour obtenir lai-`eme colonne deA−1.
4.5.2.4 D´eterminant d’une matrice.
C’est encore plus simple : detA=
Yn j=1
ujj
4.5.2.5 Matrice tridiagonale.
Si l’on ´etudie l’´equation (4.6), on s’aper¸coit vite que seuls les termes en i−1, i et i+ 1 sont non nuls. La matrice A ne comporte alors que des termes diagonaux, sous-diagonaux et sur-diagonaux : elle est donc tridiago-nale : Dans ce cas, il n’est nul besoin de stocker toute la matrice A avec sesn2 ´el´ements puisque, pour la plupart, ils sont nuls. On ´ecrit plutˆot
A= qui ne n´ecessite que trois tableaux den´el´ements,dpour la diagonale, e pour la sous-diagonale et f pour la sur-diagonale. Noter que e1et fn ne sont pas d´efinis.
Les ´equations (4.8) et (4.9) se r´eduisent `a : i=j−1 uj−1j= ej
i=j ujj = dj−ljj−1uj−1j
i=j+ 1 lj+1j= fj
ujj
Les ´equations ci-dessus ne constituent pas en elles-mˆeme l’int´erˆet principal de ce paragraphe : le but est ici d’attirer l’attention sur le fait que pour un type de matrice, la m´ethode de r´esolution que l’on choisira n’est pas toujours la mˆeme que pour un autre type de ma-trice. Les biblioth`eques sont parfois fort riches et il est de bon ton de chercher un peu dans la documentation quel peut ˆetre le sous-programme le plus adapt´e au cas parti-culier envisag´e. Il existe des solutions pour des matrices
≪ bande-diagonales ≫ ou des solutions it´eratives par ap-proximations successives pour des probl`emes difficiles, des d´ecompositions en valeurs singuli`eres quand le probl`eme se pose. . ., les ressources sont abondantes, parfois un peu trop, mˆeme !
4.5.3 Une g´ en´ eralisation de la m´ ethode de Newton ` a plusieurs dimensions.
Au chapitre 4.1.2, on a mentionn´e le fait que la m´ethode de Newton de recherche de z´ero pouvait se g´en´eraliser `a plusieurs dimensions. Cela peut ˆetre utile, si par exemple, au lieu d’un seul pendule comme dans l’exemple, on en avait plusieurs coupl´es entre eux et non plus astreints `a se d´eplacer dans un plan : on aurait alors deux angles polaires par pendule `a trouver et donc un syst`eme de 2N variables
`
a rechercher.
C’est le moment de s’y attaquer. Soit doncnfonctions denvariables
fj(x1, . . . , xi, . . . , xn), ∀j ∈[1, n]
dont on suppose qu’elles poss`edent un z´ero et qu’elles sont raisonnablement ≪ civilis´ees ≫14 : ces fonctions ne sont toutefois ´evidemment pas lin´eaires.
On d´emarre la recherche comme avant `a partir d’un point de d´epart :
x(0)1 , . . . , x(0)i , . . . , x(0)n on lin´earise alors les fonctions localement :
fj(x1, . . . , xi, . . . , xn) ci-dessus se re´ecrivent :
∂fj
14. Le termecivilis´epour une fonction signifie en gros que l’algo-rithme que l’on va utiliser marche. . .
−fj(x(0)1 , . . . , x(0)i , . . . , x(0)n )
C’est un syst`eme d’´equations lin´eaires dont les inconnues sont les{dxi}:
J·dx(1)=−f(0)
avec des notations sans surprise. La matriceJdes d´eriv´ees partielles, Jij =∂fj
∂xi, s’appelle la matrice jacobienne.
On r´esout donc le syst`eme, ce qui permet de calculer les {x(1)i } puis on recommence jusqu’`a convergence, comme dans le cas `a une dimension.
4.5.4 Probl` emes de vecteurs propres et de valeurs propres ou eigenproblems.
Il s’agit de r´esoudre l’´equation : A·x=λx
o`u connaissant A, on en cherche les valeurs propres λet les vecteurs propres x.
4.5.4.1 Un exemple : les modes propres d’un ensemble d’oscillateurs harmoniques coupl´es.
Prenons un cas tr`es simple : deux pendules simples coupl´es par un fil de torsion. L’´energie potentielle du syst`eme s’´ecrit :
V =−m1gcosθ1−m2gcosθ2+1
2C(θ1−θ2)2 avec des notations ´evidentes. Les ´equations du mouvement s’en d´eduisent sans difficult´e :
Puisque l’on s’int´eresse ici `a un probl`eme lin´eaire, on peut se restreindre `a des oscillations de petite amplitude, et avec l’approximation habituelle, on obtient :
un syst`eme pour lequel on cherche des solutions station-naires p´eriodiques du type :
θ1=a1eiωt, θ2=a2eiωt
ce qui se r´esout ais´ement en ´ecrivant que le d´eterminant du syst`eme est nul, etc.15
Cependant, on peut re´ecrire le probl`eme matricielle-ment :
La matriceDs’appelle la matrice dynamique du syst`eme et l’on s’aper¸coit donc que ω2 est une valeur propre de la matrice dynamique et quea en est un vecteur propre.
Pour un syst`eme 2×2 comme celui-ci, l’int´erˆet d’une telle remarque n’est pas ´evident, mais pour un syst`eme 100× 100 ? Par exemple, une mol´ecule qui comporte ne serait-ce que quelques dizaines d’atomes. . . il suffit alors d’´ecrire la matrice dynamique du syst`eme, une matricen×n o`u nest le nombre de degr´es de libert´e du syst`eme, et d’en chercher valeurs et vecteurs propres.
Il se trouve qu’il y a des algorithmes tr`es efficaces pour calculer num´eriquement les valeurs propres et les vecteurs propres de tr`es grosses matrices.
Ici encore, la fa¸con de proc´eder d´epend du type de ma-trice que l’on veut ´etudier, et ici encore, il faut faire appel
`
a des programmes de biblioth`eque.
4.5.4.2 Matrices tridiagonales sym´etriques : la m´ethode QL.
La matrice dynamique du paragraphe 4.5.4.1 peut ˆetre sym´etris´ee en rempla¸cant a1 par α1 = √
m1ℓ1a1 et a2
par α2 = √
m1ℓ2a2. De plus, si le nombre de pendules est plus grand que deux, si les pendules sont align´es et chaque pendule n’interagit qu’avec ses deux voisins les plus proches, la matrice D est tridiagonale sym´etrique. Il se trouve que beaucoup de probl`emes peuvent ˆetre ramen´es au calcul des valeurs propres d’une matrice tridiagonale sym´etrique qui est justement le cas le plus simple.
La plupart des programmes de biblioth`eque utilise la m´ethodeQLqui consiste `a faire une s´erie de transforma-tions orthogonales :
As+1=Ls·Qs
o`u Ls est une matrice triangulaire inf´erieure et Qs une matrice orthogonale, c’est-`a-dire que :
Q−s1=Qts
Une s´erie de th´eor`emes, que nous n’´etudierons pas ici, montrent que l’on peut d´ecomposerLsde la fa¸con suivante
Ls=Qts·As
´ecrireQscomme un produit de rotations planes et que la s´equence
As+1=Qts·As·Qs
15. C’est d’ailleurs un exercice conseill´e : le d´eterminant donne une
´equation bicarr´ee enω, on trouve donc deux solutions positives et donc deux fr´equences propres ; `a chaque fr´equence propre correspond un couple (a1, a2) d’amplitudes pour les deux pendules, c’est-`a-dire un mode propre. Le mouvement des pendules est une combinaison lin´eaire de ces deux modes.
60 Licence de physique L3 : PHYTEM, Universit´e Pierre et Marie Curie Paris-6 & ENS-Cachan
fera apparaˆıtre les valeurs propres sur la diagonale.
Pour l’utilisateur, il suffit de fournir deux tableaux uni-dimensionnels contenant la diagonale et la sous-diagonale de la matrice initiale A ou A0. Au retour, on obtient les valeurs propres `a la place de la diagonale en g´en´eral class´ees par ordre de valeur d´ecroissante. Si l’on veut aussi les vecteurs propres, il faut ´egalement fournir un tableau n×net. . . bien lire la documentation pour d´eterminer si un vecteur propre donn´e occupe une ligne ou une colonne de la dite matrice ! En g´en´eral, les vecteurs propres obtenus sont normalis´es `a 1, soit, pour un vecteur propreaidonn´e :
X
ℓ
a2i,ℓ= 1
o`uai,ℓ est laℓ-i`eme composante du vecteur propreai. 4.5.4.3 Rendre une matrice tridiagonale.
Quand la matrice n’a pas la forme requise, il faut la transformer d’abord, par exemple, lorsque les pendules coupl´es de notre exemple≪voient≫leurs seconds voisins, ou bien lorsque l’objet ´etudi´e est une mol´ecule en vibra-tion dont les atomes sont coupl´es les uns aux autres en trois dimensions.
La m´ethode tourne toujours autour du mˆeme genre d’op´erations : on fait une s´equence du type :
As+1=Rts·As·Rs
o`u Rs est une rotation plane judicieusement choisie et l`a encore une batterie de th´eor`emes appropri´es montre que l’on doit converger vers une matrice tridiagonale.
4.5.4.4 Probl`emes aux valeurs propres g´en´ era-lis´es.
Ce sont des probl`emes du type :
A·x=λB·x (4.10)
o`u l’on cherche les valeurs propresλet les vecteurs propres x,AetB´etant des matrices connues : voyons un exemple.
4.5.4.4.1 L’´equation de Schr¨odinger. La r´esolu-tion num´erique de l’´equar´esolu-tion de Schr¨odinger est un probl`eme particuli`erement difficile et, outre qu’un tome entier ne suffirait pas `a le traiter compl`etement (voir, par exemple, la r´ef´erence [12]), c’est un domaine o`u la recherche est active ! Ici, nous nous contenterons de l’´equation stationnaire et l’on tentera une r´esolution en d´eveloppant la fonction d’onde ψ sur une base de fonc-tions connues : c’est, a priori, une approximation car rien ne dit que la ≪ vraie≫ solution puisse ˆetre correctement d´evelopp´ee sur la base choisie, surtout si celle-ci est r´eduite
`
a un nombre fini, voire un petit nombre, de fonctions.
La consultation d’un cours de physique quantique mon-tre que l’on peut poser le probl`eme de la fa¸con suivante :
E=
Rψ∗(X)H(X)ψ(X)dX
R ψ∗(X)ψ(X)dX (4.11) o`u H est le Hamiltonien (connu) du syst`eme consid´er´e, X d´esigne l’ensemble des variables du probl`eme, ψ(X) la fonction d’onde que l’on cherche et E l’´energie (que
l’on cherche ´egalement). Pour simplifier les notations, il est d’usage d’´ecrire la mˆeme ´equation comme suit :
E=< ψ|H|ψ >
< ψ|ψ >
L’´energieE d´epend ´evidemment de la fonction d’onde et l’on montre que si l’on modifie l´eg`erementψ, E doit ˆetre minimum par rapport `a ce changement, si toutefois E et ψsont solutions du probl`eme.
On d´eveloppe alors la fonction d’onde sur une base de fonctions connuesχℓ:
ψ=X
ℓ
cℓχℓ
en esp´erant que la base choisie≪marchera≫. Le principe variationnel ci-dessus dit que le meilleur jeu de coefficients cℓ est celui pour lequelEest minimum, donc pour unδck
quelconque, leδE doit ˆetre nul au premier ordre. Avec ces notations, l’´equation (4.11) s’´ecrit :
E= X
ℓm
c∗ℓcmHℓm
X
ℓ
c∗ℓcℓ
(4.12)
o`u
Hℓm=< χℓ|H|χm>
`
a condition toutefois que la base de fonctions soit or-thonorm´ee, soit :
< χℓ|χm>=δℓm
Si l’on impose une variation δck au coefficient ck dans l’´equation (4.12), on obtient alors :
δE= X
m
δc∗kcmHkm+X
ℓ
c∗ℓδckHℓk
!X
ℓ
c∗ℓcℓ
−X
ℓm
c∗ℓcmHℓm(δc∗kck+c∗kδck)
or δE doit ˆetre nul ∀k, ∀δck, ce qui donne, apr`es avoir r´e-inject´e l’´equation (4.11) dans l’expression ci-dessus :
X
m
cmHkm=E ck ∀k autrement dit
H·c=Ec
avec des notations sans surprise. On reconnait l`a une
´equation aux valeurs propres : la r´esoudre donne `a la fois les ´energies propres et les coefficients correspondants du d´eveloppement de la fonction d’onde.
Pour des raisons diverses, il peut arriver cependant que la base de fonctions utilis´ee ne soit pas orthonorm´ee : par
Pour des raisons diverses, il peut arriver cependant que la base de fonctions utilis´ee ne soit pas orthonorm´ee : par