[PDF] Résolution numérique dun système linéaire





Previous PDF Next PDF



LES DÉTERMINANTS DE MATRICES

7- Expansion par cofacteurs - méthode de calcul des déterminants . Déterminants de matrices carrées de dimensions 4x4 et plus .



Cours de mathématiques - Exo7

Autrement dit Aj est la matrice obtenue en remplaçant la j-ème colonne de A par le second membre B. La règle de. Cramer va nous permettre de calculer la 



Chapitre 1: Calculs matriciels

la méthode de Cramer. g. Définitions : • Une matrice A = (aij) de type m?n est un tableau rectangulaire comprenant m lignes et n colonnes formées de nombres 



Systèmes déquations linéaires

de Gauss en inversant la matrice des coefficients



Systèmes linéaires

Résolution par la méthode du pivot de Gauss substitution méthode de Cramer



Untitled

8 mars 2018 1) Une solution de l'équation 2x1 + x2 - x3 - 4x4 = 5 est un ... 1) Méthode 2 : La matrice dont les colonnes sont les cordonnées de u1 ...



?x1 z3?

Calculez les déterminants suivants avec la règle de Sarrus : a. ?2 ?1 –2 Cette méthode est très mauvaise ... 4x4 : 24 produits et 23 additions.



Chapitre 6. Déterminant dune matrice carrée

