1 #ifndef STAN_MATH_PRIM_MAT_FUN_FACTOR_COV_MATRIX_HPP
2 #define STAN_MATH_PRIM_MAT_FUN_FACTOR_COV_MATRIX_HPP
28 <T, Eigen::Dynamic, Eigen::Dynamic>& Sigma,
29 Eigen::Array<T, Eigen::Dynamic, 1>& CPCs,
30 Eigen::Array<T, Eigen::Dynamic, 1>& sds) {
31 size_t K = sds.rows();
33 sds = Sigma.diagonal().array();
34 if ( (sds <= 0.0).any() )
return false;
37 Eigen::DiagonalMatrix<T, Eigen::Dynamic> D(K);
38 D.diagonal() = sds.inverse();
41 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> R = D * Sigma * D;
43 R.diagonal().setOnes();
44 Eigen::LDLT<Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> > ldlt;
46 if (!ldlt.isPositive())
48 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> U = ldlt.matrixU();
bool factor_cov_matrix(const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > &Sigma, Eigen::Array< T, Eigen::Dynamic, 1 > &CPCs, Eigen::Array< T, Eigen::Dynamic, 1 > &sds)
This function is intended to make starting values, given a covariance matrix Sigma.
void factor_U(const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > &U, Eigen::Array< T, Eigen::Dynamic, 1 > &CPCs)
This function is intended to make starting values, given a unit upper-triangular matrix U such that U...