det déterminant

## Séquence d'appel

                d = det(X)
                [e,m] = det(X)

## Paramètres

X
  matrice carrée de nombres ou polynômes ou fractions rationnelles (à coefficients) réels ou complexes. Matrices creuses acceptées.

d
  Scalaire du type de `X` : le déterminant de la matrice `X`. Si `X` est creuse, `d` est toujours dense.

m
  nombre réel ou complexe : mantisse du déterminant en base 10, telle que `abs(m) ∈ [1,10)`. Argument non supporté lorsque `X` est polynômiale ou en fractions rationnelles.

e
  entier : la puissance de 10 du déterminant, telle que `d = m * 10e`. Argument non supporté lorsque `X` est polynômiale ou en fractions rationnelles.

## Description

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.

## Exemples

    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

## Voir aussi

- detr
- determ
- simp_mode

## Fonctions Utilisées

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.

## Historique

6.1.1 [e,m]=det(X) syntax extended to sparse matrices.