programmation scientifique en c

32
PROGRAMMATION SCIENTIFIQUE EN C PRO-1027

Upload: badru

Post on 12-Feb-2016

38 views

Category:

Documents


0 download

DESCRIPTION

PROGRAMMATION SCIENTIFIQUE EN C. PRO-1027. Résolution de système d’équations linéaires. Affichage des résultats (tp 1 a) Élimination de Gauss Élimination de Gauss avec pivot Travail pratique 1 b. Affichage des résultats . Affichage de données réelles float epsilon1; double epsilon2; - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: PROGRAMMATION SCIENTIFIQUE EN C

PROGRAMMATION SCIENTIFIQUE EN C

PRO-1027

Page 2: PROGRAMMATION SCIENTIFIQUE EN C

Résolution de système d’équations linéaires

Affichage des résultats (tp 1 a) Élimination de Gauss Élimination de Gauss avec pivot Travail pratique 1 b

Page 3: PROGRAMMATION SCIENTIFIQUE EN C

Affichage des résultats

Affichage de données réellesfloat epsilon1;double epsilon2;

epsilon1 = 0.00000011921;epsilon2 = 0.00000000000000022204;printf("\n Valeur de epsilon1: %13.11f ",epsilon1);printf("\n Valeur de epsilon2: %22.20f ",epsilon2);

Page 4: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

Exemple de système d’équations linéaires– Un alliage est composé de manganène, silice et de

cuivre– Cet alliage est composé de 15 livres de Mn, 22

livres de Si et 39 livres de Cu par tonne d’alliage– Les ingrédients de l’alliage (Mn, Si, Cu) sont

extraits de minerai provenant de 3 fournisseurs différents

– De plus, la concentration des ingrédients est différente pour les 3 minerais

Page 5: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

Fournisseur 1(lb/tonne de minerai)

Fournisseur 2(lb/tonne de minerai)

Fournisseur 3(lb/tonne de minerai)

Manganèse 1 3 2Silice 2 4 3Cuivre 3 4 7

Nous voulons alors déterminer quelle quantité de minerai nous devons acheter de chaque fournisseur pour éviter l’achat inutile d’ingrédient

Page 6: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

Pour trouver une solution à ce problème nous devons définir les variables suivantes:– Xj: la quantité de minerai achetée du fournisseur

j (tonne de minerai)– Ci: la quantité d’ingrédient i par tonne d’alliage

(lb/ tonne d’alliage)– aij: la quantité d’ingrédient i par tonne de minerai

achetée du fournisseur j (lb/tonne de minerai)

Page 7: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

Nous pouvons déduire une expression générale pour le calcul des Ci

mi

CXa ij

n

jij

,......,2,11

m représente le nombre d’ingrédients et n le nombre de fournisseurs

Page 8: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

Le problème précédent peut être représenté par un système d’équations linéaires de la forme

3974322342

1523

321

321

321

XXXXXXXXX

La solution de ce système correspond aux quantités de minerai à acheter de chaque fournisseur

Page 9: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

Détermination des courants dans un circuit électrique

40426502

0

321

321

321

IIIIII

III

Page 10: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

Forme générale d’un système d’équations linéaires

nnnnnn

nn

nn

CXaXaXa

CXaXaXaCXaXaXa

.....

..........

2211

22222121

11212111

Page 11: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

Solution de 2 équations (n=2)

2222121

1212111

CXaXaCXaXa

Isolons X2 de la seconde équation

22

12122 a

XaCX

Substituons X2 de la première équation

122

121212111 C

aXaCaXa

Page 12: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

Nous pouvons alors isoler X1

12212211

2121221 aaaa

CaCaX

Nous pouvons alors déduire X2 par

12212211

1212112 aaaa

CaCaX

Page 13: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

Classification des systèmes d’équations– Systèmes ayant des solutions– Systèmes sans solution– Systèmes avec une infinité de solutions

Page 14: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

Page 15: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

L’élimination de Gauss est similaire à la procé-dure de substitution utilisée précédemment pour déduire les valeurs de X1 et X2

L’élimination consiste à effectuer un ensemble d’opérations valides sur les équations pour arriver à obtenir une matrice dont la partie triangulaire inférieure (sous la diagonale) est nulle et une diagonale à 1 (Gauss-Jordan)

Nous pouvons alors isoler chacune de nos inconnues

Page 16: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

Opérations valides sur les équations– Permuter deux équations– Multiplier ou diviser une équation par une

constante– Additionner deux équations ensembles

Page 17: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

Représentation matricielle d’un système d’équations linéaires

nnnnnn

n

n

C

CC

X

XX

aaa

aaaaaa

2

1

2

1

21

22221

11211

Page 18: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

