Poprzedni artykułpreviousnextNastępny artykuł

Istnieje wiele rodzajów macierzy, które nie są wymienione poniżej. Być może zostaną uwzględnione w dalszej przyszłości.

Macierz kwadratowa

Macierz kwadratowa to macierz, która ma jednakową liczbę wierszy i kolumn.
Macierzy o postaci:
Macierz kwadratowa
w języku Java odpowiada tablica array[3][3].
Elementy macierzy podaje się w postaci Element macierzy , gdzie i oznacza numer rzędu, a j numer kolumny, na przecięciu których znajduje się element, a więc element a00 w tablicy byłby elementem array[0][0], czyli element leży w pierwszym rzędzie i w pierwszej kolumnie.
Poniższa metoda służy do badania czy macierz jest kwadratowa:

 public boolean isSquareMatrix() {
        return getRowCount() == getColCount();
    }

Macierz zerowa

Macierz zerowa, oznaczana literą Θ (theta), to macierz której wszystkie elementy są równe 0. Macierz można wyzerować używając metody setToValue(). Przykład podany był w pliku Matrix001.java
Macierz zerowa
Czy macierz jest zerowa możemy sprawdzić przy użyciu metody:

public boolean isZeroMatrix() {
        for (int i = 0; i < getRowCount(); i++) {
            for (int j = 0; j < getColCount(); j++) {
                if (array[i][j] != 0.0) {
                    return false;
                }
            }
        }
        return true;
    }

Macierz jednostkowa

Macierz diagonalną, której wszystkie elementy leżące na tzw. głównej przekątnej są równe 1, a pozostałe są równe 0, nazywana jest macierzą jednostkową:
Macierz jednostkowa
W algebrze macierzy mnożenie przez macierz jednostkową jest odpowiednikiem mnożenia przez 1.
Macierz jednostkowa
Macierz jednostkowa
Macierz możemy uczynić jednostkową używając metody:

 public void setToIdentity() throws MatrixException {
        if (!isSquareMatrix()) {
            throw new MatrixException("Macierz nie jest kwadratowa");
        }
        for (int i = 0; i < getRowCount(); i++) {
            for (int j = 0; j < getColCount(); j++) {
                if (i == j) {
                    array[i][j] = 1.0;
                } else {
                    array[i][j] = 0.0;
                }
            }
        }
    }

Sprawdzić, czy macierz jest jednostkowa, możemy przy uzyciu poniższej metody:

 public boolean isIdentityMatrix() throws MatrixException {
        if (!isSquareMatrix()) {
            throw new MatrixException("Macierz nie jest kwadratowa");
        }
        for (int i = 0; i < getRowCount(); i++) {
            for (int j = 0; j < getColCount(); j++) {
                if ((i != j) && (array[i][j] != 0)) {
                    return false;
                } else if ((i == j) && (array[i][j] != 1)) {
                    return false;
                }
            }
        }
        return true;
    }
Klasa Matrix008.java
1    package matrices2;
2    
3    import matrices.Matrix;
4    import matrices.MatrixException;
5    
6    public class Matrix008 {
7        public static void main(String[] args) {
8            Matrix matrix = new Matrix(3, 3);
9            try {
10               matrix.setToIdentity();
11           } catch (MatrixException e) {
12               e.printStackTrace();
13           }
14           matrix.printToConsole();
15           try {
16               System.out.println(matrix.isIdentityMatrix());
17           } catch (MatrixException e) {
18               e.printStackTrace();
19           }
20       }
21   }
22   

Po uruchomieniu klasy na konsoli zobaczymy:

1.0 0.0 0.0 
0.0 1.0 0.0 
0.0 0.0 1.0 
true

Macierz elementarna

Zostanie omówiona w oddzielnym wpisie.

Macierze przekształceń elementarnych

Zostaną omówione w oddzielnym wpisie.

Macierz wierszowa

Macierz Macierz wierszowa , która posiada tylko jeden wiersz jest nazywana macierzą wierszową albo wektorem wierszowym:
Macierz wierszowa
Pzy użyciu poniższej metody można sprawdzić czy badana macierz jest macierzą wierszową:

 public boolean isRowMatrix() {
        return getRowCount() == 1;
    }

