1 #ifndef STAN_MATH_PRIM_MAT_FUN_FACTOR_U_HPP 2 #define STAN_MATH_PRIM_MAT_FUN_FACTOR_U_HPP 25 factor_U(
const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& U,
26 Eigen::Array<T, Eigen::Dynamic, 1>& CPCs) {
32 CPCs(0) =
atanh(U(0, 1));
36 Eigen::Array<T, 1, Eigen::Dynamic> temp = U.row(0).tail(pull);
38 CPCs.head(pull) = temp;
40 Eigen::Array<T, Eigen::Dynamic, 1> acc(K);
42 acc.tail(pull) = 1.0 - temp.square();
43 for (
size_t i = 1; i < (K - 1); i++) {
46 temp = U.row(i).tail(pull);
47 temp /=
sqrt(acc.tail(pull) / acc(i));
48 CPCs.segment(position, pull) = temp;
49 acc.tail(pull) *= 1.0 - temp.square();
51 CPCs = 0.5 * ( (1.0 + CPCs) / (1.0 - CPCs) ).
log();
fvar< T > atanh(const fvar< T > &x)
Return inverse hyperbolic tangent of specified value.
fvar< T > sqrt(const fvar< T > &x)
fvar< T > log(const fvar< T > &x)
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...