Matlab contient une bibliothèque numérique très complète pour la résolution de grands systèmes linéaires creux (tapez help sparfun pour avoir des précisions). Par exemple, vous pouvez effectuer la décomposition de Choleski d'une matrice bande en procédant de la manière suivante.
M=5 I = speye(M,M); E = sparse(2:M,1:M-1,1,M,M); D = -E-E'+2*I; A = kron(D,I)+kron(I,D); spy(A); [R,p]=chol(A); spy(R); N=M*M b = zeros([N,1]); for i=1:M b(i) = b(i)+i; end for i=1:M b(M*(i-1)+1) = b(M*(i-1)+1)+i; end for i=1:M b(M*(i-1)+M) = b(M*(i-1)+M)+M+1+i; end for i=1:M b(M*(M-1)+i) = b(M*(M-1)+i)+M+1+i; end x=R\(R'\b)
Voici les coefficients non nuls de la matrice (spy(A)
dans le script Matlab) :
Voici les coefficients non nuls de la matrice (spy(R')
dans le script Matlab) :
Nous observons bien que les matrices et
ont même
largeur de bande. Néanmoins, nous constatons que
la matrice
est moins creuse que la matrice
.
Voici le résultat du calcul Matlab :
x = 2.0000 3.0000 4.0000 5.0000 6.0000 3.0000 4.0000 5.0000 6.0000 7.0000 4.0000 5.0000 6.0000 7.0000 8.0000 5.0000 6.0000 7.0000 8.0000 9.0000 6.0000 7.0000 8.0000 9.0000 10.0000EPFL-IACS-ASN