Macierz kolumnowa

Macierz Macierz kolumnowa , która ma tylko jedną kolumnę nazywana jest macierzą kolumnową albo wektorem kolumnowym:
Macierz kolumnowa
Przy użyciu poniższej metody możemy sprawdzić czy macierz jest macierzą kolumnową:

  public boolean isColumnMatrix() {
        return getColCount() == 1;
    }

Macierz diagonalna

Macierz diagonalna to macierz kwadratowa, której wszystkie elementy, poza elementami leżącymi na przekątnej, są równe 0.
Macierz diagonalna
Taką macierz można też zapisać jako:
Macierz diagonalna

Właściwości macierzy diagonalnych

  1. Suma macierzy diagonalnych jest macierzą diagonalną
  2. Iloczyn macierzy diagonalnych jest macierzą diagonalną
  3. Podniesienie każdego z elementów diagonalnych do potęgi n oznacza podniesienie całej macierzy do tej potęgi
  4. Wyznacznik macierzy diagonalnej jest iloczynem elementów diagonalnych
  5. Jeżeli wyznacznik macierzy jest odwracalny, to macierz jest nieosobliwa
  6. Macierz jest odwracalna jeśli każdy jej element jest odwracalny. Macierz odracamy przez odwrócenie każdego jej elementu
Ad. 2

Macierz diagonalna
Macierz diagonalna
Macierz diagonalna

Ad. 3

Macierz diagonalna
Macierz diagonalna

Ad. 4

Macierz diagonalna

Ad. 6

Macierz diagonalna

Metody

Aby sprawdzić czy macierz jest diagonalna możemy użyć metody:

 public boolean isDiagonalMatrix() throws MatrixException {
        if (!isSquareMatrix()) {
            throw new MatrixException("Macierz nie jest kwadratowa");
        }
        for (int i = 0; i < getRowCount(); i++) {
            for (int j = 0; j < getColCount(); j++) {
                if ((array[i][j] != 0.0) && (i != j)) {
                    return false;
                }
            }
        }
        return true;
    }

Elementy leżące na przekątnej możemy pobrać do tablicy przy użyciu metody:

 public double[] getDiagonal() throws MatrixException {
        if (!isSquareMatrix()) {
            throw new MatrixException("Macierz nie jest kwadratowa");
        }
        int len = getRowCount();
        double[] diagonals = new double[len];
        for (int i = 0; i < getRowCount(); i++) {
            for (int j = 0; j < getColCount(); j++) {
                if (i == j) {
                    diagonals[i] = getArray()[i][j];
                }
            }
        }
        return diagonals;
    }

Macierz skalarna

Jest macierzą diagonalną, której każdy element jest wartością skalarną α. Jeżeli Macierz skalarna
Macierz skalarna
Jest iloczynem macierzy jednostkowej I przez skalar:
Macierz skalarna
Czy macierz jets skalarna możemy sprawdzić przy użyciu metody:

 public boolean isScalarMatrix() throws MatrixException {
        if (!isSquareMatrix()) {
            throw new MatrixException("Macierz nie jest kwadratowa");
        }
        double[] diagonals = getDiagonal();
        double first = diagonals[0];
        for (int i = 1; i < diagonals.length; i++) {
            if (diagonals[i] != first) {
                return false;
            }
        }
        return true;
    }

Macierz symetryczna

Macierz symetryczna to macierz, której elementy rozmieszczone symetrycznie po obu stronach przekątnej głównej są równe, czyli
Macierz symetryczna
Przy transpozycji (opowiem o niej oddzienie) otrzymujemy tę samą macierz:
Macierz symetryczna
Macierz symetryczna
Czy macierz jest symetryczna można sprawdzić przy użyciu metody:

public boolean isSymmetricMatrix() throws MatrixException {
        if (!isSquareMatrix()) {
            throw new MatrixException("Macierz nie jest kwadratowa");
        }
        for (int i = 0; i < getRowCount(); i++) {
            for (int j = 0; j < getColCount(); j++) {
                if (array[i][j] != array[j][i]) {
                    return false;
                }
            }
        }
        return true;
    }

