Vous êtes sur la page 1sur 20

Introductin au Calcul matriciel

Stéphane Canu
stephane.canu@litislab.eu

ASI 3 - Calcul numérique pour l’ingénieur

September 13, 2010


Plan
1 Vecteurs, Matrices et Lapack
D’où viennent les matrices
Matrice et informatique
Matrice et physique
Matrice et mathématiques
Méthodes de base
Notations
Opérations vectorielles
Opérations matricielles
Gaxpy
Produit extérieur
Huit versions du produit de deux matrices
La notion de niveau

Stéphane Canu (INSA Rouen - ASI) Valeurs propres September 13, 2010 2 / 20
Vecteurs, Matrices et Lapack

Maths et informatique :
comment faire un calcul

utiliser une bibliothèque :


I LAPACK
F BLAS <– ATLAS
Matrice et informatique
Exemple de matrices :
 
image : filtrage 5 −1 0 1
0 1 0 12 
Netflix : complétion
 
−1 −1 2 1
 
−2 1 0 1
éléments finis sur une voiture : calcul  
d’une force
0 −1 −3 1
0 1 0 −1
Matrice A = tableau à deux dimensions n=6 a11 = 5
n lignes p=4 a43 = 0
p colonnes : (p = 1, c’est un vecteur) p colonnes

aij : terme général a11

Différents types de matrices

n lignes
Carrée – rectangulaire – triangulaire aij

Plein – creuse
Structure : par block
Matrice et physique

équation de la chaleur
circuit RLC
matrices aléatoires : dans les années 1950, Wigner a suggéré de
remplacer l’opérateur hamiltonien du noyau par une matrice aléatoire
(cf wikipedia)
n équations à p inconnues
Matrice et mathématiques

Linéaire = simple
Ax = b
En mathématique on associe une matrice A à une application linéaire1 A.

A: IRp −→ IRn
x 7−→ A(x) = Ax

1
Pour plus de détails se reporter à un cours d’algèbre linéaire comme par exemple
celui de l’UTC http://tice.utc.fr/moodle/file.php/331/Cours/MT11poly11.pdf.
maths 6= informatique

zero = 10−16

10−9 10−8
A= : det(A) = 0 en informatique
10−9 10−9

calcul :
approché raisonablemant
utilisation raisonnable des ressources : temps et espace mémoire
utilisation optimale : LAPACK et BLAS (via ATLAS)
Notations

vecteur v ∈ IRn ;
transpose v> = (v1 , ..., vi , ..., vn )
Matrice A; de terme général aij
vecteur colonne A(:, j),
vecteur ligne A(i, :) = (ai1 , ..., aij , . . . , aip ),
Opérations vectorielles
Transposition

w = v> ⇔ ligne colonne et vice versa

addition
w = v + x ⇔ wi = vi + xi i = 1, n
Multiplication par un scalaire

w = αv ⇔ wi = αvi

Produit scalaire
n
X
>
w =v x⇔w = vi xi
i=1

Produit extérieur
C = xv> ⇔ cij = xi vj
Opérations matricielles

Transposition attention aux dimensions : faire un


dessin !
C = A> ⇔ cij = aji
m colonnes
addition

p lignes
B
C = A + B ⇔ cij = aij + bij
p colonnes
Multiplication par un scalaire

C = αA ⇔ cij = αaij
n lignes
Multiplication
A C
p
X
C = AB ⇔ cij = aik bkj
k=1
Gaxpy : Generalized Ax plus y
p
X
y = Ax + y ⇔ yi = aij xj + yi i = 1, n
j=1

Version ligne Version colonne

Fonction y ← GAxpy(A, x, y) Fonction y ← GAxpy(A, x, y)

for i = 1, n for j = 1, p
. yi = A(i, :) ∗ x + yi . y = A(:, j) ∗ xj + y
end end

function yout = gaxpy( A, x, yin, version )


% A : 2-dimensional array of m rows and n columns
% x : 1-dimensional array of n rows and 1 column
% yin : 1-dimensional array of m rows and 1 column
%
% version : character strings to specify the execution options,
% the following versions are available
% ’arrays’ ’columnwise’ ’rowwise’ ’rowwiseR’
% Output
% yout : 1-dimensional array of m rows and 1 column
gaxpy : exemple

      
1 2 5 7 1∗5+2∗6+7
+ =
3 4 6 8 2∗5+4∗6+8

     
1 2 7
=5 +6 +
3 4 8
5
6
=
(1 2) +7
(3 4) +8
Produit extérieur
A = A + vw>
version ligne

Fonction A ← outer(A, v, w)

for i = 1, n
. A(i, :) = A(i, :) + v (i) ∗ w>
end

version colonne

for j = 1, m
. A(:, j) = A(:, j) + vw(j)
end
Huit versions du produit de deux matrices

 
1 2  
5 6 0 1
A= 3 4  B=
7 8 1 0
0 1
p
X
C = AB ⇔ cij = aik bkj
k=1
Huit versions du produit de deux matrices

version trois boucles


en élimnant s

Pour i = 1, n faire
Pour j = 1, m faire Pour i = 1, n faire
s=0; Pour j = 1, m faire
Pour k = 1, p faire Cij = 0 ;
s = s +Aik Bkj Pour k = 1, p faire
Fin Pour Cij = Cij + Aik Bkj
Cij = s Fin Pour
Fin Pour Fin Pour
Fin Pour Fin Pour
Huit versions du produit de deux matrices
version deux boucles

Pour i = 1, n faire
Pour j = 1, m faire
Cij = A(i, :)B(:, j)
Fin Pour
Fin Pour
Pour j = 1, m faire
C (:, j) = 0 ;
Pour k = 1, p faire
C (:, j) = C (:, j) +
A(:, k)B(k, j)
Pour i = 1, n faire Fin Pour
C (i, :) = 0 ; Fin Pour
Pour k = 1, p faire
C (i, :) = C (i, :) + A(i, k)B(k, :)
Fin Pour
Fin Pour
Simplification
Il est préférable de coder la fonction :
C = AB + C
on n’a plus de problème d’initialisation.

par colonnes par ligne (Gaxpy)


Pour i = 1, n faire Pour j = 1, m faire
C (i, :) = C (i, :) + A(i, :)B C (:, j) = C (:, j) + AB(:, j)
Fin Pour Fin Pour

Global (outer)
Pour k = 1, p faire
C = C + A(:, k)B(k, :) % Outer(A(:, k), B(k, :), C )
Fin Pour
La notion de niveau

tout dépend du nombre de boucles considérées... au niveau 3 on a trois


boucles imbriquées, on parle de complexité O(n3 )
Conclusion

Matrice : math / informatique / physique

Ax = b

LAPACK

histoire de boucles
Références bibliographiques

Ces notes ont été construites à partir du cours de l’UTC MT092 et se sont
complétées notamment à la lecture de [2] LE livre de référence pour ce
cours. [1] est plutôt un excellent manuel pour entrer dans le sujet avec de
nombreux exemples bien détaillés.
[]
Richard L. Burden and Douglas J. Faires.
Numerical Analysis.
Brooks Cole, December 2004.
G.H. Golub and C.F. Van Loan.
Matrix Computations.
Baltimore, MD, third edition, 1996.

2
http://tice.utc.fr/moodle/course/view.php?name=MT09