Vous êtes sur la page 1sur 43

Royaume du Maroc

Facult des Sciences rabat

Universit Mohamed V

Dpartement de physique

PROJET DE FIN DETUDES (PFE)


Filire : SCIENCE DE LA MATIERE PHYSIQUE SMP
SEMESTRE 6
Parcours : 1

METHODES DE RESOLUTION DES SYSTEMES LINEAIRES


Application aux rseaux linaires et la flexion
Dune poutre
Ralis par :

BOUKOUTAYA Oussama
Encadr par :

Mr JEDRA Mohamed
Soutenu Le 22 Juillet 2015
Devant le jury compos du:
Prsident :
Pr. Noureddine ZAHID

Professeur la facult des sciences de Rabat

Examinateurs :
Pr. Mohamed JEDRA

Professeur la facult des sciences de Rabat

Pr. Aziz ETTOUHAMI

Professeur la facult des sciences de Rabat

Anne universitaire 2014/2015

Avant-propos

Le prsent document constitue le rapport de mon travail dans le cadre du projet de fin
dtudes labor au sein de la Facult des sciences Rabat, ce projet prsente quelques
mthodes numriques de base utilises pour la rsolution des systmes linaires, ainsi
dtudier les algorithmes prsentant ses mthodes. Sachant quon va traiter deux types
de mthodes, en va dcouvrir les divers des cas imposant lutilisation de lune des
mthodes, et lavantage du choix dune et non lautres. Finalement on va traduire les
algorithmes en langage de programmation de bas niveau (C), qui nous donnera la
chance de profiter ces mthodes pour rsoudre des systmes linaires issus de la
discrtisation et linarisation des problmes dans le domaine des sciences physiques.
Ce document comporte deux chapitres, le premier chapitre cest pour but de dfinir les
deux types de mthodes, directes et itratives. Le deuxime chapitre traite deux
modles physiques, lun est un rseau linaire en lectronique, lautre en MMC par la
mthode des lments finis qui consiste dcomposer le systme exemple poutre
plusieurs lments est tudier les dplacements des nuds de chaque lment causs
par les forces appliques au centre ou rparties - sur la poutre.

Table de matires
Chapitre 1 : Mthodes de rsolution des systmes linaires ................................................................. 5
1.1.

Introduction : ........................................................................................................................... 5

1.2.

Mthodes directes................................................................................................................... 6

1.3.

1.1.1.

Mthode dlimination de Gauss ................................................................................ 6

1.1.2.

Mthode de Cholesky .................................................................................................. 8

Mthodes itratives .............................................................................................................. 10


1.1.3.

La mthode de Jacobi ................................................................................................ 12

1.1.4.

La mthode de Gauss-Seidel ..................................................................................... 13

Chapitre 2 : Application aux rseaux linaires et la flexion dune poutre ............................................ 14


2.1.

Rseaux linaires ................................................................................................................... 14

2.1.1.

Dfinition ....................................................................................................................... 14

2.1.2.

Rsolution du systme .................................................................................................. 16

2.1.3.

Application..................................................................................................................... 17

2.2.

Flexion des poutres plan moyen : modle de Bernoulli ..................................................... 19

2.2.1.

Dfinition ....................................................................................................................... 19

2.2.2.

Application..................................................................................................................... 21

Conclusion ............................................................................................................................................. 28
Annexe 1 : Programmation des mthodes numriques ....................................................................... 30
Mthodes directes................................................................................................................. 30
Mthodes itratives .............................................................................................................. 39
Annexe 2 ................................................................................................................................................ 43

Introduction gnrale

Lalgbre linaire est un outil essentiel pour toutes les branches des mathmatiques
appliques, en particulier lorsquil sagit de modliser puis rsoudre numriquement des
problmes issus de divers domaines : des sciences physiques ou mcaniques, des sciences du
vivant, de la chimie, de lconomie, des sciences de lingnieur,... Les systmes linaires
interviennent dans de nombreux contextes dapplications car ils forment la base calculatoire
de lalgbre linaire. Ils permettent galement de traiter une bonne partie de la thorie de
lalgbre linaire en dimension finie. Cest pourquoi le prsent projet commence avec une
tude des quations linaires et de leur rsolution.
Un systme dquations et un ensemble dau moins deux quations que lon peut rsoudre
laide de diverses stratgies.
11 1 + 12 2 +
21 1 + 22 2 +
+
+
1 1 + 2 2 +

+ 1 = 1
+ 2 = 2
+

=
+ =

En notation matricielle ce systme scrit

Ax = b et on rappelle quil existe une solution

unique si et seulement si det (A) 0.


Le problme consiste trouver la solution du systme de n dquations. La solution se note x
= 1 b, ce qui suggre que lon a besoin de linverse de la matrice A pour calculer x. Ceci
constitue une mthode numrique trs inefficace (~ 3 fois plus de calculs que ncessaires et 2
fois plus despace mmoire pour moins de prcision). En gnral on na quasiment jamais
besoin de linverse dans les problmes dalgbre linaire. Il nest pas non plus indiqu de
calculer 1 pour rsoudre des systmes

x(i) = 1b(i) i = 1, . . ., k mme si k est trs

grand.
En rgle gnrale, si lon na pas besoin danalyser les lments de 1 il est trs
vraisemblable quon puisse et doive viter le calcul de 1 dans le problme dalgbre
linaire considr.
4

Chapitre 1 : Mthodes de rsolution des


systmes linaires
1.1.

Introduction :

Le choix dune mthode particulire pour la rsolution dun systme linaire dpendra
galement du type et de la structure de la matrice A intervenant dans le problme.
La matrice A peut .tre caractrise par une structure :

creuse,
diagonale,
matrices par blocks,
tri diagonale (cas particulier dune matrice par bande avec b = 1),
triangulaire,

Ou par une quantification particulire, comme par exemple les matrices :

symtriques (A = ),
dfinies positives ( Ax > 0, x 0),
semi dfinies positives ( Ax 0, x 0),
matrices de Toplitz (T est une matrice de Toplitz sil existe des scalaires
rn+1 , . . . , r1 , r0 , r1 , . . . , r1, tels que Tij = rj.i quelque soit i et j),
matrices Heisenberg (une matrice de Heisenberg est une matrice triangulaire plus une
diagonale immdiatement adjacente non nulle),
Hankel, Vandermonde, . . .
etc.

Le dterminant de A joue un rle central dans les considrations thoriques, mais nest
daucune utilit pour la rsolution numrique (sauf rares exceptions). La rgle de Cramer

xi =

det(Ai )
det(A)

(1.1)

est incroyablement inefficace pour rsoudre un systme linaire si lon calcule le dterminant
selon le schma de lexpansion des mineurs.
Souvent on entend dire que lon ne peut rsoudre un systme donn car le dterminant est nul.
En utilisant des mthodes efficaces de calcul on dcouvre que le systme ne peut tre rsolu
avant davoir la valeur du dterminant.
5

La valeur du dterminant ne contient aucune information sur les problmes numriques que
lon peut rencontrer en rsolvant Ax = b.
Dans ce chapitre on discutera des techniques qui consistent transformer le problme original
en un problme ayant une forme particulire, pour laquelle la solution devient triviale ou trs
simple. Par exemple, on transforme le systme Ax = b en Ux = c avec U triangulaire (ou
diagonale) et ainsi x est facile calculer. Dans dautres situations on peut manipuler Ax = b
de la sorte obtenir le systme Rx = c avec R orthogonale, ce qui se rsout facilement par
rapport x.