Macierz antysymetryczna

Macierz antysymetryczna to taka macierz, w której elementy rozmieszczone symetrycznie po obu stronach przekątnej głównej są przeciwne (mają przeciwne znaki), czyli:
Macierz antysymetryczna
Macierz antysymetryczna
Z warunku wynika, że elementy diagonalne muszą być równe 0.
W procesie translacji Macierz antysymetryczna
Czy macierz jest antysymetryczna można sprawdzić przy użyciu metody:

 public boolean isAntisymmetricMatrix() throws MatrixException {
        if (!isSquareMatrix()) {
            throw new MatrixException("Macierz nie jest kwadratowa");
        }
        for (int i = 0; i < getRowCount(); i++) {
            for (int j = 0; j < getColCount(); j++) {
                if (array[i][j] != -array[j][i]) {
                    return false;
                }
            }
        }
        return true;
    }

Macierz trójdiagonalna

Macierz jest trójdiagonalna jeżeli wszystkie elementy macierzy leżące poza główną przekątną i dwiema przylegającymi do niej przekątnymi są zerowe.
macierz trójdiagonalna
Czy macierz jest trójdiagonalna mozna sprawdzić przy użyciu poniższej metody:

 public boolean is3DiagonalMatrix() throws MatrixException {
        if (!isSquareMatrix()) {
            throw new MatrixException("Macierz nie jest kwadratowa");
        }
        for (int i = 0; i < getRowCount(); i++) {
            for (int j = 0; j < getColCount(); j++) {
                if ((array[i][j] == 0.0) && !(Math.abs(i - j) > 1)) {
                    return false;
                }
            }
        }
        return true;
    }

Macierz górnotrójkątna

Macierz górnotrójkątna to macierz, której elementy leżace poniżej przekątnej głównej są zerowe.
Macierz górnotrójkątna
Macierz wynikowa z pomnożenia przez siebie 2 macierzy górnotrójkątnych jest macierzą górnotrójkątną.
Czy macierz jest górnotrójkątna mozna sprawdzic przy uzyciu poniższej metody:

 public boolean isUpperTriangleMatrix() throws MatrixException {
        if (!isSquareMatrix()) {
            throw new MatrixException("Macierz nie jest kwadratowa");
        }
        for (int i = 0; i < getRowCount(); i++) {
            for (int j = 0; j < getColCount(); j++) {
                if ((i > j) && (array[i][j] != 0)) {
                    return false;
                }
            }
        }
        return true;
    }

Macierz dolnotrójkątna

Macierz dolnotrójkątna to macierz, której elementy leżące powyżej przekątnej głównej są zerowe.

Macierz wynikowa z pomnożenia przez siebie 2 macierzy dolnotrójkątnych jest macierzą dolnotrójkątną.
Czy macierz jest dolnotrójkątna możemy sprawdzić przy uzyciu poniższej metody:

 public boolean isLowerTriangleMatrix() throws MatrixException {
        if (!isSquareMatrix()) {
            throw new MatrixException("Macierz nie jest kwadratowa");
        }
        for (int i = 0; i < getRowCount(); i++) {
            for (int j = 0; j < getColCount(); j++) {
                if ((i < j) && (array[i][j] != 0)) {
                    return false;
                }
            }
        }
        return true;
    }

Podmacierz

Podmacierz to macierz powstała z macierzy przez usunięcie z niej dowolnej liczby wierszy i/lub kolumn niekoniecznie do siebie przylegających. Indeksy podmacierzy zaczynają się od 1.
Macierz Podmacierz
Podmacierz Podmacierz

Metody

Podmacierz możemy znaleźć używając metod:

