lufact

Scilab Function
Last update : 25/04/2007

lufact - factorisation LU d'une matrice creuse

### Calling Sequence

  `[hand,rk]=lufact(A,prec)`

### Parameters

- `A` : matrice réelle carrée creuse
- `hand` : pointeur vers des facteurs L,U creux
- `rk` : entier (rang de A)
- `prec` : vecteur à 2 composantes `prec=[eps,reps]` (tolérances absolue et relative).

### Description

`[hand,rk]=lufact(A)` calcule la factorisation LU d'une matrice creuse `A` . `hand` (variable non affichable) est utilisé par `lusolve` (pour la résolution d'un système linéaire Ax=B) et `luget` (pour récupérer L et U à partir du pointeur `hand` ). `hand` doit être détruit après utilisation (par luget ou lusolve) : `ludel(hand)` ;

La matrice A n'est pas obligatoirement de rang plein mais doit être carrée (puisque A est supposée creuse on peut lui ajouter des lignes ou des colonnes nulles pour la rendre carrée).

  eps : La valeur absolue qu'un élément de A doit avoir pour être utilisé comme pivot, sauf éventuellement en dernier recours. Ce nombre doit être significativement plus petit que le plus petit élément diagonal attendu dans la matrice. La valeur par défaut est `%eps` .
  reps : Ce nombre donne le seuil relatif pour les pivots. Il doit être compris entre zéro et un. S'il vaut un, la méthode se comporte comme un pivot total, qui est très lent et qui a tendance à remplir la matrice. S'il est proche de zéro, la méthode de pivotage est de type Markowitz stricte sans utilisation de seuil. Ce seuil est utilisé pour éliminer les pivots qui causeraient une croissance excessive des termes de la matrice. La croissance des éléments est source d'erreurs d'arrondi, et peut avoir lieu même si la matrice est bien conditionnée. Prendre reps grand réduit cette croissance excessive, et donc les erreurs d'arrondi, mais le prendre trop grand risque d'augmenter le temps d'exécution, ainsi que le remplissage de la matrice. La précision peut donc ainsi être dégradée à cause du nombre élevé d'opérations à effectuer à cause du remplissage. Une valeur correcte semble être 0.001 qui est la valeur par défaut (cette valeur par défaut est aussi utilisée si reps>1 ou reps<0). Cette valeur doit être augmentée et la factorisation doit être recommencée si la croissance s'avère trop importante. Changer le seuil sur les pivots n'améliore pas les performances pour les matrices où la croissance est faible, comme c'est souvent le cas pour les matrices mal conditionnées. La valeur par défaut de reps a été choisie pour un usage de lufact avec des matrices à diagonale à peu près dominante (matrices provenant de problèmes de type éléments finis). Pour ces matrices un pivotage diagonal donne les meilleurs résultats. Pour les matrices à diagonale non dominante, on obtient de meilleurs résultats en prenant un seuil plus élevé, comme 0.01 ou 0.1.

### Examples

    a=rand(5,5);b=rand(5,1);A=sparse(a);
    [h,rk]=lufact(A);
    x=lusolve(h,b);a*x-b
    ludel(h)

### See Also

`sparse` , `lusolve` , `luget` ,