Cas d'une matrice 2 × 2. Définition. det( a b c d) 2èmeécriture Ca sert à calculer l'inverse de la matrice (si elle ... Exemple (méthode de Cramer). (.



Résolution numérique dun système linéaire

Il existe aussi une méthode reshape qui crée une nouvelle matrice (les éléments sont b) qui retourne l'unique solution d'un système de Cramer Ax = b. On.



Matrices inverses

Matrice inverse. Inversion. Pivot de Gauss. Gauss-Jordan. Décompositions. Inverse rapide. Inversion. Methode de Cramer : (méthode habituelle).



Chapitre 1: Calculs matriciels

trois méthodes de résolution : • la méthode de Gauss-Jordan ; • en utilisant la matrice inverse ; • la méthode de Cramer g Définitions : • Une matrice A = (aij) de type m×n est un tableau rectangulaire comprenant m lignes et n colonnes formées de nombres réels • L'élément situé au croisement de la ième ligne et de la

Comment utiliser la méthode de Cramer ?

Nous avons également vu que pour pouvoir utiliser la méthode de Cramer, la matrice doit être inversible. C’est-à-dire, la matrice des coefficients. Cela signifie que son déterminant est différent de zéro. La méthode de Cramer permet alors de calculer les solutions en utilisant des déterminants.

Qu'est-ce que la quatrième matrice ?

Cette quatrième matrice se caractérise par l’idée de mort et de renaissance, de destruction et de recréation du monde, de salut et de rédemption. Les personnes sensibles à cette matrice ont le souvenir de situations dangereuses dont elles sont sorties saines et sauves, voire victorieuses.

Qu'est-ce que la matrice de V de Cramer ?

Le résultat est une matrice de V de Cramer. Une telle analyse peut être vue comme une généralisation de l’aanalyse des correspondances multiples et est connue sous de nombreux noms, tels que analyse de corrélation canonique, analyse d’homogénéité et bien d’autres.

Comment résoudre un système linéaire à l'aide de la règle de Cramer ?

Le nombre d'opérations à effectuer pour résoudre un système linéaire à l'aide de la règle de Cramer dépend de la méthode utilisée pour calculer le déterminant. Une méthode efficace pour les calculs de déterminant est l'élimination de Gauss-Jordan ( complexité polynomiale ).

Résolution numérique dun système linéaire

Chapitre 10informatique commune

Résolution numérique d"un

système linéaire1.Pythonet le calcul matricielLe modulenumpycontient les éléments indispensables à la modélisation des vecteurs, matrices et plus généra-

lement des tableaux multidimensionnels. Pour cela,numpyfournit le typendarray, qui, bien que très proche sur

le plan syntaxique du typelist, diffère de ce dernier sur plusieurs points importants :

la taille des tableauxnumpyest fixée au moment de la création et ne peut plus être modifiée par la suite1;

les tablea uxnumpysonthomogènes, c"est-à-dire constitués d"éléments de même type.

En contrepartie, l"accès aux éléments d"un tableaunumpyest incomparablement plus rapide, ce qui justifie

pleinement leur usage pour manipuler des matrices de grandes tailles.

Par la suite, nous supposerons avoir écrit au début de chacun des scripts de ce chapitre l"instruction :importnumpy as npce qui nous permettra de visualiser aisément les functions de ce module : elles seront préfixées par.np.

1.1

Cr éationde tableaux

On utilise en général la fonctionarraypour former un tableau à partir de la liste de ses éléments (ou de la

liste des listes pour une matrice bi-dimensionnelle). Par exemple, pour créer une matrice34à partir de ses

éléments on écrira :>>>a = np.array([[3, 6, 2, 0], [2,3, 5,1], [0, 6, 1,1]]) >>>a array([[ 3, 6, 2, 0], [ 2,3, 5,1], [ 0, 6, 1,1]])

La matrice que nous venons de créer est une matrice à coefficients entiers car tous ses éléments sont des

entiers; si on change l"un des coefficients, le nouveau coefficient sera au préalable converti en entier, ce qui peut

provoquer une confusion :>>>a[0, 0] = 1.25 >>>a array([[ 1, 6, 2, 0], [ 2,3, 5,1], [ 0, 6, 1,1]])

Si la liste des éléments est hétérogène, certains seront automatiquement convertis. Par exemple, si la liste des

coefficients contient des éléments de typefloatet de typeint, ces derniers seront convertis en flottants :>>>a = np.array([[3., 6, 2, 0], [2,3, 5,1], [0, 6, 1,1]])

>>>a array([[ 3., 6., 2., 0.], [ 2.,3., 5.,1.], [ 0., 6., 1.,1.]])

Aussi, pour éviter toute ambiguïté il est préférable de préciser lors de la création le type des éléments souhaités

avec le paramètre optionneldtype(pourdata type) :>>>b = np.array([1, 7,1, 0,2], dtype=float) >>>b

array([ 1., 7.,1., 0.,2.])1. On peut tout au plus lesredimensionner, comme cela sera expliqué plus loin.

http://info-llg.fr

10.2informatique commune

Les types autorisés sont les suivants :

bool(booléens),int(entiers),float(flottants),complex(complexes)plus un certain nombre de types dont nous n"auront que peu ou pas d"usage : entiers signés sur 8-16-32-64 bits,

entiers non signés sur 8-16-32-64 bits, flottants sur 8-16-32-64 bits, ...

Remarque

. Attention, en réalité le data typeintutilisé parnumpyne correspond pas au typeintdePython; il

s"agit du typeint64des entiers signés sur 64 bits (codés par complémentation à deux). Autrement dit, les entiers

numpysont restreints à l"intervalle~263;2631.

Pourquoi tant de types différents?

Prenons le cas de la représentation matricielle d"une image non compressée16001200, chaque pixel étant

représenté par un triplet RGB permettant de reconstituer une couleur par synthèse additive. Autrement dit,

avecnumpyune image est modélisée par un tableau tri-dimensionnel 160012003.

Chaque composante primaire est décrite par un entier non signé codé sur 8 bits (= 1octet), autrement dit un

entier de l"intervalle~0;281=~0;255. Avec le data typeuint8(entier non signé codé sur 8 bits) l"espace

mémoire utilisé pour représenter cette image vaut160012003 = 5760000octets soit5;5Mio. Si on utilisait

pour chacune des composantes des entiers codés sur 64 bits (= 8octets) l"espace mémoire nécessaire serait huit

fois plus important, soit 44 Mio.

Dorénavant, et sauf mention explicite du contraire, nous supposerons les tableauxnumpyremplis à l"aide du

typefloat(correspondant sur les machines actuelles au data typefloat64des nombres flottants représentés sur

64 bits).

1.2

C oupes

On accède à un élément d"un tableaunumpyexactement de la même façon que pour une liste : à partir de son

indice.>>>b[0] 1.0

Pour les tableaux multidimensionnels, outre la syntaxe usuellea[i][j]il est aussi possible d"utiliser la syntaxe

a[i, j]:>>>a[0, 0] 3.0

Le slicing suit la même syntaxe que pour les listesPython. On retiendra surtout la syntaxe pour obtenir une

vue d"une colonne ou d"une ligne d"une matrice :>>>a[2]#3 el igned el amat ricea array([ 0., 6., 1.,1.]) >>>a[:, 2]#3 ecol onned el amat ricea array([ 2., 5., 1.])

Attention cependant, à la différence des listesPython,une coupe d"un tableaunumpyne crée pas un nouveau

tableau(la terminologie officielle parle dans ce cas de " vue » plutôt que de coupe). Pour copier un tableau

numpyil est donc indispensable d"utiliser la méthodecopy.>>>a1 = a[2]#a1 es tu nevu ed el a3 el ignede a

>>>a2 = a[2].copy()#a 2es tu nec opied el a3 elig nede a >>>a[2, 0] = 7 >>>a1#l amodif icationd ea se r épercutesu ra 1 array([ 7., 6., 1.,1.]) >>>a2 array([ 0., 6., 1.,1.])#l amodif icationd ea n es er épercutep assu ra2

Résolution numérique d"un système linéaire 10.3Cette différence avec les listesPythonpeut s"avérer problématique lorsqu"il s"agit d"effectuer des opération

élémentaires sur les lignes ou les colonnes d"une matrice. En particulier,la syntaxea[i], a[j] = a[j], a[i]

n"échange pas les lignes(i+1)et(j+1).>>>a[0], a[1] = a[1], a[0] >>>a array([[ 2.,3., 5.,1.], [ 2.,3., 5.,1.], [ 7., 6., 1.,1.]])

Il est donc sage lorsqu"on manipule des tableauxnumpyde s"interdire l"affectation simultanée et lui préférer

une syntaxe telle que :b = a[0].copy() a[0] = a[1]

a[1] = bvoire, pour éviter tout coût spatial, à permuter terme par terme chaque élément des lignes à échanger :

forjinrange (a.shape[1]): a[0, j], a[1, j] = a[1, j], a[0, j]"fancy indexing»

On peut néanmoins accéder au contenu d"un tableaunumpytant en lecture qu"en écriture en utilisant lefancy

indexing. Ici les positions dans un tableau ne procèdent plus nécessairement par des coupes mais peuvent être

données dans un ordre quelconque : siaest un tableau etlune liste d"indices, alorsa[l]renvoie le tableau

formé des élémentsa[i]oùiest dansl. Il est donc possible d"échanger les lignesietjdu tableauaen écrivant :a[[i, j]] = a[[j, i]]

et d"inverser les colonnesietjde ce tableau par :a[:, [i, j]] = a[:, [j, i]] 1.3

R edimensionnementd"un tableau

La méthodeshapepermet de connaître les dimensions d"un tableau de typendarray:>>>a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]], dtype=float)

>>>a.shape (3, 4)

Modifier cet attribut permet de redimensionner le tableau, à condition bien sur que le nombre total d"éléments

du tableau reste inchangé. Les 12 éléments qui composent le tableauapeuvent donc être ré-ordonnés pour

former un tableau de taille 26, voire un vecteur de taille 12 :>>>a.shape = 2, 6 >>>a array([[ 1., 2., 3., 4., 5., 6.], [ 7., 8., 9., 10., 11., 12.]]) >>>a.shape = 12 >>>a array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12.])

C"est l"occasion d"observer quenumpydifférencie les tableaux uni-dimensionnels (les vecteurs) des tableaux

bi-dimensionnels,même lorsque ces derniers ne comportent qu"une seule ligne ou une seule colonne: http://info-llg.fr

10.4informatique commune>>>a = np.array([1, 2, 3], dtype=float)

>>>a#a es tun ve cteur array([ 1., 2., 3.]) >>>a.shape = 1, 3 >>>a#a es tu nem atrice1 x 3 array([[ 1., 2., 3.]]) >>>a.shape = 3, 1 >>>a#a es tu nem atrice3 x 1 array([[ 1.], [ 2.],

[ 3.]])On notera que redimensionner une matrice est une opération de coût constant. L"explication est simple : quelle

