package mylib.math; public class Matrix { /** Konstruktor * @param n Broj redova matrice * @param m Broj kolona matrice */ public Matrix(int n, int m) throws MathException { if (n < 1 || m < 1) throw new MathException("Invalid matrix dimensions"); this.n = n; this.m = m; data = new double[n][]; for (int i = 0; i < n; i++) data[i] = new double[m]; } /** Postavlja sadrzaj matrice. * @param x Nova vrednost matrice */ public void setData(double[][] x) throws MathException { if (x == null || x.length == 0 || x[0].length == 0) throw new MathException("Invalid matrix dimensions"); n = x.length; m = x[0].length; data = x; } /* Vraca sadrzaj matrice. * @return Tekuca vrednost matrice */ public double[][] getData() { return data; } /* Mnozi sadrzaj matrice objekta koji je pozvan (this) sa * sadrzajem matrice b (objekta koji je prosledjen kao * parametar). Rezultat mnozenja smesta u novi objekat koga * vraca kao rezultat metode. * @param b Druga matrica u mnozenju * @return Rezultat mnozenja */ public Matrix multiply(Matrix b) throws MathException { if (this.m != b.n) throw new MathException("Invalid matrix dimensions"); Matrix retVal = new Matrix(this.n, b.m); for (int i = 0; i < this.n; i++) for (int j = 0; j < b.m; j++) { retVal.data[i][j] = 0; for (int k = 0; k < this.m; k++) retVal.data[i][j] += this.data[i][k] * b.data[k][j]; } return retVal; } /* Mnozi sadrzaj dve date matrice i rezultat mnozenja * vraca kao rezultat metode. Obratiti paznju da je ovo * staticka metoda! * @param a Prvi cinilac poizvoda * @param b Drugi cinilac proizvoda * @return Rezultat mnozenja */ public static Matrix multiply(Matrix a, Matrix b) throws MathException { Matrix retVal = new Matrix(a.n, a.m); retVal.setData(a.data); return retVal.multiply(b); } /* Mnozi sadrzaj matrice objekta koji je pozvan (this) sa * sadrzajem matrice b (objekta koji je prosledjen kao * parametar). Rezultat mnozenja se smesta u matricu objekta * koji je pozvan. Metoda ne vraca nikakav rezultat! * @param b Drugi cinilac proizvoda */ public void multiply2(Matrix b) throws MathException { this.data = (this.multiply(b)).getData(); } /** Vraca string reprezentaciju objekta. * @return String reprezentacija objekta */ public String toString() { String retVal = ""; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { retVal += Double.toString(data[i][j]) + " "; } retVal += "\n"; } return retVal; } /* Sadrzaj matrice */ private double[][] data; /* Dimenzije matrice */ private int n, m; }