110    Matrix< Scalar, Dynamic, 1> _mean;
 
  115    void set_covar(
const Matrix<Scalar,Dynamic,Dynamic> &covar) { _covar = covar; }
 
  116    void set_transform(
const Matrix<Scalar,Dynamic,Dynamic> &transform) { _transform = transform; }
 
  119    Matrix<Scalar,Dynamic,Dynamic> _covar;
 
  120    Matrix<Scalar,Dynamic,Dynamic> _transform;
 
  123    SelfAdjointEigenSolver<Matrix<Scalar,Dynamic,Dynamic> > _eigenSolver; 
 
  127                const uint64_t &seed=std::mt19937::default_seed)
 
  128      :_use_cholesky(use_cholesky)
 
  133              const bool &use_cholesky=
false,
const uint64_t &seed=std::mt19937::default_seed)
 
  134      :_use_cholesky(use_cholesky)
 
  141    void setMean(
const Matrix<Scalar,Dynamic,1>& mean) { _mean = mean; }
 
  142    void setCovar(
const Matrix<Scalar,Dynamic,Dynamic>& covar)
 
  152      Eigen::LLT<Eigen::Matrix<Scalar,Dynamic,Dynamic> > cholSolver(_covar);
 
  157      if (cholSolver.info()==Eigen::Success)
 
  160          _transform = cholSolver.matrixL();
 
  164          throw std::runtime_error(
"Failed computing the Cholesky decomposition. Use solver instead");
 
  169      _eigenSolver = SelfAdjointEigenSolver<Matrix<Scalar,Dynamic,Dynamic> >(_covar);
 
  170      _transform = _eigenSolver.eigenvectors()*_eigenSolver.eigenvalues().cwiseMax(0).cwiseSqrt().asDiagonal();
 
  176    Matrix<Scalar,Dynamic,-1> 
samples(
int nn, 
double factor)
 
  178    return ((_transform * Matrix<Scalar,Dynamic,-1>::NullaryExpr(_covar.rows(),nn,randN))*factor).colwise() + _mean;
 
 
  181    Matrix<Scalar,Dynamic,-1> samples_ind(
int nn, 
double factor)
 
  183    dMat pop = (Matrix<Scalar,Dynamic,-1>::NullaryExpr(_covar.rows(),nn,randN))*factor;
 
  184    for (
int i=0;i<pop.cols();i++)
 
  186        pop.col(i) = pop.col(i).cwiseProduct(_transform) + _mean;
 
  191    Matrix<Scalar,Dynamic,-1> samples_ind(
int nn)
 
  193    return (Matrix<Scalar,Dynamic,-1>::NullaryExpr(_covar.rows(),nn,randN));