que soit la forme de la matrice, ses coefficients sont stockés en mémoire dans des casescontiguëset le format de

la matrice dans un emplacement spécifique. Par exemple, le script suivant :>>>a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], dtype=float)

>>>a.shape = 3, 4 >>>a array([[ 1., 2., 3., 4.], [ 5., 6., 7., 8.], [ 9., 10., 11., 12.]])

crée un espace mémoire de 12 cases des 64 bits chacune ainsi qu"un espace mémoire supplémentaire contenant

différentes informations, en particulier queaest un tableau bi-dimensionnel de 3 lignes et de 4 colonnes.1.2.3.4.5.6.7.8.9.10.11.12.shape=3,4

1 religne2 eligne3 elignea :

Connaître la case dans laquelle se trouve l"élément de rang(i;j)n"est dès lors que le résultat d"un simple calcul

arithmétique : pour une matrice denlignes etpcolonnes il s"agit de la case de rangip+j, et modifier les

dimensions d"un tableau consiste tout simplement à changer cette formule, pas les emplacements en mémoire

des éléments.

Remarque

. Il existe aussi une méthodereshapequi crée une nouvelle matrice (les éléments sont donc copiés)

en la redimensionnant si nécessaire (cette méthode a donc un coût proportionnel au nombre d"éléments de la

matrice).

