public LsToNonLinearDeriv(FunctionNtoM func,FunctionNtoMxN<S> deriv) { this.func = func; this.deriv = deriv; funcOutput = new double[ deriv.getNumOfOutputsM() ]; J = deriv.declareMatrixMxN(); }
public LsToNonLinearDeriv(FunctionNtoM func,FunctionNtoMxN<S> deriv) { this.func = func; this.deriv = deriv; funcOutput = new double[ deriv.getNumOfOutputsM() ]; J = deriv.declareMatrixMxN(); }
public Individual_to_CoupledJacobian(FunctionNtoM func, FunctionNtoMxN<S> jacobian) { if( func.getNumOfOutputsM() != jacobian.getNumOfOutputsM() ) throw new IllegalArgumentException("M not equal"); if( func.getNumOfInputsN() != jacobian.getNumOfInputsN() ) throw new IllegalArgumentException("N not equal"); this.func = func; this.jacobian = jacobian; }
public Individual_to_CoupledJacobian(FunctionNtoM func, FunctionNtoMxN<S> jacobian) { if( func.getNumOfOutputsM() != jacobian.getNumOfOutputsM() ) throw new IllegalArgumentException("M not equal"); if( func.getNumOfInputsN() != jacobian.getNumOfInputsN() ) throw new IllegalArgumentException("N not equal"); this.func = func; this.jacobian = jacobian; }
@Override public void process(double[] input, double []output) { func.process(input,funcOutput); deriv.process(input, J); int N = deriv.getNumOfInputsN(); int M = deriv.getNumOfOutputsM(); for( int i = 0; i < N; i++ ) { output[i] = 0; } for( int i = 0; i < M; i++ ) { double f = funcOutput[i]; for( int j = 0; j < N; j++ ) { output[j] += 2*f*J.get(i,j); } } } }
@Override public void process(double[] input, double []output) { func.process(input,funcOutput); deriv.process(input, J); int N = deriv.getNumOfInputsN(); int M = deriv.getNumOfOutputsM(); for( int i = 0; i < N; i++ ) { output[i] = 0; } for( int i = 0; i < M; i++ ) { double f = funcOutput[i]; for( int j = 0; j < N; j++ ) { output[j] += 2*f*J.get(i,j); } } } }
if( numerical.getNumOfOutputsM() != jacobian.getNumOfOutputsM() ) throw new RuntimeException("M is not equal "+numerical.getNumOfOutputsM()+" "+jacobian.getNumOfOutputsM());
public static <S extends DMatrix> boolean jacobian( FunctionNtoM func , FunctionNtoMxN<S> jacobian , double param[] , double tol , double differenceScale ) { NumericalJacobianForward_DDRM numerical = new NumericalJacobianForward_DDRM(func,differenceScale); if( numerical.getNumOfOutputsM() != jacobian.getNumOfOutputsM() ) throw new RuntimeException("M is not equal "+numerical.getNumOfOutputsM()+" "+jacobian.getNumOfOutputsM()); if( numerical.getNumOfInputsN() != jacobian.getNumOfInputsN() ) throw new RuntimeException("N is not equal: "+numerical.getNumOfInputsN()+" "+jacobian.getNumOfInputsN()); S found = jacobian.declareMatrixMxN(); DMatrixRMaj expected = new DMatrixRMaj(func.getNumOfOutputsM(),func.getNumOfInputsN()); jacobian.process(param,found); numerical.process(param,expected); checkJacobianShape(found, expected); return MatrixFeatures_D.isIdentical(expected,found,tol); }
if( numerical.getNumOfOutputsM() != jacobian.getNumOfOutputsM() ) throw new RuntimeException("M is not equal "+numerical.getNumOfOutputsM()+" "+jacobian.getNumOfOutputsM());
public static <S extends DMatrix> boolean jacobian( FunctionNtoM func , FunctionNtoMxN<S> jacobian , double param[] , double tol , double differenceScale ) { NumericalJacobianForward_DDRM numerical = new NumericalJacobianForward_DDRM(func,differenceScale); if( numerical.getNumOfOutputsM() != jacobian.getNumOfOutputsM() ) throw new RuntimeException("M is not equal "+numerical.getNumOfOutputsM()+" "+jacobian.getNumOfOutputsM()); if( numerical.getNumOfInputsN() != jacobian.getNumOfInputsN() ) throw new RuntimeException("N is not equal: "+numerical.getNumOfInputsN()+" "+jacobian.getNumOfInputsN()); S found = jacobian.declareMatrixMxN(); DMatrixRMaj expected = new DMatrixRMaj(func.getNumOfOutputsM(),func.getNumOfInputsN()); jacobian.process(param,found); numerical.process(param,expected); checkJacobianShape(found, expected); return MatrixFeatures_D.isIdentical(expected,found,tol); }