public static Matrix submatrix(Matrix matrix, int row, int col) {
        Matrix mat1 = deleteRow(matrix, row);
        return deleteCol(mat1, col);
    }

    // w tablicach podane są indeksy kolumn do usunięcia
    public static Matrix submatrix(Matrix matrix, int[] rows, int[] cols) {
        Matrix mat = null;
        try {
            mat = matrix.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        int ii = 0;
        for (int row : rows) {
            mat = deleteRow(matrix, row - ii);
            ii++;
        }
        int jj = 0;
        for (int col : cols) {
            mat = deleteCol(mat, col - jj);
            jj++;
        }
        return mat;
    }
  //pobiera podmacierz składającą się z podanej liczby rzędów i kolumn
    //bezpośrednio do siebie przylegających
    public static Matrix submatrix(Matrix matrix, int startRow, int endRow,
                                   int startCol, int endCol) {
        int len1 = endRow - startRow + 1;
        int len2 = endCol - startCol + 1;
        int len = len1 * len2;
        double[] ar = new double[len];
        int k = 0;
        for (int i = startRow; i < endRow + 1; i++) {
            for (int j = startCol; j < endCol + 1; j++) {
                ar[k] = matrix.getArray()[i][j];
                k++;
            }
        }
        return new Matrix(ar, len2);
    }

Przykłady

Klasa Matrix019.java

Z podanej macierzy usuwamy 3 wiersz i kolumnę.

 double[][] array = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        Matrix matrix = new Matrix(array);
        matrix.printToConsole();
        Util.print("");
        Matrix matrix1 = MatrixUtil.submatrix(matrix, 2, 2);
        matrix1.printToConsole();

Po uruchomieniu klasy na konsoli zobaczymy:

1.0 2.0 3.0 
4.0 5.0 6.0 
7.0 8.0 9.0 

1.0 2.0 
4.0 5.0 
Klasa Matrix028.java
 double[] array1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
                16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
                32, 33, 34, 35, 36};
        Matrix matrix1 = new Matrix(array1, 6);
        matrix1.printToConsole();
        Matrix matrix2 = MatrixUtil.submatrix(matrix1, 2, 4, 2, 4);
        matrix2.printToConsole();

Z macierzy
Podmacierz
wybieramy podmacierz: 3, 4 i 5 rząd oraz 3, 4 i 5 kolumna. Otrzymujemy podmacierz:
Podmacierz

Klasa Matrix055.java
 double[][] arr = {{1, 2, 3, 4, 5}, {2, 3, 4, 5, 6}, {3, 4, 5, 6, 7},
                {4, 5, 6, 7, 8}};
        Matrix mat = new Matrix(arr);
        mat.printToConsole();
        System.out.println();
        Matrix mat1 = MatrixUtil.submatrix(mat, new int[]{1}, new int[]{1, 3});
        mat1.printToConsole();

Z macierzy
Podmacierz
Usuwamy rząd 2 oraz kolumny 2 i 4. Otrzymujemy podmacierz:
Podmacierz

Podmacierz główna

Podmacierz główna, to taka podmacierz, która jeśli zawiera elementy i-tego wiersza macierzy wyjściowej to zawiera również elementy i-tej kolumny tej macierzy.
Macierz:
Podmacierz główna
Podmacierz główna (zawiera elementy drugiego wiersza i drugiej kolumny):
Podmacierz głowna
Podmacierzą główną jest również każdy z elementów leżących na przekątnej głównej.

Macierz transponowana

Zostanie omówiona w rozdziale 'Transpozycja macierzy'.

Macierz odwrotna

Zostanie omówiona w rozdziale 'Odwracanie macierzy'.

Macierz osobliwa

Jeżeli wyznacznik macierzy równa się zeru to macierz nie ma odwrotności (jest nieodwracalna) i nazywana jest macierzą osobliwą.
Macierz osobliwa
Osobliwość macierzy możemy sprawdzić używając metody:

public boolean isSingularMatrix() {
        double det = 0.0;
        try {
            det = det();
        } catch (MatrixException e) {
            e.printStackTrace();
        }
        return det == 0;
    }
Klasa Matrix024.java
double[] array = {2, 3, 1, 1.5};
        Matrix matrix = new Matrix(array, 2);
        matrix.printToConsole();
        try {
            System.out.println("det: " + matrix.det());
        } catch (MatrixException e) {
            e.printStackTrace();
        }
        System.out.println("czy jest osobliwa?: " + matrix.isSingularMatrix());

