déterminant
d = det(X) [e,m] = det(X)
X
: le déterminant de la matrice
X
. Si X
est creuse,
d
est toujours dense.
abs(m) ∈ [1,10)
. Argument non supporté lorsque X
est polynômiale ou en fractions rationnelles.
d = m * 10e
.
Argument non supporté lorsque X
est polynômiale ou
en fractions rationnelles.
d = det(X) calcule et donne le déterminant de la matrice
X
.
Pour une matrice de polynômes ou de fractions rationelles, d=det(X)
utilise determ(..)
dont l'algorithme est basé sur la transformée de
Fourier.
d=detr(X)
peut être utilisée de manière alternative, utilisant
l'algorithme de Leverrier. Les deux méthodes produisent des résultats équivalents.
Pour une matrice de fractions rationnelles, neutraliser la simplification avec
simp_mode(%f)
peut être requis pour obtenir deux résultats identiques.
[e, m] = det(X) peut être utilisé uniquement pour des
matrices de nombres. Cette syntaxe permet de remédier aux débordements numériques vers 0
ou vers l'infini, lorsque abs(d)
est plus petit que
number_properties("tiny")
≈ 2.23 10-308 ou
plus grand que number_properties("huge")
≈ 1.80 10308.
Pour les matrices numériques denses, det(..)
est basée sur les routines LAPACK
DGETRF pour les matrices réelles et ZGETRF pour les matrices de nombres complexes.
Pour les matrices numériques creuses, le déterminant est calculé d'après la factorisation
LU de X
, réalisée à l'aide de la bibliothèque UMFPACK.
A = rand(3,3)*5; det(A) [e, m] = det(A) // Matrice de nombres complexes : // A = grand(3,3,"uin",0,10) + grand(3,3,"uin",0,10)*%i A = [3+%i, 9+%i*3, 9+%i ; 8+%i*8, 4+%i*3, 7+%i*7 ; 4, 6+%i*2, 6+%i*9] det(A) [e, m] = det(A) abs(m) // dans [1, 10) | ![]() | ![]() |
--> A = rand(3,3)*5; --> det(A) ans = -10.805163 --> [e, m] = det(A) e = 1. m = -1.0805163 --> // Matrice de nombres complexes : --> A = [3+%i,9+%i*3,9+%i;8+%i*8,4+%i*3,7+%i*7;4,6+%i*2,6+%i*9] A = 3. + i 9. + 3.i 9. + i 8. + 8.i 4. + 3.i 7. + 7.i 4. + 0.i 6. + 2.i 6. + 9.i --> det(A) ans = 745. - 225.i --> [e, m] = det(A) e = 2. m = 7.45 - 2.25i --> abs(m) // dans [1, 10) ans = 7.7823518
Déterminants très grands ou très petits : gestion des débordements numériques :
// Très grand déterminant : n = 1000; A = rand(n, n); det(A) [e, m] = det(A) // Très petit déterminant (d'une matrice encodée creuse) : A = (triu(sprand(n,n,1)) + diag(rand(1,n)))/1.5; det(A) prod(diag(A)) [e, m] = det(A) A = A/2; det(A) [e, m] = det(A) | ![]() | ![]() |
--> // Très grand déterminant : --> A = rand(n, n); --> det(A) ans = -Inf --> [e, m] = det(A) // -3.1199e743 e = 743. m = -3.1198687 --> // Très petit déterminant (d'une matrice encodée creuse) : --> n = 1000; --> A = (triu(sprand(n,n,1)) + diag(rand(1,n)))/1.5; --> det(A) ans = 5.21D-236 --> prod(diag(A)) ans = 5.21D-236 --> [e, m] = det(A) e = -236. m = 5.2119757 --> A = A/2; --> det(A) ans = 0. --> [e, m] = det(A) e = -537. m = 4.8641473
Déterminant de matrices polynômiales :
s = %s; det([s, 1+s ; 2-s, s^2]) w = ssrand(2,2,4); roots(det(systmat(w))),trzeros(w) //zeros of linear system | ![]() | ![]() |
--> det([s, 1+s ; 2-s, s^2]) ans = -2 -s +s² +s³ --> w = ssrand(2,2,4); --> roots(det(systmat(w))),trzeros(w) ans = -3.1907522 + 0.i 2.3596502 + 0.i ans = 2.3596502 + 0.i -3.1907522 + 0.i
Le calcul du determinant est basé sur les routines Lapack : DGETRF pour les matrices réelles et ZGETRF pour le cas complexe.
Concernant le cas des matrices creuses, le calcul du déterminant est effectué à partir de la décomposition LU de la librairie umfpack.
Version | Description |
6.1.1 | [e,m]=det(X) syntax extended to sparse matrices. |