A propos de la méthode de Gauss

Rappel des algorithmes de la méthode de Gauss, comme ils seraient écrits en Java à l’intérieur d’une classe où :

Triangularisation de la matrice. L’état du système n’est pas géré ici (mais vous devrez vous en occuper dans votre programme).

void triangularisation() {
    for (int k = 0; k < n; k++) {
                            // recherche du pivot dont la
                            // valeur absolue est maximum
        int ip = k;
        double absPiv = Math.abs(mat[ip][k]);
        for (int j = k + 1; j < n; j++)
            if (Math.abs(mat[j][k]) > absPiv) {
                ip = j;
                absPiv = Math.abs(mat[ip][k]);
            }
                            // le pivot est-il nul?
        if (absPiv < epsilon)
            return;
                            // permutation éventuelle de lignes
        if (ip != k) {
            double[] w = mat[k];
            mat[k] = mat[ip];
            mat[ip] = w;
        }
                            // arrangement des lignes sous le pivot
        for (int j = k + 1; j < n; j++) {
            double q = - mat[j][k] / mat[k][k];
            for (int i = k; i <= n; i++)
                mat[j][i] = mat[j][i] + q * mat[k][i];
        }
    }
}

Résolution du système triangulaire. Notez que, au fur et à mesure de leur détermination, les valeurs des inconnues sont rangées à la place des coefficients du second membre. De plus, le système est « nettoyé » (lorsqu’ils cessent d’être utiles, les coefficients sont remplacés par zéro, sauf ceux de la diagonale qui sont remplacés par 1).

void resolution() {
    for (int i = n - 1; i >= 0; i--) {
        double s = 0;
        for (int j = i + 1; j < n; j++) {
            s = s + mat[i][j] * mat[j][n];
            mat[i][j] = 0;
        }
        mat[i][n] = (mat[i][n] - s) / mat[i][i];
        mat[i][i] = 1;
    }
}