Zielony Smok - logo witryny

Tworzenie macierzy przekształceń elementarnych (Java)

Dla każdej macierzy możemy stworzyć macierz odpowiedniego przekształcenia.

Mamy macierz:

Macierz

Wyznacznik tej macierzy wynosi:

Wyznacznik macierzy

Tworzenie macierzy E

Dla powyższej macierzy tworzymy macierz przekształcenia takiego, aby po jego wykonaniu w elemencie a1,1 pojawiło się zero. Najlepiej pomnożyć wiersz pierwszy przez 2 i wynik odjąć od wiersza drugiego.

Przy użyciu poniższej metody tworzymy macierz przekształcenia E:

Matrix matrix2 = MatrixUtil.makeE(matrix1, Elem.Row, 2, 1, -2);

Jest to macierz postaci:

Tworzenie macierzy przekształcenia elementarnego E

Po wykonaniu mnożenia eA otrzymujemy macierz wynikową:

Macierz przekształcenia elementarnego E

Przykład w klasie Matrix065:

 double[][] array1 = {{2, 4, 0, 6}, {4, 10, -2, 12}, {6, 14, 0, 10},
                {-2, 0, 0, -4}};
        Matrix matrix1 = new Matrix(array1);
        matrix1.printToConsole();
        try {
            Util.print(matrix1.det());
        } catch (MatrixException e) {
            e.printStackTrace();
        }
        Matrix matrix2 = MatrixUtil.makeE(matrix1, Elem.Row, 1, 0, -2);
        matrix2.printToConsole();
        Util.print("");
        Matrix matrix3 = MatrixUtil.multiply3(matrix2, matrix1);
        matrix3.printToConsole();
        try {
            Util.print(matrix3.det());
        } catch (MatrixException e) {
            e.printStackTrace();
        }

Po uruchomieniu klasy na konsoli zobaczymy:

2.0 4.0 0.0 6.0
4.0 10.0 -2.0 12.0
6.0 14.0 0.0 10.0
-2.0 0.0 0.0 -4.0
144.0
1.0 0.0 0.0 0.0
-2.0 1.0 0.0 0.0
0.0 0.0 1.0 0.0
0.0 0.0 0.0 1.0
2.0 4.0 0.0 6.0
0.0 2.0 -2.0 0.0
6.0 14.0 0.0 10.0
-2.0 0.0 0.0 -4.0
144.0

Tworzenie macierzy T

Mamy macierz wynikową z poprzedniej operacji:

Macierz

Chcemy zamienić kolumnę drugą z trzecią.

Używając poniższej metody tworzymy macierz przekształcenia T:

Matrix matrix2 = MatrixUtil.makeT(matrix1, 2, 3);

Jest to macierz:

Macierz przekształcenia elementarnego T

Po pomnożeniu prawostronnym AT otrzymujemy macierz wynikową:

Macierz przekształcenia elementarnego T

Przykład w klasie Matrix066:

       double[][] array1 = {{2, 4, 0, 6}, {0, 2, -2, 0},
                {6, 14, 0, 10}, {-2, 0, 0, -4}};
        Matrix matrix1 = new Matrix(array1);
        matrix1.printToConsole();
        try {
            Util.print(matrix1.det());
        } catch (MatrixException e) {
            e.printStackTrace();
        }
        Matrix matrix2 = MatrixUtil.makeT(matrix1, 1, 2);
        matrix2.printToConsole();
        Util.print("");
        Matrix matrix3 = MatrixUtil.multiply3(matrix1, matrix2);
        matrix3.printToConsole();
        try {
            Util.print(matrix3.det());
        } catch (MatrixException e) {
            e.printStackTrace();
        }

Po uruchomieniu klasy na konsoli zoabczymy:

2.0 4.0 0.0 6.0
0.0 2.0 -2.0 0.0
6.0 14.0 0.0 10.0
-2.0 0.0 0.0 -4.0
144.0
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
2.0 0.0 4.0 6.0
0.0 -2.0 2.0 0.0
6.0 0.0 14.0 10.0
-2.0 0.0 0.0 -4.0
-144.0

Jak widzimy zmienił się znak wyznacznika.

Tworzenie macierzy I

Mamy macierz wynikową z poprzedniej operacji:

Macierz

Nie mamy żadnego rozsądnego powodu, poza zwykłym kaprysem programisty, aby mnożyć którykolwiek wiersz macierzy. Pomnóżmy wiersz czwarty przez 3:

Macierz tego przekształcenia wygląda następująco:

Macierz przekształcenia elementarnego I

Mnożymy IA

Otrzymujemy macierz wynikową:

Macierz wynikowa

Przykład w klasie Matrix067:

         double[][] array1 = {{2, 0, 4, 6}, {0, -2, 2, 0},
                {6, 0, 14, 10}, {-2, 0, 0, -4}};
        Matrix matrix1 = new Matrix(array1);
        matrix1.printToConsole();
        try {
            Util.print(matrix1.det());
        } catch (MatrixException e) {
            e.printStackTrace();
        }
        Matrix matrix2 = MatrixUtil.makeI(matrix1, 3, 3);
        matrix2.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:

2.0 0.0 4.0 6.0
0.0 -2.0 2.0 0.0
6.0 0.0 14.0 10.0
-2.0 0.0 0.0 -4.0
-144.0
1.0 0.0 0.0 0.0
0.0 1.0 0.0 0.0
0.0 0.0 1.0 0.0
0.0 0.0 0.0 3.0
2.0 0.0 4.0 6.0
0.0 -2.0 2.0 0.0
6.0 0.0 14.0 10.0
-6.0 0.0 0.0 -12.0
-432.0

Jak widzimy wyznacznik został pomnożony przez 3.

Pliki do ściągnięcia

matrices020.zip

Moduł matrices – aktualny stan projektu = 020;