public static UnconstrainedLeastSquaresSchur<DMatrixRMaj> levenbergMarquardtSchur(
			boolean robust,
			@Nullable ConfigLevenbergMarquardt config  )
	{
		if( config == null )
			config = new ConfigLevenbergMarquardt();

		HessianSchurComplement_DDRM hessian;

		if( robust ) {
			LinearSolverDense<DMatrixRMaj> solverA = LinearSolverFactory_DDRM.pseudoInverse(true);
			LinearSolverDense<DMatrixRMaj> solverD = LinearSolverFactory_DDRM.pseudoInverse(true);
			hessian = new HessianSchurComplement_DDRM(solverA,solverD);
		} else {
			// defaults to cholesky
			hessian = new HessianSchurComplement_DDRM();
		}

		UnconLeastSqLevenbergMarquardtSchur_F64<DMatrixRMaj> lm =
				new UnconLeastSqLevenbergMarquardtSchur_F64<>(new MatrixMath_DDRM(),hessian);
		lm.configure(config);
		return lm;
	}
public static UnconstrainedLeastSquaresSchur < DMatrixRMaj > levenbergMarquardtSchur ( boolean robust , @ Nullable ConfigLevenbergMarquardt config ) { if ( config == null ) config = new ConfigLevenbergMarquardt ( ) ; HessianSchurComplement_DDRM hessian ; if ( robust ) { LinearSolverDense < DMatrixRMaj > solverA = LinearSolverFactory_DDRM . pseudoInverse ( true ) ; LinearSolverDense < DMatrixRMaj > solverD = LinearSolverFactory_DDRM . pseudoInverse ( true ) ; hessian = new HessianSchurComplement_DDRM ( solverA , solverD ) ; } else { hessian = new HessianSchurComplement_DDRM ( ) ; } UnconLeastSqLevenbergMarquardtSchur_F64 < DMatrixRMaj > lm = new UnconLeastSqLevenbergMarquardtSchur_F64 < > ( new MatrixMath_DDRM ( ) , hessian ) ; lm . configure ( config ) ; return lm ; }
LM with Schur Complement

@param robust If true then a slow by robust solver is used. true = use SVD
@param config configuration for LM
@return the solver