code: 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;
  	}
docs: 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