public DMatrixN mulNew (final DMatrixN a) { if (MAX_I != a.MAX_J) dDebug (0,"matrix *, mismatched sizes"); DMatrixN r = new DMatrixN(MAX_I,a.MAX_J); for (int i=0; i<MAX_I; i++) { for (int j=0; j<a.MAX_J; j++) { double sum = 0; for (int k=0; k<MAX_J; k++) sum += v[i*MAX_J+k] * a.v[k*a.MAX_J+j]; r.v [i*a.MAX_I+j] = sum; } } return r; }
public DMatrixN(DMatrixN matrix) { this(matrix.MAX_I, matrix.MAX_J); set(matrix); }
public void clearUpperTriangle() { if (MAX_I != MAX_J) dDebug (0,"clearUpperTriangle() only works on square matrices"); for (int i=0; i<MAX_I; i++) { for (int j=i+1; j<MAX_J; j++) v[i*MAX_J+j] = 0; } }
/** * This returns a new Matrix containing a transposed of this matrix. * Creates new matrix. * @return New transposed matrix. */ public DMatrixN reTranspose() { DMatrixN r = new DMatrixN(MAX_I,MAX_J); for (int i=0; i<MAX_I; i++) { for (int j=0; j<MAX_J; j++) r.v[j*MAX_I+i] = v[i*MAX_J + j]; } return r; }
public void clearLowerTriangle() { if (MAX_I != MAX_J) dDebug (0,"clearLowerTriangle() only works on square matrices"); for (int i=0; i<MAX_I; i++) { for (int j=0; j<i; j++) v[i*MAX_J+j] = 0; } }
/** * This returns a new Matrix containing a transposed of this matrix. * Creates new matrix. * @return New transposed matrix. */ public DMatrixN reTranspose() { DMatrixN r = new DMatrixN(MAX_I,MAX_J); for (int i=0; i<MAX_I; i++) { for (int j=0; j<MAX_J; j++) r.v[j*MAX_I+i] = v[i*MAX_J + j]; } return r; }
public DMatrixN mulNew (final DMatrixN a) { if (MAX_I != a.MAX_J) dDebug (0,"matrix *, mismatched sizes"); DMatrixN r = new DMatrixN(MAX_I,a.MAX_J); for (int i=0; i<MAX_I; i++) { for (int j=0; j<a.MAX_J; j++) { double sum = 0; for (int k=0; k<MAX_J; k++) sum += v[i*MAX_J+k] * a.v[k*a.MAX_J+j]; r.v [i*a.MAX_I+j] = sum; } } return r; }
void plusEq (final DMatrixN a) { if (MAX_I != a.MAX_I || MAX_J != a.MAX_J) dDebug (0,"matrix +=, mismatched sizes"); for (int i=0; i<MAX_I*MAX_J; i++) v[i] += a.v[i]; }
public static DMatrixN wrap(double[] a, int i, int j) { return new DMatrixN(a, i, j); }
public DMatrixN(DMatrixN matrix) { this(matrix.MAX_I, matrix.MAX_J); set(matrix); }
/** * This returns a new Matrix containing a copy of the selected * sub-matrix. * @param np np * @param p p * @param nq nq * @param q q * @return New sub-matrix. */ public DMatrixN newSubMatrix (int np, int []p, int nq, int []q) { if (np < 1 || nq < 1) dDebug (0,"Matrix select, bad index array sizes"); DMatrixN r = new DMatrixN (np,nq); for (int i=0; i<np; i++) { for (int j=0; j<nq; j++) { if (p[i] < 0 || p[i] >= MAX_I || q[i] < 0 || q[i] >= MAX_J) dDebug (0,"Matrix select, bad index arrays"); r.v[i*nq+j] = v[p[i]*MAX_J+q[j]]; } } return r; }
void plusEq (final DMatrixN a) { if (MAX_I != a.MAX_I || MAX_J != a.MAX_J) dDebug (0,"matrix +=, mismatched sizes"); for (int i=0; i<MAX_I*MAX_J; i++) v[i] += a.v[i]; }
public static DMatrixN wrap(double[] a, int i, int j) { return new DMatrixN(a, i, j); }
/** * This returns a new Matrix containing a copy of the selected * sub-matrix. * @param np np * @param p p * @param nq nq * @param q q * @return New sub-matrix. */ public DMatrixN newSubMatrix (int np, int []p, int nq, int []q) { if (np < 1 || nq < 1) dDebug (0,"Matrix select, bad index array sizes"); DMatrixN r = new DMatrixN (np,nq); for (int i=0; i<np; i++) { for (int j=0; j<nq; j++) { if (p[i] < 0 || p[i] >= MAX_I || q[i] < 0 || q[i] >= MAX_J) dDebug (0,"Matrix select, bad index arrays"); r.v[i*nq+j] = v[p[i]*MAX_J+q[j]]; } } return r; }
void subEq (final DMatrixN a) { if (MAX_I != a.MAX_I || MAX_J != a.MAX_J) dDebug (0,"matrix -=, mismatched sizes"); for (int i=0; i<MAX_I*MAX_J; i++) v[i] -= a.v[i]; }
void subEq (final DMatrixN a) { if (MAX_I != a.MAX_I || MAX_J != a.MAX_J) dDebug (0,"matrix -=, mismatched sizes"); for (int i=0; i<MAX_I*MAX_J; i++) v[i] -= a.v[i]; }
public void clearUpperTriangle() { if (MAX_I != MAX_J) dDebug (0,"clearUpperTriangle() only works on square matrices"); for (int i=0; i<MAX_I; i++) { for (int j=i+1; j<MAX_J; j++) v[i*MAX_J+j] = 0; } }
public void clearLowerTriangle() { if (MAX_I != MAX_J) dDebug (0,"clearLowerTriangle() only works on square matrices"); for (int i=0; i<MAX_I; i++) { for (int j=0; j<i; j++) v[i*MAX_J+j] = 0; } }
public double maxDifference (final DMatrixN a) { if (MAX_J != a.MAX_J || MAX_I != a.MAX_I) dDebug (0,"maxDifference(), mismatched sizes"); double max = 0; for (int i=0; i<MAX_I; i++) { for (int j=0; j<MAX_J; j++) { double diff = Math.abs(v[i*MAX_J+j] - a.v[i*MAX_J+j]); if (diff > max) max = diff; } } return max; }
public double maxDifference (final DMatrixN a) { if (MAX_J != a.MAX_J || MAX_I != a.MAX_I) dDebug (0,"maxDifference(), mismatched sizes"); double max = 0; for (int i=0; i<MAX_I; i++) { for (int j=0; j<MAX_J; j++) { double diff = Math.abs(v[i*MAX_J+j] - a.v[i*MAX_J+j]); if (diff > max) max = diff; } } return max; }