@Override public void sub(double scalar, Matrix matrix) { DMatrixRMaj a = internal(matrix); mat.reshape(a.numRows, a.numCols, false); CommonOps_DDRM.subtract(scalar, a, mat); }
@Override public void add(double scalar, XMatrix matrix) { DMatrixRMaj a = internal(matrix); mat.reshape(a.numRows, a.numCols, false); CommonOps_DDRM.add(a, scalar, mat); }
public void sub(Matrix matrix1, Matrix matrix2) { DMatrixRMaj a = internal(matrix1); DMatrixRMaj b = internal(matrix2); mat.reshape(a.numRows, a.numCols, false); CommonOps_DDRM.subtract(a, b, mat); }
@Override public void add(XMatrix matrix1, XMatrix matrix2) { DMatrixRMaj a = internal(matrix1); DMatrixRMaj b = internal(matrix2); mat.reshape(a.numRows, a.numCols, false); CommonOps_DDRM.add(a, b, mat); }
/** * In-place update from matrix1 * matrix2. * * @param matrix1 * @param matrix2 */ public void mul(Matrix matrix1, Matrix matrix2) { DMatrixRMaj a = internal(matrix1); DMatrixRMaj b = internal(matrix2); if (a == mat || b == mat) { mat = new DMatrixRMaj(a.numRows, b.numCols); } else { mat.reshape(a.numRows, b.numCols, false); } CommonOps_DDRM.mult(a, b, mat); }
@Override public void initialize( TrustRegionBase_F64<S,?> owner , int numberOfParameters , double minimumFunctionValue) { this.owner = owner; direction.reshape(numberOfParameters,1); }
@Override public void setFunction(FunctionNtoM function, @Nonnull SchurJacobian<S> jacobian) { this.functionResiduals = function; this.functionJacobian = jacobian; residuals.reshape(jacobian.getNumOfOutputsM(),1); }
@Override public void setFunction(FunctionNtoM function, @Nonnull SchurJacobian<S> jacobian) { this.functionResiduals = function; this.functionJacobian = jacobian; residuals.reshape(jacobian.getNumOfOutputsM(),1); }
/** * Returns the algebraic error vector. error = A*U*x. length = number * of observations */ public void computeErrorVector( DMatrixRMaj A , DMatrixRMaj errors ) { errors.reshape(A.numRows,1); CommonOps_DDRM.mult(A,vectorT,errors); }
private boolean bidiagonalization(DMatrixRMaj orig, boolean transposed) { if( transposed ) { A_mod.reshape(orig.numCols,orig.numRows,false); CommonOps_DDRM.transpose(orig,A_mod); } else { A_mod.reshape(orig.numRows,orig.numCols,false); A_mod.set(orig); } if( !bidiag.decompose(A_mod) ) return true; return false; }
private boolean bidiagonalization(DMatrixRMaj orig, boolean transposed) { if( transposed ) { A_mod.reshape(orig.numCols,orig.numRows,false); CommonOps_DDRM.transpose(orig,A_mod); } else { A_mod.reshape(orig.numRows,orig.numCols,false); A_mod.set(orig); } if( !bidiag.decompose(A_mod) ) return true; return false; }
private void init( DMatrixRBlock orig ) { this.A = orig; int height = Math.min(A.blockLength,A.numRows); V.reshape(height,A.numCols,A.blockLength,false); tmp.reshape(height,A.numCols,A.blockLength,false); if( gammas.length < A.numCols ) gammas = new double[ A.numCols ]; zerosM.reshape(A.blockLength,A.blockLength+1,false); }
/** * Retrieve projective transform H */ public void computeH( DMatrixRMaj H ) { H.reshape(4,4); CommonOps_DDRM.insert(PA,H,0,0); for (int i = 0; i < 4; i++) { H.unsafe_set(i,3,ns.data[i]); } }
/** * output = [a ; b] */ public static void concatRows(DMatrixRMaj a , DMatrixRMaj b , DMatrixRMaj output ) { int rows = a.numRows + b.numRows; int cols = Math.max(a.numCols , b.numCols); output.reshape(rows,cols); output.zero(); insert(a,output,0,0); insert(b,output,a.numRows,0); }
/** * output = [a , b] */ public static void concatColumns(DMatrixRMaj a , DMatrixRMaj b , DMatrixRMaj output ) { int rows = Math.max(a.numRows , b.numRows); int cols = a.numCols + b.numCols; output.reshape(rows,cols); output.zero(); insert(a,output,0,0); insert(b,output,0,a.numCols); }
@Override public void init(int numParameters) { super.init(numParameters); hessianInverse.reshape(numParameters,numParameters); CommonOps_DDRM.setIdentity(hessian); CommonOps_DDRM.setIdentity(hessianInverse); }
@Override public boolean decompose(DMatrixRMaj orig) { if( alg.inputModified() ) { work.reshape(orig.numRows,orig.numCols); work.set(orig); return alg.decompose(work); } else { return alg.decompose(orig); } }
@Override public void initialize(double[] initial, int numberOfParameters, double minimumFunctionValue) { int M = functionResiduals.getNumOfOutputsM(); int N = functionResiduals.getNumOfInputsN(); residuals.reshape(M,1); // Set the hessian to identity. There are other potentially better methods hessian.init(numberOfParameters); ((ReshapeMatrix)jacobian).reshape(M,N); super.initialize(initial, numberOfParameters, minimumFunctionValue); }
@Test public void costFunction() { UnconLeastSqTrustRegion_F64<DMatrixRMaj> alg = createAlg(); alg.functionResiduals = new MockFunctionNtoM(new double[]{-1,2,-3},1); alg.residuals.reshape(3,1); double expected = 0.5*(1+4+9); double found = alg.cost(new DMatrixRMaj(1,1)); assertEquals(expected,found, UtilEjml.TEST_F64); }