Sprawdzamy, czy powyższa macierz jest osobliwa. Po uruchomieniu klasy na konsoli zobaczymy:

2.0 3.0 
1.0 1.5 
det: 0.0
czy jest osobliwa?: true

Macierz nieosobliwa

Jeżeli wyznacznik macierzy jest różny od zera to macierz ma odwrotność (jest odwracalna) i nazywana jest macierzą nieosobliwą.
Macierz osobliwa

Klasa Matrix025.java

Testujemy osobliwość macierzy.

 double[] array = {2, 3, 1, 3};
        Matrix matrix = new Matrix(array, 2);
        matrix.printToConsole();
        try {
            System.out.println("det: " + matrix.det());
        } catch (MatrixException e) {
            e.printStackTrace();
        }
        System.out.println("czy jest osobliwa?: " + matrix.isSingularMatrix());

Po uruchomieniu klasy na konsoli zobaczymy:

2.0 3.0 
1.0 3.0 
det: 3.0
czy jest osobliwa?: false

Macierz schodkowa

Macierz schodkowa to macierz, w której wiersze zerowe (jeśli występują) znajdują się najniżej, a w wierszach nie zerowych, pierwsze niezerowe elementy, kolejnych niezerowych wierszy, znajdują się w coraz dalszych kolumnach.
Macierz schodkowa
Macierz schodkowa
Macierz schodkowa

Macierz schodkowa zredukowana

Macierz schodkowa zredukowana to macierz, która:

  • jest schodkowa
  • w każdym wierszu niezerowym, pierwszy niezerowy wyraz jest równy 1, a pod nim (w kolumnie) występują wyłącznie zera
  • Macierz schodkowa zredukowana
    Macierz schodowa zredukowana
    Macierz kwadratowa, w postaci schodkowej zredukowanej jest zawsze macierzą górnotrójkątną.

    Macierz ortogonalna

    Macierz kwadratowa A jest nazywana macierzą ortogonalną, jeśli macierz transponowana macierzy A pomnożona przez macierz daje w wyniku macierz jednostkową:
    Macierz ortogonalna
    Z tego wynika, że:
    Macierz ortogonalna
    Wyznacznik macierzy ortogonalnej jest równy 1 albo -1.
    Mamy macierz:
    Macierz ortogonalna
    Macierz ortogonalna
    Macierz ortogonalna
    Macierz ortogonalna

    Klasa Matrix078.java
            double[][] A = {{1, 0}, {0, -1}};
            Matrix m = new Matrix(A);
            m.printToConsole();
            Util.print("");
            Matrix m1 = MatrixUtil.transpose(m);
            m1.printToConsole();
            Util.print("");
            Matrix m2 = MatrixUtil.multiply3(m1, m);
            m2.printToConsole();
            Util.print("");
            Matrix m3 = MatrixUtil.inverseGauss(m);
            m3.printToConsole();
            Util.print("");
    

    Po uruchomieniu klasy na konsoli otrzymujemy:

    1.0 0.0 
    0.0 -1.0 
    
    1.0 0.0 
    0.0 -1.0 
    
    1.0 0.0 
    0.0 1.0 
    
    1.0 0.0 
    0.0 -1.0 
    

    Macierz blokowa

    Omówiono w podrozdziale poświęconym partycjonowaniu macierzy.

    Macierz nilpotentna

    Macierz nilpotentna, to macierz kwadratowa, która podniesiona do pewnej potęgi n (gdzie n jest liczbą całkowitą dodatnią) jest macierzą zerową:

    Najniższe n, które spełnia powyższą równość nazywane jest indeksem n.
    Macierz nilpotentna
    Macierz nilpotentna
    Macierz nilpotentna
    Macierz A jest macierzą nilpotentną o indeksie n=3.
    Przykład w klasie Matrix086.java w załączonych plikach.

    Pliki do ściągnięcia

    matrices002.zip
    Moduł matrices - aktualny stan projektu = 002;

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *