1 #ifndef STAN_MATH_PRIM_MAT_FUN_MATRIX_EXP_2X2_HPP 2 #define STAN_MATH_PRIM_MAT_FUN_MATRIX_EXP_2X2_HPP 20 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>
22 const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& A) {
23 T a = A(0, 0), b = A(0, 1), c = A(1, 0), d = A(1, 1), delta;
26 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> B(2, 2);
27 T half_delta = 0.5 * delta;
28 T cosh_half_delta =
cosh(half_delta);
29 T sinh_half_delta =
sinh(half_delta);
30 T exp_half_a_plus_d =
exp(0.5 * (a + d));
31 T Two_exp_sinh = 2 * exp_half_a_plus_d * sinh_half_delta;
32 T delta_cosh = delta * cosh_half_delta;
33 T ad_sinh_half_delta = (a - d) * sinh_half_delta;
35 B(0, 0) = exp_half_a_plus_d * (delta_cosh + ad_sinh_half_delta);
36 B(0, 1) = b * Two_exp_sinh;
37 B(1, 0) = c * Two_exp_sinh;
38 B(1, 1) = exp_half_a_plus_d * (delta_cosh - ad_sinh_half_delta);
fvar< T > sqrt(const fvar< T > &x)
fvar< T > cosh(const fvar< T > &x)
Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > matrix_exp_2x2(const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > &A)
Return the matrix exponential of a 2x2 matrix.
fvar< T > square(const fvar< T > &x)
fvar< T > exp(const fvar< T > &x)
fvar< T > sinh(const fvar< T > &x)