Représentation sous forme de matrice augmen-tée

nnnnn

n

n

C

CC

aaa

aaaaaa

2

1

21

22221

11211

Page 19: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

La procédure d’élimination de Gauss est subdi-visée en une phase d’élimination avant suivie d’une phase de substitution arrière. Avec l’élimination avant nous obtenons un système

n

n

n

e

ee

ddd

2

1

2

112

100

101

Page 20: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

Si nous réinsérons les inconnues nous obtenons le système d’équations suivant

1,111,122,13132121 eXdXdXdXdXdX nnnnnn

2,211,222,23232 eXdXdXdXdX nnnnnn

3,311,322,33 eXdXdXdX nnnnnn

2,211,22 nnnnnnnn eXdXdX

1,11 nnnnn eXdX

nn eX

Page 21: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

A partir du système précédent, nous pouvons déduire les inconnues Xi en commençant par l’inconnue Xn et par substitution arrière les autres inconnues X1 … Xn-1

nn eX

nnnnn XdeX ,111

Page 22: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

L’élimination de Gauss appliquée à un circuit électrique (phase d’élimination avant)

426067200111

'2''2'

'

404265020111

133

122

11

RRRRRR

RR

141900

32710

0111

'6'2

'

'

426067200111

233

22

11

RRR

RR

RR

1914100

32710

0111

19'

''

141900

32710

0111

33

22

11

RR

RRRR

Page 23: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

Algorithme d’élimination de Gauss (élimination avant)

Entrées: matrice A de nxn et un vecteur C de n éléments

Élimination avantPOUR j=1à n-1 FAIRE /* Pour chaque élément de la diagonale */

POUR i=j+1 à n FAIRE /* Pour chaque rangée sous la diagonale */mij = aij/ajj

aij = 0; Ci = Ci - mij * Cj

POUR k = j+1 à n FAIRE /* Pour les éléments restant de la rangée i */aik = aik - mij * ajk

Page 24: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

Algorithme d’élimination de Gauss (substitution arrière)

Substitution arrièrePOUR i= n à 1 FAIRE

xi=Ci

POUR j=i+1 à n FAIRE xi = xi - aij * xj

xi = xi/aii

Sortie: vecteur x des solutions

Page 25: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

Problèmes d’erreurs– Représentation des nombres– Utilisation de pivot très petit (division par 0)

Pour minimiser ces problèmes nous pouvons utiliser l’élimination de Gauss avec pivot

Page 26: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

Problèmes d’erreurs (exemple)

0.69.33.13

0303101820637

3

2

1

xxx

En arithmétique exacte, la première étape de l’élimination donne

3.00301.010003.130637

73,

72

3121 mm

Page 27: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

Problèmes d’erreurs (exemple)– La dernière étape produit un élément diagonal

a22 nul– L’élément pivot (diagonal) de la prochaine étape

est donc nul – Le rapport m23 = 3/0 ce qui cause erreur de

division par 0

Page 28: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

Nous pouvons corriger cette anomalie en permutant les rangées 2 et 3 permettant de déduire le vecteur solution exacte

01.01.0

1x

Page 29: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss

Sur l’ordinateur, les rapports 2/7 et 3/7 ne sont pas représentés avec exactitude ce qui produit un élément diagonal a22 très petit. L’élimination avant peut quand même se poursuivre produi-sant des solutions erronnées

01000.010547.095078.0

10031.112031.100000.000000.001000.101000.111910.200000.001330.100000.001300.600000.7

x

EEEEEEEEEEEE

Page 30: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss avec pivot

Pour éviter les problèmes liés à l’utilisation de pivots petits nous devons avant chaque étape de l,élimination chercher la rangée dont la valeur pivot est maximale

Élimination avantPOUR j=1à n-1 FAIRE /* Pour chaque élément de la diagonale */

trouver_pivot(n,j,A,kp)./*rangée où se trouve le pivot max */Permuter les rangées j et kpPOUR i=j+1 à n FAIRE /* Pour chaque rangée sous la diagonale */

mij = aij/ajj

aij = 0; Ci = Ci - mij * Cj

POUR k = j+1 à n FAIRE /* Pour les éléments restant de la rangée i */aik = aik - mij * ajk

Page 31: PROGRAMMATION SCIENTIFIQUE EN C

Élimination de Gauss avec pivot

trouver_pivot(n,j,A,kp)pivot = abs(A[j][j])kp=jPOUR i=j+1à n FAIRE /* Pour chaque rangé sous la diagonale */

SI abs(A[i][j])>pivot ALORSpivot = abs(A[i][j])

kp = i FINSIFIN POUR

Page 32: PROGRAMMATION SCIENTIFIQUE EN C

Travail pratique 1b