1.2.

Mthodes directes

Dans cette partie, on tudie quelques mthodes directes permettant de rsoudre le systme
Ax= b ou A (), lensemble des matrices carres a n n coefficients rels, et b .
Une mthode directe est une mthode qui permet de rsoudre le systme Ax = b en un
nombre fini doprations et en arithmtique exacte. Dans ce chapitre, on prsente les
mthodes suivantes :

1.1.1.

la mthode dlimination de Gauss,


la mthode de Cholesky

Mthode dlimination de Gauss

La mthode consiste construire une matrice inversible M telle que MA = U soit une matrice
triangulaire suprieure.
Le systme initial Ax = b est alors quivalent par multiplication gauche par M inversible au
systme triangulaire M.Ax = Mb c'est dire au systme :
U.x = b , avec b = Mb
Il suffit donc d'appliquer ce dernier systme la mthode de remonte.
En fait, on ne calcule pas directement la matrice M, mais on dcrit une succession
d'oprations dites oprations lmentaires, chacune d'elle s'interprtant comme la
multiplication gauche par une matrice inversible , a la fois de A et du second membre b, le
rsultat de cette succession d'oprations tant :
MA = U et Mb = b avec M = 1 .
Exemple :
On cherche rsoudre le systme suivant :
2 + 3 + 3 + = 15
4 6 + 3 + 2 = 3
{
+ + + = 5
2 + + = 1

(1.2)

La mthode de Gauss, consiste liminer x des lignes 2, 3, 4, puis y des lignes 3, 4, puis z de
la ligne 4. On obtient alors la valeur de t et on en dduit les autres valeurs en remontant. Le
systme (1.2) scrit sous forme matricielle Ax = b :

2
3 3 1
15

4
6
3
2
(
) ( ) = ( 3 )
1 1 1 1
5

2 1 1 1
1

(1.3)

tape 1
On pose 1 = A et on note 1, , 1 i 4, 1 j 4 llment (i, j) de la matrice A. Lorsquil est
non nul, on nomme pivot (de la premire tape) llment
1
1
1,1
. Ici, 1,1
= 2. On effectue alors pour toute ligne , 2 i 4 :
1

1,1 1
1,1

On obtient :
2 3
15
3 1

0 0
33
9 4

(
) ( ) = (25 )
5
5
3
0 2 2 2
2

0 2
16
4 2

(1.4)

tape 2
2
On note A2 la matrice obtenue. Maintenant, le pivot 2,2
de la nouvelle matrice est nul. On
change la deuxime et la troisime ligne. On obtient :

2
0
(
0
0

3
3 1
15

5 5 3
25
2
2
2) () = ( 2)

33
9 4
0

16
2
4 2
5

2
Le pivot est maintenant 2,2
= 2 . On effectue :

4 4

4,2
2,2

(1.5)

2 = 4 2
5

Ce qui donne :
2
0
0
(0

3
3 1
15

5 5 3
25

2
2
2 ( ) = ( 2)

9
4
33
0
4

2 5
6
0
)

tape 3
3
On obtient la matrice A3. Le pivot est maintenant llment 3,3
= 9. On effectue :

4 4

4,3
3,3

3 = 4

4
5

(1.6)

Ce qui donne :
2
0
0
(0

3
3 1
15

5
25
5 3
2
2
2
2 () =

9
4
33
0
4
0 2 445)
3)
(

(1.7)

tape 4
La matrice obtenue est maintenant triangulaire suprieure, et on peut rsoudre le systme par
remonte. On trouve :

1
( ) = ( )
3

15

Algorithme de llimination de Gauss


De lexemple prcdent on peut tirer lalgorithme suivant :
Pour k allant de 1 n 1
Si tous les lments sous le pivot dans la colonne k est nulle, passer la colonne suivante.
Si llment , est nul, et sil existe un lment non nul, sous le pivot, dans la colonne k,
permuter
la ligne i avec la ligne k o i est le plus petit entier suprieur k tel que , soit non nul.

Ensuite, pour tout i > k, effectuer lopration , .


,

1.1.2.

(1,8)

Mthode de Cholesky

La dcomposition de Cholesky n'est qu'une variante de la dcomposition LU, ne sapplique


quaux matrices relles symtriques dfinies positives. Elle consiste en une
factorisation A = L , o B est une matrice triangulaire infrieure, dans le but de ramener
la rsolution de lquation linaire Ax = b la rsolution de deux quations Ly = b et x = y.
NB : Toute matrice dfinie positive est inversible

Matrice dfinie positive :


Une matrice [A] de dimensions (nxn) est dfinie positive si toutes ses valeurs propres sont
positives, soit :
8

> 0,

= 1, . . . ,

Dans la base constitue de ses vecteurs propres [X], une matrice [K] prend alors la forme
suivante :

1
0
[] [][] = [

0
2

0
0
],

1 > 0, , > 0.

(1.9)

Thorme 1.1 :
Soit A une matrice relle symtrique dfinie positive. Il existe une unique matrice relle B
triangulaire infrieure, telle que tous ses lments diagonaux soient positifs et qui vrifie :

(1.10)

Dmonstration :

AX = b

L =
L( ) =
=
{
=

(1.11)

On rsout alors LY = b puis =


Une fois la factorisation est faite A = L

11

= ( 21

22

1
1
0

0
2
) ( ) = ( 2)

(1.12)

On obtient :

1 =

1
11

2 =

2 21 2
22

1
=1

1
=1

Ensuite dans ltape de remonte, on rsout =

(1.13)

11
0
= (

21
22

1
1
1
2
2
2
)( ) = ( )

(1.14)

On obtient :

1 =

1 1 1

11

1 =


=+1

(1.15)

1 =2 1
11

Algorithme de la dcomposition de cholesky


La dcomposition de Cholesky sobtient par lalgorithme suivant qui dcrit lidentification
des deux membres de lquation matricielle :
On : L =

11

( 21

1.3.

0
22

11
0
0
0
)(

21
22

11
1

2
) = ( 21

12
22

1
2
)

(1.16)

Mthodes itratives

On cherche maintenant rsoudre le systme = en construisant une suite ( () )0


telle que

lim x ()

(1.17)

Les mthodes itratives sont souvent plus couteuses en temps de calcul que les mthodes
directes, mais elles ont l'avantage d'tre plus faciles programmer et ncessitent moins de
place mmoire (ce qui peut tre crucial lorsque n est trs grand).
Gnralit :
La stratgie habituelle consiste construire la suite ( () ) par une relation de rcurrence de
la forme

(+1) = () +

10

(1.18)

O B est la matrice d'itration de la mthode itrative, construite partir de A, et cest un


vecteur dpendant de b. En passant _ la limite k ! +1, on voit que la solution x du systme
doit satisfaire

= +

(1.19)

Puisque = 1 , on voit que ncessairement, = ( )1 , donc la mthode itrative


est en fait compltement dfinie par la matrice B.
Critre de convergence :
En dfinissant l'erreur au pas k comme

() = ()

(1.20)

il suit de la relation de rcurrence que

(+1) = () , soit (+1) = (0) ,

(1.21)

On voit donc que () pour tout (0) si et seulement si () 0 pour tout (0) si et
seulement si 0 Lorsque +. En utilisant le critre classique de convergence des
puissances de matrices, on obtient le :
Thorme 1.2
La mthode itrative converge pour tout choix de (0) , si et seulement si, () < 1 o ()
est le rayon spectral de B, de plus, on a

lim [

sup

()

+ (0) .. (0) 1

] = ()

(1.22)

L'quation prcdente signifie que la vitesse de convergence de la mthode


se comporte en () . C'est donc une convergence gomtrique, d'autant plus rapide que
() est petit. Le problme revient donc choisir une matrice B facile calculer partir de
A, telle que () soit aussi petit que possible (la mthode la plus efficace serait bien sr de
choisir B = 0 et c = x, mais le problme est justement de calculer l'inconnue x).
Test d'arrt de l'algorithme
L'algorithme n'tant pas exact, il faut dfinir un critre d'arrt d'itration en fonction de la
prcision souhaite.
Une premire mthode consiste calculer chaque itration le rsidu
() = () Et arrter l'algorithme au premier pas k tel que
() 2
2

o > 0 est un seuil donn.


11

(1.23)

Dans le cas o la matrice A est symtrique dfinie positive, ce critre permet d'assurer que
l'erreur relative de la mthode est majore par le produit du seuil et du conditionnement de
la matrice K(A). En effet, des ingalits

() 2 = 1 () 2 1 2 () 2

(1.24)

2 = 2 2 2

(1.25)

et

On dduit que
() 2
2

() 2
2

()

(1.26)

En pratique, ce critre peut tre coteux, puisqu'il ncessite de calculer chaque pas
d'itration le nouveau produit matrice-vecteur A () . On peut alors utiliser le critre d'arrt
suivant :
() (1)
()

(1.27)

En dautres termes, on arrte l'algorithme lorsque l'cart relatif entre deux pas d'itration est
petit. Si ce critre ne ncessite pas de calculer () chaque pas de temps, il ne garantit pas
un contrle de l'erreur relative de la mthode. Il est donc moins coteux, mais moins fiable.
Le splitting Une technique gnrale pour construire la matrice B est base sur une
dcomposition (splitting) de la matrice A sous la forme
A=PN
(1.28)
avec P inversible et facile inverser (par exemple diagonale ou triangulaire).
La matrice P est appele matrice de conditionnement. L'algorithme itratif s'crit alors

(+1) = () + ,

soit (+1) = 1 () + 1 .
La matrice d'itration de la mthode est donc

= 1 = 1

(1.29)
(1.30)

En pratique, les splittings les plus classiques sont bass sur l'criture
=
o :
D : diagonale de A
E : triangulaire inferieure avec des 0 sur la diagonale
F : triangulaire suprieure avec des 0 sur la diagonale

1.1.3.

La mthode de Jacobi

La mthode de Jacobi consiste choisir le splitting le plus simple avec P = D et N = E + F.


On obtient

(+1) = 1 ( + ) () + 1

(1.31)

On appelle matrice de Jacobi la matrice d'itration de la mthode

= 1 ( + ) = 1
12

(1.32)

La mise en place de l'algorithme correspondant consiste calculer


(+1)

(0)

( ), = 1, 2, 3, , .

(1.32)

La mise en uvre de l'algorithme ncessite de une place mmoire de 2n nombre flottants (en
plus de la matrice A et du vecteur b), puisqu'il ncessite de stocker les deux vecteurs () et
(+1) .

1.1.4.

La mthode de Gauss-Seidel

Elle consiste prendre le splitting = et N = F. La matrice d'itration associe est


alors donne par :
= ( )1 .
(1.33)
La matrice P est triangulaire inferieure, donc facile inverser. Toutefois, il n'est en fait pas
ncessaire de calculer explicitement son inverse pour mettre en place l'algorithme, puisqu'on
vrifie que le vecteur (+1) est donn par les formules suivantes :
(+1)

(+1)

( 1
=

()

=+1 ), = 1, 2, 3, , .

(1.33)

En comparant avec la mthode de Jacobi, on voit que cette mthode revient se servir des
coordonnes de (+1) dj calcules avant d'obtenir la coordonne suivante.
En terme de place mmoire, il n'est ncessaire que de stocker un seul vecteur, () tant
remplac par (+1) au cours de l'itration.
En gnral, cette mthode converge plus rapidement que celle de Jacobi.
Elle est donc prfrable.

13

Chapitre 2 : Application aux rseaux


linaires et la flexion dune poutre
Dans ce chapitre on va modliser deux modles physiques afin dintroduire un systme
physique facile rsoudre par les mthodes dalgbre linaire quon a dj trait,
premirement on va traiter les rseaux linaires en lectronique, deuximement on va attaquer
un modle en mcanique qui est flexion dune poutre on utilisant la mthode des lments
finis pour linariser le systme.

2.1.

Rseaux linaires

2.1.1.

Dfinition

Un rseau lectrique linaire est un ensemble de diples linaires, relis par des conducteurs
de rsistance ngligeable. On suppose que le rseau contient au moins un gnrateur. Un
rseau est constitu de b branches connectes par n nuds et formant m mailles .

Un nud est un point de jonction de plusieurs conducteurs.

Une branche est une portion de circuit entre deux nuds.

Une maille est un parcours ferm, constitu de branches et ne passant quune seule
fois par un nud donn.

Figure 2.1 Exemples de rseaux


Exemples

2.1-a: Pour ce rseau, on a b = 1, n = 0, m = 1.


2.1-b: b = 3, EADG, EG, EBCG.

14

n = 2, E et G.
m = 3, AEGDA, EBCGE, ABCDA.
2.1-c: b = 5, EADG, EF, EG, FG, FBCG.
n = 3, E, F, G.
m = 6, AEGDA, EFGE, FBCGF, AFGDA, EBCGE, ABCD.
2.1-d: b = 6, AB, BC, CD, DA, BD, AeC.
n = 4, A, B, C, D.
m = 7, ABDA, BCDB, ABCDA, ABCeA, ADCeA, ABDCeA, ADBCeA.

Rseaux en rgime permanent


Connaissant les f.e.m. des gnrateurs et les rsistances du rseau, rsoudre celui-ci cest
dterminer lintensit du courant qui circule dans chacune des branches. [9]
Mthode gnrale de rsolution
Il existe b branches dans le rseau donc b courants inconnus. Les n nuds et les m mailles
donnent a priori n + m quations. Comme en gnral n + m > b, il faut trouver un systme
complet de b quations linairement indpendantes.
Comme il existe n 1 nuds indpendants, il faut tudier = + 1 mailles.

quations pour les nuds


Le nud dindice k est la jonction de p branches (dindice j) parcourues par des
courants . La loi de conservation de llectricit (premire loi de Kirchhoff) scrit
sous la forme algbrique suivante :

=1 = 0

(2.1)

quations des mailles


La maille dindice k contient q branches. La diffrence de potentiel entre les
extrmits de la branche j scrit .
Comme la maille constitue un parcours ferm, on a (seconde loi de Kirchhoff) :

=1 = 0

(2.2)

En procdant uniquement des regroupements en srie, on peut transformer toute branche j


de la maille k en un gnrateur de f.e.m. en srie avec une rsistance parcourue par le
courant . (Si la branche ne contient pas de gnrateur alors = 0). La loi des mailles peut
donc aussi scrire sous la forme :

=1 =1 . = 0
15

(2.3)

Les sommes sont des sommes algbriques et lcriture correcte des signes des diffrences de
potentiel constitue la seule difficult du problme.
La mthode la plus rationnelle consiste faire le choix dun sens de parcours sur la maille tudie
(choix arbitraire) et choisir pour chaque branche un sens pour le courant. La f.e.m. dun gnrateur
est compte avec le signe de la borne par laquelle on entre dans celui-ci. Les d.d.p. aux bornes des
rsistances sont positives si le courant dans la branche a le mme sens que le sens de parcours et
ngatives dans le cas contraire. On crit que la somme des tensions est nulle. Si lissue du calcul, on
obtient pour le courant dune branche une valeur ngative, cest que le courant rel de cette branche
circule dans le sens oppos celui qui a t choisi.. [9]

On obtient un systme linaire de M quations M inconnues de la forme :

11 1 +
21 1 +
+
1

1 +

12 2 +
22 2 +
+
2

2 +

+ 1 = 1
+ 2 = 2
+
=

+ =

(2.4)

qui peut scrire sous la forme matricielle suivante :

[]. () = ()

(2.5)

[R] est une MM matrice dont la dimension des lments est celle dune rsistance. (I) et (V)
sont des vecteurs colonnes M lments.

2.1.2.

Rsolution du systme
En multipliant gauche la matrice [R] par son inverse, on tire :

[ 1 ]. []. () = [1 ]. () = []. ()
() = []. ()

(2.6)

La dimension des lments de [G] est celle dune conductance. La valeur du courant
dans la branche j est donc :

=
=1 .

(2.7)

Il est aussi possible dutiliser la mthode de Kramer pour la rsolution du systme. Si


est le dterminant de la matrice [R], le dterminant de la matrice obtenue en
remplaant la colonne de [R] par la colonne (V), on a : =
16

(2.8)

Si M = 2, il est plus simple dutiliser la mthode de substitution pour rsoudre le


systme.

Ds que M est suprieur 3, la rsolution manuelle du systme est fastidieuse. On


cherche alors mettre en uvre les mthodes de simplification des rseaux qui
permettent de ntudier que les branches pertinentes.

Loi de Pouillet

Dans le cas o le rseau ne comporte quune maille, il est possible de transformer le circuit
initial en un circuit ne comportant quun seul
gnrateur, dont la f.e.m. est la somme algbrique
des f.e.m. des gnrateurs de la maille ( = )
et une seule rsistance =
Lintensit dans le circuit est donc :

(2.9)

Figure 2.2 Rseau qui comporte une maille

Cette relation constitue la loi de Pouillet

2.1.3.

Application

On cherche les courants dans toutes les branches du circuit de la figure (2.3). Le choix du sens
des courants dans les 5 branches est arbitraire. Il y a pour cet exemple trois courants
calculer 1 , 2 et 3 car la loi des nuds en B et C donne : 4 = 1 2 et 5 = 2 3

Figure2.3 Rseau six mailles, quatre nuds et 6 branches

Les flches en pointills violets indiquent les sens de parcours, choisis arbitrairement, des 3
mailles tudies.
Pour la maille ABFGA, on obtient :
( ) + ( ) + ( ) + ( ) = 0
1

Claude Pouillet (physicien franais) 1790-1868

17

Soit :

4 + 6. ( 1 2 ) + 1 + 2.( 1 ) = 0

De mme :

6. ( 1 2 ) + 3.( 2) + 7.( 2 3 ) = 0

(maille FBCEF)

7(2 1 ) + 4.( 3 ) 6 = 0

(maille ECDE)

Do la reprsentation matricielle du systme:

1
8 6 0
3
[6 16 7] . [2 ] = [0]
0 7 11 3
6

(2.10)

Pour rsoudre ce systme linaire, il suffit dutiliser une mthode directe Elimination de
Gauss ou Cholesky : la taille du systme est petite n=3.
La solution du systme :
1 = 1,021

2 = 0,861

3 = 1,093

Remarque : Comme 5 = 0,232 A est ngatif, le courant dans la branche CE circule dans le
sens contraire celui de la flche de la figure 3. Les courants rels 2 et 3 circulent dans le
sens contraire des flches.

18

2.2.

2.2.1.

Flexion des poutres plan moyen : modle de Bernoulli

Dfinition

La figure (2.4) illustre un lment poutre dans le plan (x-y) orient suivant son axe local x .

Figure 2.4 : Elment poutre dans le plan avec 6 degrs de libert


Cet lment possde six degrs de libert correspondant au vecteur dplacement suivant :

{ } = [

](2.11)

o , , et sont les dplacements aux nuds i et j suivant x et y ; et sont


les rotations aux nuds i et j autour de laxe z.
Les coefficients de la matrice de rigidit de cet lment qui sont dus aux dplacements axiaux
sont ceux dfinis pour un lment barre et ninfluence pas le comportement de
llment sous leffet de , , et . Dans la suite nous cherchons dterminer
les coefficients de la matrice de rigidit relatifs aux dplacements , , et .

Flexion dans le plan {x-y}


Pour chaque poutre tudie :

Laxe x est la fibre moyenne de la poutre.

19

Le plan {x, y} est un plan de symtrie des sections de la poutre.

Laxe z forme avec les axes x et y un tridre direct.

Figure 2.5 Elment de poutre de longueur l soumis une force rpartie

Llment de poutre (ij) reprsent ci-contre, de longueur L, de moment quadratique


constant et de module de Young E est soumis sur toute sa longueur une force uniformment
rpartie dintensit linique .
est la rigidit de flexion linique de la poutre.
et sont leffort tranchant et le moment flchissant.
u et sont respectivement le dplacement suivant y (flche) et la rotation autour de laxe z
dune section droite.
( , ) et ( , ) sont les efforts nodaux.
(ui, ) et (uj , ) sont les dplacements nodaux.
On cherche dabord a trouver la matrice de rigidit de la poutre de le repre global sous la
forme :

[] =

[]

(2.12)

[M] : matrice nxn dpend de la longueur de llment.


Dduisons le systme contraintes, rigidit, dplacement :[F]=[K].[U]

(2.13)

Calculons les dformations de la poutre en fonction des forces exerces.


Calculez dabord numriquement la matrice dinterpolation des dplacements [N], puis la
dflexion.

20

2.2.2.

Application

Considrons la poutre reprsente la figure (2.6) ci-dessous. De longueur L vaut 15m. La


section droite de la poutre est constante et ngligeable devant sa longueur, son moment
dinertie de flexion vaut 0.254 . Le module de YOUNG E du matriau vaut 200 GPa.

Figure 2.6 Poutre de longueur L dans le plan (x-y) a dix lments

La poutre est discrtise en dix lments "poutre" et 11 nuds, chaque lment deux nuds
de longueur = 10.
Fonction dinterpolation
On choisit une fonction dinterpolation qui dfinit dune faon approximative ltat de
dplacement de tous les points de llment. Puisque llment possde quatre degrs de
libert ( , , et ), quatre coefficients inconnus doivent apparatre dans le
polynme reprsentant le modle du dplacement soit :

{ } = 1 13 + 2 23 + 3 12 2 + 4 1 22

(2.14)

o N1 et N2 sont les coordonnes naturelles et 1 , 2 , 3 et 4 sont des coefficients


dterminer.
Sous forme matricielle lexpression (2.4) scrit :

{ } = []{ }

(2.15)

La rotation est lie au dplacement { } par la relation :

{ }

(2.16)

En galant cette expression aux rotations au nud i (x=0) et au nud j (x=l), on en dduit :
21

= [N12 (3 2N1 )

= [1

3 2
2

N12 N2 L

2 3

N22 (3 N2 )

2 2

N1 N22 L]

2 3

(2.17)

3
2

(2.18)

Relation entre les dplacements et les dformations


La seule dformation considrer est donne par le vecteur de dformation :
2

(, ) =

{ }

(2.19)

La contrainte et le moment dus la flexion dans le plan (x-y) sont :

2
2

{ }
2

(2.20)

{ }

(2.21)

Si E est le module de YOUNG du matriau et est le moment dinertie de la section par


rapport laxe des z.
Compte tenu des expressions (2.15) et (2.17), on a :

[(6 12N1 )

l(2N2 4N1 )

l(4N2 2N1 )]{ }

(6 12N2 )

(2.22)
Les contraintes et les dformations correspondant au moment interne dans la poutre sont
relies par la relation :

= {} = { }

(2.23)

Dans ce cas particulier, la matrice D contient un seul terme correspondant la rigidit de


flexion E . La matrice reliant les dformations de llment ses dplacements nodaux est
donc :

=[

6
2

12

6
2

6
2

12

6
2

(2.24)

La matrice de rigidit
La matrice de rigidit de llment poutre 4 d.d.l. dans le repre local est calcule partir de
lexpression :

= 0
Soit :

22

(2.25)

=
[

12

12

2
2

2
12

2
12

3
6

2
2

3
6

2
4

On a = 10 = 1,5

(2.26)
]

E = 200 GPa

= 0.254

alors la matrice de rigidit vaut :

12
6

4
= 3 [ 6

12 6
6
2
Le systme

12
6
12
6

12
9 12
6
9 9
2 ] = 5. 106 [ 9
12 9 12
6
4,5 9
9
4

9
4,5
]
9
9

[ ] = [ ].[ ] de llment (i-j) vaut :

4
3
4 3

3
3 3 1,5
]{ }
{ } = 1,5. 105 [
4 3 4 3

3 1,5 3 3

(2.27)

Conditions aux limites : x(1) = 1 = 0 u(1) = 1 = 0 ; x(11) = 11 = L u(11) = 11 = 0


Assemblage
Effectuons lassemblage des matrices de rigidit [ ] des lments de poutre, la matrice de
rigidit globale de la poutre [K] est :

(2.18)

23

12 6 12 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6 4 6 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
12 6 24 0 12 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6 2 0 8 6 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 12 6 24 0 12 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 6 2 0 8 6 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 12 6 24 0 12 6 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 6 2 0 8 6 2 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 12 6 24 0 12 6 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 6 2 0 8 6 2 0 0 0 0 0 0 0 0 0 0

0
0 0 0 0 0 0 0 12 6 24 0 12 6 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 6 2 0 8 6 2 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 12 6 24 0 12 6 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 6 2 0 8 6 2 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 12 6 24 0 12 6 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 6 2 0 8 6 2 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 6 24 0 12 6 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 2 0 8 6 2 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 6 24 0 12 6
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 2 0 8 6 2
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 6 12 6
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 2 6 4 ]

Les matrices de rigidit lmentaire et globale sont des matrices symtriques


Prenons = 0 , = 1, , 11
Le systme obtenu est [F] = [K].[U] avec :
Vecteur des forces :
[] = [1
(2.19)

10

10

11 ]

11

11 ]

Vecteur des dplacements :


[] = [0

10

10

(2.20)

Rsolution du systme :
Aprs avoir trouv le systme (2.3), on va appliquer au nud (i = 6) milieu de la poutre une
force centrale et on va calculer les dplacements, ensuite au lieu dune force au milieu on va
appliquer une force constante rpartie chaque nud de la poutre :

24

Cas 1 :
Force applique au milieu de la poutre sur le nud 6 x(6) = L/2 = 5l = 5m

6 = 1200

Figure 2.7 Mesure de dplacements subits par le milieu de la poutre

Le tableau ci-dessous montre les dplacements des nuds suivant laxe des y et les rotations
autour de laxe des z en fonction de la force applique aux nuds 6 milieu de la poutre, la
flche maximale gale 50 cm

(cm)

(rd)

10,000

14,800

09,600

28,400

08,400

39,600

06,400

47,200

03,600

1200

50,000
47,200

-03,600

39,600

-06,400

28,400

-08,400

10

14,800

-09,600

11

-10,000

Table 2.1 Valeurs de et obtenues par la mthode de Jacobi

25

Figure 2.8 Cas de force applique au centre de la poutre

Cas 2 :

Force constante rpartie sur tous les nuds de la poutre sauf les extrmits :

= 140

= 2, , 10

1 = 11 = 0

Figure 2.9 Forces rparties sur les nuds de la poutre

Rsolution par la mthode de Jacobi

(cm)

07,920

144

11,664

07,488

144

22,080

06,288

144

30,240

04,512

144

35,424

02,352

144

37,200

144

35,424

-02,352

144

30,240

-04,512

144

22,080

-06,288

26

10

144

11,664

-07,488

11

-07,920

Table 2.2 Valeurs de et obtenues par la mthode de Jacobi

Figure 2.10 Cas force constante rpartie sur sur les nuds de poutre

27

Conclusion
Les mthodes directes sont trs efficaces : elles donnent la solution exacte du systme
linaire. Elles ont linconvnient de ncessiter une assez grande place mmoire car elles
ncessitent le stockage de toute la matrice en mmoire vive. Si la matrice est pleine, cest-dire la plupart des coefficients de la matrice sont non nuls et quelle est trop grosse pour la
mmoire vive de lordinateur dont on dispose, il ne reste qu grer habilement le swapping,
cest--dire lchange de donnes entre mmoire disque et mmoire vive pour pouvoir
rsoudre le systme.
Cependant, si le systme a t obtenu partir de la discrtisation dquations aux drives
partielles, il est en gnral creux cest--dire quun grand nombre des coefficients de la
matrice du systme sont nuls, de plus la matrice souvent une structure bande, les lments
non nuls de la matrice sont localiss sur certaines diagonales.
Lorsquon a affaire de trs gros systmes issus par exemple de lingnierie (calcul des
structures en MMC, mcanique des fluides, ), o n peut tre de lordre de plusieurs milliers,
on cherche utiliser des mthodes ncessitant le mois de mmoire possible. On a intrt dans
ce cas utiliser des mthodes itratives. Ces mthodes ne font appel qu des produits
matrice-vecteur, et ne ncessitent donc pas le stockage du profil de la matrice mais
uniquement des termes non nuls, Dans le chapitre dapplication, le deuxime exemple flexion
dune poutre on a une matrice dordre 22, on a 5 diagonales non nulles. Ainsi pour les gros
systmes, il est avantageux dutiliser des mthodes itratives qui ne donnent pas toujours la
solution exacte du systme en un nombre fini ditrations, mais qui donnent une solution
approche cot moindre quune mthode directe, car elles ne font appel qu des produits
matrice-vecteur.

28

Rfrence

Documents :
[1] D. Dureisseix. Mthodes numriques appliques la conception par lments finis. DEA.
ENS cachan - Universit de Montpellier 2, 2008, pp.98. <cel-00351713v1>.

[2] INRIA, ROCQUENCOURT, BP 105, 78153 LE CHESNAY, Michelel.Kern@inria.fr ,


Introduction la mthode des lments finis, ECOLE NATIONALE SUPERIEURE DES
MINES DE PARIS.

[3] F.SABOURIN E.SALLE, Structures de poutres, INSA de Lyon, 2000.

Liens :
[4] http://forums.futura-sciences.com/technologies/223363-calculer-rigidite-formulegenerale.html

[5] http://membres.lycos.fr/rdmestp :

ESTP TP 1 - Cours de Rsistance des Matriaux

[6] https://cel.archives-ouvertes.fr/cel-00351713v1 :

Submitted on 10 Jan 2009 (v1), last

revised 3 Jan 2014 (v2)

[7] http://www.gnu.org/copyleft/fdl.html
[8] https://fr.wikipedia.org/wiki/Raideur_(m%C3%A9canique)?oldid=110488407
Contributeurs : PA, Vlaam, Luckas-bot, Xqbot, Super Bazooka, Dinamik-bot, WikitanvirBot, EdoBot,
TRAFIAL, Addbot et Anonyme : 3

[9] http://www.univ-lemans.fr/enseignements/physique/02/cours_elec/reseau.pdf
[10] http://ressources.univ-lemans.fr/AccesLibre/UM/Pedago/physique/02/index.html

29

Annexe 1 : Programmation des


mthodes numriques
Mthodes directes
1.1. Mthode dlimination de Gauss
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

typedef struct systeme {


float * * A ;
float * b ;
int n ;
}syst;
float * * malloc2 ( syst S ) ;
void Lire_syst( syst *S, FILE *fichier );
void affich_systeme( syst S ) ;
void gauss( syst S , float *x ) ;
void affich_sol( float *x, int n ) ;
main()
{
int i, j ;
syst S ;
float * x ; // vecteur des inconnues x
FILE* fichier = NULL;
/* Saisie de la taille du systme */
Printf ("\nDimension du systeme : ") ;
Scanf ("%d", &S.n) ;
Printf ("\n") ;
/* Allocation de mmoire pour A, b et x */
S.A = malloc2(S) ;
S.b = (float *) malloc (sizeof (float *) * S.n) ;
x = (float *) malloc (sizeof (float *) * S.n) ;
fichier = fopen("S_ref.txt", "r+");
if (fichier != NULL)
{ //On peut lire et crire dans le fichier

30

Lire_syst(&S,fichier);
/* Affichage du systme initial */
affich_systeme(S) ;
/* Rsolution du systme par la mthode d'limination de Gauss */
gauss(S,x) ;
/* Affichage du systme rduit */
affich_systeme(S) ;
/* Affichage de la solution du systme */
affich_sol(x,S.n) ;
free(S.A) ;
free(S.b) ;
}
else
{// On affiche un message d'erreur si on veut
printf("Impossible d'ouvrir le fichier test.txt");
}
printf("\n\n\n\n\n\n");
exit( EXIT_SUCCESS ) ;
}
float * * malloc2 ( syst S )
{
float * * ptr = ( float * * ) malloc ( sizeof ( float * ) * S.n + sizeof ( float ) * S.n * S.n ) ;
float * dat = ( float * ) ( ptr + S.n ) ;
int i ;
if ( ptr == NULL ) exit( EXIT_FAILURE ) ;
for ( i = 0 ; i < S.n ; ++ i , dat += S.n ) ptr [ i ] = dat ;
return ptr ;
}
void Lire_syst( syst *S, FILE *fichier )
{
// S la structure qui contient le vecteur b et la matrice A
int i, j ;
int c=22*sizeof(char); //taille du prmier ligne
fseek(fichier,c,SEEK_SET);
for(i=0;i<S->n;i++)
{
for(j=0;j<S->n;j++)
{
fscanf( fichier,"%f",&S->A[i][j] );
}
}

int d = (S->n*(S->n-1)+19+22)*sizeof(char)+sizeof(float)*S->n*S->n ;

31

fseek( fichier, d, SEEK_SET ); //taille du ligne 1, matrice et ligne 2


for(i=0;i<S->n;i++)
{
fscanf( fichier, "%f ", &S->b[i]);
}

}
/* Affichage du systme */
void affich_systeme( syst S )
{
int i , j ;
printf( " ===>Affichage du systeme : \n\n\n" ) ;
for(i = 0 ; i < S.n ; i++)
{
printf( " (" ) ;
for( j = 0 ; j < S.n ; j++)
{
printf( " %.3f ", S.A[i][j] ) ;
}
printf( " ) (X%d) =", i+1) ;
printf( "\t%.3f",S.b[i] ) ;
printf( "\n\n" ) ;
}
}
/* Affichage de la solution du systme */
void affich_sol( float *x, int n )
{
int i ;
printf( " ===>Affichage de la solution : \n\n\n" ) ;
for( i = 0 ; i < n ; i++)
{
printf( "(X%d) =", i+1) ;
printf( "\t%.6f", x[i] ) ;
printf( "\n\n" ) ;
}
}
/* Mthode d'limination de Gauss */
void gauss ( syst S , float *x )
{
int i, j, k ;
int imin ;
float p ;
float sum, valmin, tump1, tump2 ;
for(k = 0 ; k < S.n-1 ; k++)
{

32

/* Dans un premier temps, on cherche l'lment minimum (non */


/* nul) en valeur absolue dans la colonne k et d'indice i */
/* suprieur ou gal k.
*/
valmin = S.A[k][k] ; imin = k ;
for(i = k+1 ; i < S.n ; i++)
{
if (valmin != 0)
{
if (abs(S.A[i][k]) < abs(valmin) && S.A[i][k] != 0)
{
valmin = S.A[i][k] ;
imin = i ;
}
}
else
{
valmin = S.A[i][k] ;
imin = i ;
}
}

/* Si l'lment minimum est nul, on peut en dduire */


/* que la matrice est singulire. Le pogramme est */
/* alors interrompu.
*/

if (valmin == 0.)
{
printf( "\n\n\nAttention! Matrice singuliere!\n\n\n") ;
exit( EXIT_FAILURE ) ;
}
/* Si la matrice n'est pas singulire, on inverse */
/* les lments de la ligne imax avec les lments */
/* de la ligne k. On fait de mme avec le vecteur b. */
for(j = 0 ; j < S.n ; j++)
{
tump1 = S.A[imin][j] ;
S.A[imin][j] = S.A[k][j] ;
S.A[k][j] = tump1 ;
}
tump2 = S.b[imin] ;
S.b[imin] = S.b[k] ;
S.b[k] = tump2 ;

/* On procde la rduction de la matrice par la */


/* mthode d'limination de Gauss. */
for(i = k+1 ; i < S.n ; i++)
{
33

p = S.A[i][k]/S.A[k][k] ;
for(j = 0 ; j < S.n ; j++)
{
S.A[i][j] = S.A[i][j] - p*S.A[k][j] ;
}
S.b[i] = S.b[i] - p*S.b[k] ;
}
}
/* On vrifie que la matrice n'est toujours pas singulire. */
/* Si c'est le cas, on interrompt le programme. */
if (S.A[S.n-1][S.n-1] == 0)
{
printf( "\n\n\nAttention! Matrice singuliere!\n\n\n") ;
exit( EXIT_FAILURE ) ;
}
/* Une fois le systme rduit, on obtient une matrice triangulaire */
/* suprieure et la rsolution du systme se fait trs simplement. */
x[S.n-1] = S.b[S.n-1]/S.A[S.n-1][S.n-1] ;
for(i = S.n-2 ; i > -1 ; i--)
{
sum = 0 ;
for(j = S.n-1 ; j > i ; j--)
{
sum = sum + S.A[i][j]*x[j] ;
}
x[i] = (S.b[i] - sum)/S.A[i][i] ;
}
}

1.2. Mthode de Cholesky


#include <stdio.h>
#include <stdlib.h>
#include <math.h>

typedef struct systeme {


float * * A ;
float * b ;
int n ;
}syst ;

34

float * * malloc2 ( syst S ) ;


void Lire_syst( syst *S, FILE *fichier );
void affich_systemeX(float **A ,float *b ,int n) ;
void affich_systemeY(float **L ,float *b ,int n ) ;
void cholesky(syst S, float **L, float **Lt, float *x, float *y) ;
void affich_solX(float *x, int n) ;
void affich_solY(float *y, int n) ;
main()
{
preface()
int i, j ;
syst S ;
float ** L, ** Lt ; // matrice L
float * x ; // vecteur des inconnues x
float * y ; // vecteur des inconnues y
FILE* fichier = NULL;
/* Saisie de la taille du systme */
printf("\nDimension du systeme : ") ;
scanf("%d", &S.n) ;
printf("\n") ;
/* Allocation de mmoire pour A, L, Lt, b, y et x */
S.A = malloc2(S) ;
L = malloc2(S) ;
Lt = malloc2(S) ;
S.b = (float *) malloc (sizeof (float *) * S.n) ;
x = (float *) malloc (sizeof (float *) * S.n) ;
y = (float *) malloc (sizeof (float *) * S.n) ;
fichier = fopen("S_ref.txt", "r+");
if (fichier != NULL)
{
Lire_syst(&S,fichier);
/* Affichage du systme initial */
affich_systemeX(S.A,S.b,S.n) ;
/* Rsolution du systme par la mthode de cholesky */
cholesky(S,L,Lt,x,y) ;
/* Affichage du systme Ly = b */
affich_systemeY(L,S.b,S.n) ;
/* Affichage de la solution du systme Ly = b */
affich_solY(y,S.n) ;
/* Affichage du systme Ltx = y */
affich_systemeX(Lt,y,S.n) ;
/* Affichage de la solution du systme Ltx = y */
affich_solX(x,S.n) ;
free(S.A);free(S.b);
free(L);
free(Lt);
free(x);
free(y);
}
35

else
{// On affiche un message d'erreur si on veut
printf("Impossible d'ouvrir le fichier test.txt");
}
printf("\n\n\n\n\n\n");
exit( EXIT_SUCCESS ) ;
}
float * * malloc2 ( syst S)
{
float * * ptr = ( float * * ) malloc ( sizeof ( float * ) * S.n + sizeof ( float ) * S.n * S.n ) ;
float * dat = ( float * ) ( ptr + S.n ) ;
int i ;
if ( ptr == NULL ) exit( EXIT_FAILURE ) ;
for ( i = 0 ; i < S.n ; ++ i , dat += S.n ) ptr [ i ] = dat ;
return ptr ;
}
void Lire_syst( syst *S, FILE *fichier )
{
// S la structure qui contient le vecteur b et la matrice A
int i, j ;
int c=22*sizeof(char); //taille du prmier ligne
fseek(fichier,c,SEEK_SET);
for(i=0;i<S->n;i++)
{
for(j=0;j<S->n;j++)
{
fscanf(fichier,"%f",&S->A[i][j]);
}
}

/*int d=(S->n*(S->n-1)+19+22)*sizeof(char)+sizeof(float)*S->n*S->n;*/
int d=19*sizeof(char);
fseek(fichier,d,SEEK_SET); //taille du ligne 1, matrice et ligne 2
for(i=0;i<S->n;i++)
{
fscanf(fichier,"%f ",&S->b[i]);
}

}
/* Affichage du systme */
void affich_systemeX(float **A ,float *b ,int n )
{
int i , j ;
printf(" ===>Affichage du systeme : \n\n\n");
for(i = 0 ; i < n ; i++)
36

{
printf(" (");
for(j = 0 ; j < n ; j++)
{
printf(" %.3f ",A[i][j]);
}
printf(" ) (X%d) =",i+1);
printf("\t%.3f",b[i]);
printf("\n\n");
}
}
void affich_systemeY(float **L ,float *b ,int n )
{
int i , j ;
printf(" ===>Affichage du systeme : \n\n\n");
for(i = 0 ; i < n ; i++)
{
printf(" (");
for(j = 0 ; j < n ; j++)
{
printf(" %.3f ",L[i][j]);
}
printf(" ) (y%d) =",i+1);
printf("\t%.3f",b[i]);
printf("\n\n");
}
}
/* Affichage de la solution du systme */
void affich_solX(float *x, int n)
{
int i ;
printf(" ===>Affichage de la solution x : \n\n\n");
for(i = 0 ; i < n ; i++)
{
printf("(X%d) =",i+1);
printf("\t%.6f",x[i]);
printf("\n\n");
}
}
void affich_solY(float *y, int n)
{
int i ;
printf(" ===>Affichage de la solution y : \n\n\n");
for(i = 0 ; i < n ; i++)
{
printf("(Y%d) =",i+1);
printf("\t%.6f",y[i]);
printf("\n\n");
}
}
37

void Cholesky (syst S, float **L, float **Lt, float *x, float *y)
{
if(S.A!=NULL && L!=NULL && Lt!=NULL && S.b!=NULL && x!=NULL &&
y!=NULL )
{
int i,j,k;
float S1=0,S2=0,S3=0,P1=0,P2=0;
for(i = 0 ; i < S.n ; i++)
{
for( j = 0 ; j < S.n ; j++)
{
if ( S.A[i][j]!=S.A[j][i])
{
printf("\n\n\nAttention! Matrice n'est pas symetrique !\n\n\n") ;
exit(EXIT_FAILURE);
}
}
}
//premire partie calcul de L et Lt
L[0][0]=sqrt(S.A[0][0]); /*calcul du premier lment de L => L11*/
for(i=1;i<S.n;i++)
{
L[i][0]=S.A[0][i]/L[0][0]; // premier ligne
}
for(i=1;i<S.n;i++)
{ for(k=0;k<i;i++)
{ S1+=L[i][k]*L[i][k];}
L[i][i]=sqrt(S.A[i][i]-S1);
//calcul des lments diagonaux de L
for(j=i+1;j<S.n;j++){
//calcul des lments non diagonaux de L
for(k=0;k<i;i++)
{ S2+=L[j][k]*L[i][k];}
L[j][i]=(S.A[i][j]-S2)/L[i][i];
}
}
for(k=0;k<S.n-1;i++){ S3+=L[S.n][k]*L[S.n][k];}
L[S.n][S.n]=sqrt(S.A[S.n][S.n]-S3);
for(i=0;i<S.n;i++){
for(j=0;j<S.n;j++){Lt[j][i]=L[i][j];}
}
printf("\n\npartie 1 terminee\n\n");
//deuxime partie rsolution des systmes LY = b puis Lt X=Y
y[0]=S.b[0]/L[0][0];
for(i=1;i<S.n;i++){
for(j=0;j<i-1;j++){
P1+=L[i][j]*y[j];}
y[i]=(S.b[i]-P1)/L[i][i];

//rsolution de LY = b

38

}
x[S.n-1]=y[S.n-1]/L[S.n-1][S.n-1];
for(i=S.n-2;i>=0;i--){
//rsolution de Lt X=Y
for(j=i+1;j<S.n-1;j++){
P2+=L[j][i]*x[j];}
x[i]=(y[i]-P1)/L[i][i];
}
printf("\n\npartie 2 terminee\n\n");
}
else
printf("\n\n\npointeur null !!!!");
}

Mthodes itratives
1.3. Mthode de Jacobi
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

typedef struct systeme {


float * * A ;
// matrice A
float * b ;
// vecteur b
int n ;
// taille du systme
}syst ;
float * * malloc2 ( syst S ) ;
void Lire_syst( syst *S, FILE *fichier );
void Jacobi ( syst S );

main()
{
preface()
int i, j ;
syst S ;
FILE* fichier = NULL;
printf("\nDimension du systeme : ") ;
scanf("%d", &S.n) ;
printf("\n") ;
/* Allocation de mmoire pour A, L, Lt, b, y et x */
S.A = malloc2(S) ;
S.b = (float *) malloc (sizeof (float *) * S.n) ;
fichier = fopen("S_ref.txt", "r+");
39

if (fichier != NULL)
{
Lire_syst(&S,fichier);
Jacobi (S);
free(S.A) ;
free(S.b) ;
}
else
{// On affiche un message d'erreur si on veut
printf("Impossible d'ouvrir le fichier test.txt");
}
printf("\n\n\n\n\n\n");
exit( EXIT_SUCCESS ) ;
}
float * * malloc2 ( syst S )
{
float * * ptr = ( float * * ) malloc ( sizeof ( float * ) * S.n + sizeof ( float ) * S.n * S.n ) ;
float * dat = ( float * ) ( ptr + S.n ) ;
int i ;
if ( ptr == NULL ) exit( EXIT_FAILURE ) ;
for ( i = 0 ; i < S.n ; ++ i , dat += S.n ) ptr [ i ] = dat ;
return ptr ;
}
void Lire_syst( syst *S, FILE *fichier )
{
// S la structure qui contient le vecteur b et la matrice A
int i, j ;
int c=22*sizeof(char); //taille du prmier ligne
fseek (fichier,c,SEEK_SET);
for(i=0;i<S->n;i++)
{
for(j=0;j<S->n;j++)
{
fscanf(fichier,"%f",&S->A[i][j]);
}
}
/*int d=(S->n*(S->n-1)+19+22)*sizeof(char)+sizeof(float)*S->n*S->n;*/
int d=19*sizeof(char);
fseek(fichier,d,SEEK_SET); //taille du ligne 1, matrice et ligne 2
for(i=0;i<S->n;i++)
{
fscanf(fichier,"%f ",&S->b[i]);
}

}
40

void Jacobi ( syst S )


{
int i, j, k, condition = 0;
float sommeA, sommeB, comp_max = 0;
float crit_arret = 0.1;
float* V_diff = NULL;
float* Xk = NULL;
float* Xk_1 = NULL;

/*le vecteur de difference X(k+1)-X(k) */


/*vecteur X(k)
*/
/*vecteur X(k+1) */

V_diff = malloc(sizeof(float)*S.n);
Xk = malloc(sizeof(float)*S.n);
Xk_1 = malloc(sizeof(float)*S.n);
if(V_diff == NULL || Xk == NULL || Xk_1 == NULL)
{
printf("Erreur dans l'allocation dynamique \n");
}
for( k = 0; k<S.n; k++)
{
Xk[k] = 0; // Cette boucle nous permet d'initialiser le premier tour du vecteur x
}
do
{
condition++;
for(i = 0; i<S.n; i++)
{
sommeA = 0;
sommeB = 0;
for(j = i; j<S.n; j++)
{ if(i!=j)
sommeA += S.A[i][j]*Xk[j];
}
Xk_1[i] = (S.b[i]-sommeA)/S.A[i][i];
}
comp_max = 0;
for(i = 0; i<S.n; i++)
{
V_diff[i] = fabs((Xk_1[i] - Xk[i]));
Xk[i] = Xk_1[i];
}
comp_max = 0;
for(k = 0; k < S.n ; k++)
{
if(V_diff[k] > comp_max)
{
comp_max = V_diff[k];
}
41

}
//for(i=0;i<n;i++) {printf("V_diff : %.3f \t", V_diff[i]);}
// printf("\n\n\n\n");
}while(comp_max > crit_arret);
printf("%d BOUCLES ! \n\n\n", condition);
for(i=0;i<S.n;i++)
{
printf("X(k+1)[%d]=%f \n",i+1, Xk_1[i]);}
}

42

Annexe 2
1. Charles Gustave Jacob Jacobi, ou Carl Gustav Jakob
Jacobi (10 dcembre 1804 Potsdam - 18 fvrier 1851 Berlin), est
un mathmaticien allemand surtout connu pour ses travaux sur les intgrales
elliptiques, les quations aux drives partielles et leur application la mcanique
analytique. Il tait le frre du physicien Moritz von Jacobi, dcouvreur de
la galvanoplastie.
2. Andr-Louis Cholesky (15 octobre 1875 Montguyon 31 aot 1918 Bagneux) est un polytechnicien et officier franais,
ingnieur topographe et godsien. Il est clbre pour sa mthode de rsolution
des systmes d'quations linaires, toujours intensment utilise de nos jours.
3. Johann Carl Friedrich Gau (prononc en allemand [gas], traditionnellement
transcrit Gauss en franais ; Carolus Fridericus Gauss en latin), n
le30 avril 1777 Brunswick et mort le 23 fvrier 1855 Gttingen, est
un mathmaticien, astronome et physicien allemand. Il a apport de trs
importantes contributions ces trois domaines. Surnomm le prince des
mathmaticiens , il est considr comme l'un des plus grands mathmaticiens de
tous les temps.
La qualit extraordinaire de ses travaux scientifiques tait dj reconnue par ses
contemporains. Ds 1856, le roi de Hanovre fit graver des pices
commmoratives avec l'image de Gauss et l'inscription Mathematicorum
Principi ( au prince des mathmaticiens en latin). Gauss n'ayant publi qu'une
partie de ses dcouvertes, la postrit dcouvrit surtout l'tendue de ses travaux
lors de la publication de ses uvres, de son journal (en) et d'une partie de ses
archives, la fin du XIXe sicle.
Gauss dirigea l'Observatoire de Gttingen et ne travailla pas comme professeur de
mathmatiques d'ailleurs il n'aimait gure enseigner mais il encouragea
plusieurs de ses tudiants, qui devinrent d'importants mathmaticiens,
notamment Gotthold Eisenstein et Bernhard Riemann.
4. Philipp Ludwig von Seidel, n le 24 octobre 1821 Deux-Ponts et mort
le 13 aot 1896 Munich, tait un mathmaticien, physicien de
l'optique et astronome allemand. Seidel est connu pour la mthode de GaussSeidel sur la rsolution des quations numriques.
Il tudia les aberrations optiques du premier ordre qu'il dcompose en cinq
polynmes dits polynmes de Seidel.
5. Claude Servais Mathias Pouillet, n Cusance (Doubs) le 16 fvrier 1790 et mort
Paris, 3e le 13 juin 1868, est un physicien et homme politique franais.

43