20#ifndef GAUSSIAN_PROCESS_H 
   21#define GAUSSIAN_PROCESS_H 
   41    covariance_functions::CovFunc* covFunc_;
 
   42    covariance_functions::CovFunc* covFuncProj_;
 
   43    Eigen::VectorXd data_loc_;
 
   44    Eigen::VectorXd data_out_;
 
   45    Eigen::VectorXd data_var_;
 
   46    Eigen::MatrixXd gram_matrix_;
 
   47    Eigen::VectorXd alpha_;
 
   48    Eigen::LDLT<Eigen::MatrixXd> chol_gram_matrix_;
 
   50    bool use_explicit_trend_;
 
   51    Eigen::MatrixXd feature_vectors_;
 
   52    Eigen::MatrixXd feature_matrix_;
 
   53    Eigen::LDLT<Eigen::MatrixXd> chol_feature_matrix_;
 
   54    Eigen::VectorXd beta_;
 
   57    typedef std::pair<Eigen::VectorXd, Eigen::MatrixXd> VectorMatrixPair;
 
   60    GP(
const covariance_functions::CovFunc& covFunc);
 
   61    GP(
const double noise_variance,
 
   62       const covariance_functions::CovFunc& covFunc);
 
   66    GP& operator=(
const GP& that);
 
   73    bool setCovarianceFunction(
const covariance_functions::CovFunc& covFunc);
 
   78    void enableOutputProjection(
const covariance_functions::CovFunc& covFunc);
 
   83    void disableOutputProjection();
 
   90    Eigen::VectorXd drawSample(
const Eigen::VectorXd& locations) 
const;
 
   95    Eigen::VectorXd drawSample(
const Eigen::VectorXd& locations,
 
   96                               const Eigen::VectorXd& random_vector) 
const;
 
  112    void infer(
const Eigen::VectorXd& data_loc,
 
  113               const Eigen::VectorXd& data_out,
 
  114               const Eigen::VectorXd& data_var = Eigen::VectorXd());
 
  123    void inferSD(
const Eigen::VectorXd& data_loc,
 
  124                 const Eigen::VectorXd& data_out,
 
  126                 const Eigen::VectorXd& data_var = Eigen::VectorXd(),
 
  127                 const double prediction_point = std::numeric_limits<double>::quiet_NaN());
 
  141    Eigen::VectorXd predict(
const Eigen::VectorXd& locations, Eigen::VectorXd* variances = 
nullptr) 
const;
 
  150    Eigen::VectorXd predictProjected(
const Eigen::VectorXd& locations, Eigen::VectorXd* variances = 
nullptr) 
const;
 
  157    Eigen::VectorXd predict(
const Eigen::MatrixXd& prior_cov, 
const Eigen::MatrixXd& mixed_cov,
 
  158                             const Eigen::MatrixXd& phi = Eigen::MatrixXd() , Eigen::VectorXd* variances = 
nullptr) 
const;
 
  163    void setHyperParameters(
const Eigen::VectorXd& hyperParameters);
 
  168    Eigen::VectorXd getHyperParameters() 
const;
 
  173    void enableExplicitTrend();
 
  178    void disableExplicitTrend();
 
The file holds the covariance functions that can be used with the GP class.