Création de tableaux spécifiques

La fonctionzerospermet de former des tableaux dont tous les coefficients sont nuls : le premier et seul

argument obligatoire est un tuple qui précise la dimension du tableau2et un argument facultatif (par défaut

égal àfloat) permet de fixer le type de données.>>>np.zeros((2, 3), dtype=int) array([[0, 0, 0], [0, 0, 0]])La fonctionidentityconstruit la matrice d"identité d"ordren:>>>np.identity(3) array([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.]])

La fonctiondiagappliquée à une liste renvoie la matrice diagonale formée à partir des coefficients de cette

liste :2. Notez que les parenthèses pour enclore ce tuple sont indispensables si le tableau est multi-dimensionnel.

Résolution numérique d"un système linéaire 10.5 >>>np.diag([1., 2., 3.]) array([[ 1., 0., 0.], [ 0., 2., 0.], [ 0., 0., 3.]])1.4Opéra tionsélémentair essur les lignes et les colonnes

Les fonctions usuelles qui sont définies au sein denumpypeuvent être appliquées à des tableaux : dans ce cas,chacun des coefficients de ce dernier se voient appliquer la fonction. C"est aussi le cas des opérateurs binaires :

sia= (aij)etb= (bij)sont deux matricesnpetun opérateur binaire alorsabcalcule la matrice(aijbij).

Ainsi, pour calculer l"addition de deux matricesaetbil suffira d"écrirea + b. De même, pour calculer le

produit d"un scalairetpar une matriceail suffira d"écriret*a. En revanche,on se gardera bien de calculer

le produit matriciel en écrivanta*bcar ce qui est ainsi calculé est le produit terme à terme de chacun des

coefficients de ces deux matrices. Pour calculer le produit matriciel, il faut utiliser la fonctiondot(a, b).

On notera que siaest une matrice etxun vecteur on calcule le produitaxà l"aide de la fonctiondot.

Ces opérations vont nous permettre d"appliquer aisément des opérations élémentaires sur les lignes d"une

matrice :

L "opérationL

i Li+tLj(ajout detLjà la ligne Li) s"écrit :a[i] = a[i] + t*a[j]-L "opérationL i tLi(multiplication de Lipart) s"écrit :a[i] = t*a[i]-L "opérationL i$Lj(permutation des lignes Liet Lj) s"écrit3:a[[i, j]] = a[[j, i]]

On prendra bien garde au fait que chacune de ces trois opérations élémentaires modifie physiquement la

matricea. 2.

Méthode du pivot de Gauss

La méthode dupivot deGaussest une méthode générale de résolution d"un système linéaire de la forme :Ax=b,

oùAest une matrice inversible. Elle repose sur l"observation faite qu"appliquer une opération élémentaire(Oi)

sur leslignesd"une matrice équivaut à multiplier cette dernièreà gauchepar une certaine matrice inversibleUi.

Compte tenu de l"équivalence :

