Zielony Smok - logo witryny

Pojęcie macierzy (Java)

Macierz to jedno lub dwuwymiarowa tablica liczb. W Javie może być pokazana jako tablica lub tablica dwuwymiarowa (tablica tablic). Macierze oznaczamy dużymi literami, np. A. Poszczególne komórki (elementy) macierzy oznaczamy Element macierzy, gdzie i oznacza wiersz macierzy, a j kolumnę macierzy. Elementami macierzy są liczby. Mogą nimi być również funkcje rzeczywiste lub zespolone, a nawet macierze. W przypadku Javy również obiekty.

W rozwiązywaniu równań i w geometrii najczęściej używa się macierzy kwadratowych, w których liczba rzędów i kolumn jest taka sama.

Ze względów efektywnościowych mądrzej i lepiej było by używać odpowiednio długiej tablicy 1-wymiarowej. Tutaj stosuję jednak klasyczną tablicę tablic. Jeśli chcesz Czytelniku możesz to zmienić i stworzyć macierz opartą o 1-wymiarową tablicę, co znacznie przyśpieszy Twoje obliczenia.

Konstruktory

private double[][] array;

Konstruktor 1

 public Matrix() {
        array = new double[0][0];
    }

Tworzy macierz z pustą tablicą o zerowych wymiarach.

Konstruktor 2

  public Matrix(int m, int n) {
        array = new double[m][n];
    }

Tworzy macierz z tablicą o podanych wymiarach wypełnioną zerami.

Klasa Matrix001.java
    Matrix matrix = new Matrix(3, 3);
    matrix.setToValue(0);
    matrix.printToConsole();

Tworzymy macierz o wymiarach 3×3. Macierz wypełniamy zerami. Drukujemy macierz na konsoli.

Po uruchomieniu klasy na konsoli zobaczymy:

0.0 0.0 0.0
0.0 0.0 0.0
0.0 0.0 0.0

Konstruktor 3

 @ConstructorProperties({"array"})
    public Matrix(double[][] array) {
        this.array = ArrayUtil.clone(array);
    }

Tworzy macierz z podanej dwuwymiarowej tablicy poprzez jej sklonowanie.

Klasa Matrix002.java
   double[][] array = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
   Matrix matrix = new Matrix(array);
   matrix.printToConsole();

Tworzymy tablicę dwuwymiarową. Tworzymy macierz z tej tablicy.

Po uruchomieniu na konsoli zobaczymy:

   1.0 2.0 3.0
   4.0 5.0 6.0
   7.0 8.0 9.0

Konstruktor 4

 public Matrix(double[] array, int cols) {
        this.array = ArrayUtil.oneToTwo(array, cols);
    }

Tworzy macierz z podanej tablicy jednowymiarowej. Należy podać liczbę kolumn w utworzonej macierzy.

Klasa Matrix003.java

Tworzymy macierz z podanej tablicy jednowymiarowej. Liczba kolumn = 3.

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

Po uruchomieniu na konsoli zobaczymy:

1.0 2.0 3.0
4.0 5.0 6.0
7.0 8.0 9.0

Konstruktor 5

public Matrix(Matrix matrix) {
        this.array = ArrayUtil.clone(matrix.array);
    }

Tworzy macierz z podanej macierzy poprzez głębokie klonownie tablicy podanej macierzy i przypisanie jej do tworzonej macierzy.

W tym miejscu moglibyśmy również użyć poniższej metody zapewniającej głebokie klonowanie obiektu Matrix.

 public Matrix clone() throws CloneNotSupportedException {
    Matrix cl = (Matrix) super.clone();
    cl.array = ArrayUtil.clone(array);
    return cl;
 }
Klasa Matrix004.java
       double[][] array = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        Matrix matrix = new Matrix(array);
        Matrix matrix2 = new Matrix(matrix);
        //albo
        Matrix matrix3 = null;
        try {
            matrix3 = matrix.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        //matrix3.printToConsole();
        matrix2.printToConsole();

Tworzymy macierz. Z tej macierzy tworzymy nową macierz.

Po uruchomieniu na konsoli zobaczymy:

1.0 2.0 3.0
4.0 5.0 6.0
7.0 8.0 9.0

Konstruktor 6

public Matrix(String path) {
        array = read(path);
    }

Wczytuje macierz z podanego pliku. Zakłada się, że każdy wiersz znajduje się w oddzielnej linii, linia zakończona jest średnikiem, a wartości komórek w wierszu są oddzielone pojedynczą spacją.

Klasa Matrix005.java
        Matrix matrix = new Matrix("matrices/assets/matrix1.txt");
        matrix.printToConsole();

Zawartość pliku matrix1.txt jest następująca:

1 2 3;
4 5 6;
7 8 9;

Po uruchomieniu na konsoli zobaczymy:

1.0 2.0 3.0
4.0 5.0 6.0
7.0 8.0 9.0
Klasa Matrix006.java

Klasa zapisuje macierz do pliku tekstowego.

        double[][] tabl = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        Matrix matrix = new Matrix(tabl);
        matrix.write("matrices/assets/matrix2.txt");
        matrix.printToConsole();

Tworzymy macierz. Zapisujemy ją do pliku tekstowego. Po uruchomieniu kodu otrzymamy plik matrix2.txt z zawartością:

1.0 2.0 3.0;
4.0 5.0 6.0;
7.0 8.0 9.0;

Pliki do ściągnięcia

matrices001.zip

Moduł matrices – aktualny stan projektu = 001;