
Macierze przekształceń elementarnych (2) (Java)
Dla każdej macierzy kwadratowej A możemy znaleźć taką macierz przekształcenia E, T albo I, że pomnożenie lewostronne macierzy A przez macierz przekształcenia wykona odpowiednie przekształcenie na wierszach macierzy A, a pomnożenie prawostronne, wykona odpowiednie przekształcenie na wierszach A.
Macierz przekształcenia T
Macierz 

i,j – numery zamienianych wierszy w macierzy wejściowej
r,k – oznacza numery wierszy w macierzy wyjściowej
Podobne operacje wykonujemy dla kolumn.
Mamy macierz:

Wyznacznik tej macierzy wynosi:

Chcemy zamienić wiersz drugi z trzecim:



Jedynki umieszczamy w drugim wierszu i trzeciej kolumnie oraz odwrotnie. Odpowiednie elementy diagonalne usuwamy.
Mnożymy macierze:

Zamieniliśmy wiersz drugi z trzecim. Zmienił się znak wyznacznika.
Przykład w klasie Matrix061:
        double[][] array1 = {{1, 0, 0, 0}, {0, 0, 1, 0},
              {0, 1, 0, 0}, {0, 0, 0, 1}};
        Matrix matrix1 = new Matrix(array1);
        matrix1.printToConsole();
        Util.print("x");
        double[][] array2 = {{-1, 2, 3, 4}, {5, -6, 7, 8},
              {9, 10, -11, 12}, {13, 14, 15, 16}};
        Matrix matrix2 = new Matrix(array2);
        matrix2.printToConsole();
        try {
            Util.print(matrix2.det());
        } catch (MatrixException e) {
            e.printStackTrace();
        }
        Util.print("=");
        Matrix matrix3 = MatrixUtil.multiply3(matrix1, matrix2);
        matrix3.printToConsole();
        try {
            Util.print(matrix3.det());
        } catch (MatrixException e) {
            e.printStackTrace();
        }
Po uruchomieniu kodu na konsoli zobaczymy:
1.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 x -1.0 2.0 3.0 4.0 5.0 -6.0 7.0 8.0 9.0 10.0 -11.0 12.0 13.0 14.0 15.0 16.0 -18752.0 = -1.0 2.0 3.0 4.0 9.0 10.0 -11.0 12.0 5.0 -6.0 7.0 8.0 13.0 14.0 15.0 16.0 18752.0
Jeśli chcemy zamienić kolumny odwracamy kolejność mnożenia:

Zamieniliśmy kolumnę drugą z trzecią. Zmienił się znak wyznacznika.
Przykład w klasie Matrix062:
        double[][] array2 = {{-1, 2, 3, 4}, {5, -6, 7, 8},
                {9, 10, -11, 12}, {13, 14, 15, 16}};
        Matrix matrix2 = new Matrix(array2);
        matrix2.printToConsole();
        try {
            Util.print(matrix2.det());
        } catch (MatrixException e) {
            e.printStackTrace();
        }
        Util.print("x");
        double[][] array1 = {{1, 0, 0, 0}, {0, 0, 1, 0}, {0, 1, 0, 0},
                {0, 0, 0, 1}};
        Matrix matrix1 = new Matrix(array1);
        matrix1.printToConsole();
        Util.print("=");
        Matrix matrix3 = MatrixUtil.multiply3(matrix2, matrix1);
        matrix3.printToConsole();
        try {
            Util.print(matrix3.det());
        } catch (MatrixException e) {
            e.printStackTrace();
        }
Po uruchomieniu kodu na konsoli zobaczymy:
-1.0 2.0 3.0 4.0 5.0 -6.0 7.0 8.0 9.0 10.0 -11.0 12.0 13.0 14.0 15.0 16.0 -18752.0 x 1.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 = -1.0 3.0 2.0 4.0 5.0 7.0 -6.0 8.0 9.0 -11.0 10.0 12.0 13.0 15.0 14.0 16.0 18752.0
Pliki do ściągnięcia
Moduł matrices – aktualny stan projektu = 018;