Ax=b()UiAx= Uib

on constate qu"on ne modifie pas l"ensemble des solutions d"une équation linéaire en appliquantles mêmes

opérations élémentaires sur les lignesde A et deb. La méthode du pivot deGausscomporte trois étapes : 1.

une première étape dite dedescentequi consiste à transformer la matrice inversibleAen une matriceA0

triangulaire supérieuretout en effectuant les mêmes opérations surb;0

BBBB@1

CCCCAx=0

BBBB@1

CCCCA()0

BBBB@1

CCCCAx=0

BBBB@1

CCCCA2.

une deuxième étape dite deremontéequi consiste à transformer la matrice inversibleA0en une matrice

A00diagonaletout en effectuant les mêmes opérations surb;0

BBBB@1

CCCCAx=0

BBBB@1

CCCCA()0

BBBB@1

CCCCAx=0

BBBB@1

CCCCA3.une troisième et dernière étape de résol utiond usystème linéaire, dev enutrivial car diag onal.

3. Relire le paragraphe consacré aufancy indexing.

http://info-llg.fr

10.6informatique commune

2.1

L "étapede desc enteCelle-ci consiste à transformer progressivement la matriceApar opérations élémentaires sur les lignes tout en

maintenant l"invariant :

à l"entrée de lajeboucle, A =0

BBBBBBBBBBBBBBBBBBBBBBBB@a

11a12::::::::::::: a1n0a22::::::::::::: a2n::::::::::::

00ajjajn::::::::::::

00anjann1

CCCCCCCCCCCCCCCCCCCCCCCCA:

Dans le cas où la matrice A est de la forme ci-dessus, on procède en deux temps : 1. on recherche un piv otnon nul4aijparmiajj;aj+1;j;:::;anjpuis on permute les lignes Liet Lj: Li$Lj; 2.

à l"issue de cette première étape nous sommes assurés que désormaisajj,0; on l"utilise comme pivot

pour remplacer tous les termesaijpouri > jpar des zéros à l"aide de l"opération élémentaire :

8i2~j+1;n;Li Liaija

jjLj:

Le choix du pivot

Mathématiquement, tous les pivots non nuls se valent. Il n"en est pas de même du point de vue numérique :

diviser par un pivot dont la valeur absolue est trop faible par rapport aux autres coefficients du système conduit

à des erreurs d"arrondi importantes. Nous allons illustrer ce phénomène à l"aide d"un exemple numérique.

Exemple

. Supposons que les calculs sont effectués en virgule flottante dans le système décimal avec une

mantisse de quatre chiffres et considérons le système : (0;003x+59;14y= 59;17

5;291x6;13y= 46;78() 3;0001035;914101

5;2911006;130100! x

y! = 5;917101

4;678101!

dont la solution exacte estx= 10,y= 1. Choisir 0;003 pour pivot conduit à effectuer l"opération élémentaire : L2 L2L1avec =5;2910;003= 1763;666 1;764103 et conduit à résoudre le nouveau système :

3;0001035;914101

01;043105! x

y! = 5;917101

1;044105!

En effet, 1;7641035;9141011;043105et6;1301001;043105 1;043105

1;7641035;9171011;044105et 4;6781011;044105 1;044105

L"étape de remontée qui sera expliquée plus loin consiste à effectuer l"opération élémentaireL1 L1L2pour

obtenir un système diagonal, avec =5;9141011;043105 5;670104 et conduit à résoudre le système diagonal :

3;0001030

01;043105! x

y! = 2;000102

1;044105!

car 5;6701041;0441055;919101et 5;9171015;919101 2;000102.

Ainsi, la solution numérique obtenue est :x 6;667ety1;001. Même si l"erreur faite suryest très faible (de

l"ordre de0;1%), sa propagation a un effet désastreux surx(une erreur de l"ordre de167%), à cause d"un pivot

très faible.4. L"inversibilité de la matrice A nous assure de son existence (voir votre cours de mathématiques).

Résolution numérique d"un système linéaire 10.7Reprenonscescalculs,maisenchoisissantcettefois5;291pourpivot,cequiconduitàdébuterparlapermutation

L1$L2des deux lignes du système : 5;2911006;130100

3;0001035;914101! x

y! = 4;678101

5;917101!

On effectue cette fois l"opération L2 L2L1avec

=0;0035;2915;670104 ce qui conduit à résoudre le système triangulaire :

5;2911006;130100

0 5;914101! x

y! = 4;678101

5;914101!

et enfin, l"opération L

1 L1L2avec=6;1301005;914101 1;037101conduit au système diagonal :

5;2911000

0 5;914101! x

y! = 5;291101

5;914101!

qui fournit finalement les valeursx1;000101ety1;000100qui coïncident avec les résultats théoriques.

Pivot partiel

Ces considérations nous amènent à choisir pour pivotle plus grand en moduledes coefficientsajj;aj+1;j;:::;anj;

c"est le choix dupivot partieldeGauss.

Remarque

. La méthode du pivot total consiste à cherche le plus grand en module des coefficients du bloc

rectangulaire26666666664a jjajn:::::: a njann3

7777777775

Cependant, cela induit une difficulté algorithmique supplémentaire car pour amener ce pivot à l"emplacement

(j;j)il est souvent nécessaire d"effectuer une permutation entre deux colonnes qui modifie l"ordre des inconnues

pour le système linéaire à résoudre. Il faut donc garder trace de ces multiples permutations afin de renvoyer

celles-ci dans le bon ordre à la fin du calcul.

En pratique, on constate que le gain de stabilité apporté par la recherche du pivot total n"est en général pas

significatif, alors qu"il alourdit la programmation. C"est donc la recherche du pivot partiel qui est le plus

couramment utilisé, et c"est celui que nous allons implémenter.

Programmation de l"étape de descente

a)

Rédiger une fonctionrecherche_pivot(A, b, j)qui détermine le coefficientaijle plus grand en module

parmiajj;:::;anjpuis qui permute les lignes Liet Ljde A et deb. b)

Rédiger une fonctionelimination_bas(A, b, j)qui effectue les éliminations successives des coefficients

situés sousajj, en supposant ce coefficient non nul. On effectuera en parallèle les mêmes opérations surb.

c)

En déduire une fonctiondescente(A, b)qui par opérations élémentaires sur les lignes des matricesAetb

réalise l"étape de descente de la méthode du pivot deGauss. 2.2

L "étapede r emontée

Celle-ci intervient lorsque la matriceAest triangulaire supérieure, les coefficients de la diagonale étant non

nuls. On transforme progressivement la matrice A en maintenant l"invariant :

à l"entrée de la (nj+1)eboucle, A =0

BBBBBBBBBBBBBBBBBBBBBBBBBBBBB@a

11a1j00

0 ::::::ajj0:::

00aj+1;j+1::::::

::::::::::::0

000ann1

CCCCCCCCCCCCCCCCCCCCCCCCCCCCCA:

http://info-llg.fr

10.8informatique commune

et en utilisantajjcomme pivot pour éliminer les coefficientsa1j;:::;aj1;j.

Programmation de l"étape de remontée

a)Rédiger une fonctionelimination_haut(A, b, j)qui effectue les éliminations successives des coefficients

situés au-dessus deajj, en supposant ce coefficient non nul. On effectuera en parallèle les mêmes opérations sur

b. b)

En déduire une fonctionremontee(A, b)qui par opérations élémentaires sur les lignes des matricesAetb

réalise l"étape de remontée de la méthode du pivot deGauss. 2.3

Résolution du syst èmelinéair e

quotesdbs_dbs33.pdfusesText_39
[PDF] méthode de cramer 4 inconnues

[PDF] méthode de cramer 3 inconnues

[PDF] méthode de cramer 2 inconnues

[PDF] couverture de cahier ? imprimer

[PDF] travail couverture cahier maternelle

[PDF] couverture cahier arts plastiques

[PDF] décoration cahier maternelle

[PDF] couverture cahier art plastique 6eme

[PDF] cahier art plastique 6ème

[PDF] cahier d'art plastique original

[PDF] couverture cahier maternelle ps

[PDF] datation absolue svt

[PDF] interview metteur en scène théâtre

[PDF] en quoi le théâtre se différencie t il des autres genres littéraires

[PDF] question qu on pourrait poser a un acteur