void test_crossprod(const stan::agrad::matrix_v& L) { using stan::agrad::matrix_v; using stan::agrad::crossprod; matrix_v LLT_eigen = L.transpose() * L; matrix_v LLT_stan = crossprod(L); EXPECT_EQ(L.rows(),LLT_stan.rows()); EXPECT_EQ(L.cols(),LLT_stan.cols()); for (int m = 0; m < L.rows(); ++m) for (int n = 0; n < L.cols(); ++n) EXPECT_FLOAT_EQ(LLT_eigen(m,n).val(), LLT_stan(m,n).val()); }
void test_mult_LLT(const stan::agrad::matrix_v& L) { using stan::agrad::matrix_v; matrix_v Lp = L; for (int m = 0; m < L.rows(); ++m) for (int n = (m+1); n < L.cols(); ++n) Lp(m,n) = 0; matrix_v LLT_eigen = Lp * Lp.transpose(); matrix_v LLT_stan = multiply_lower_tri_self_transpose(L); EXPECT_EQ(L.rows(),LLT_stan.rows()); EXPECT_EQ(L.rows(),LLT_stan.cols()); for (int m = 0; m < L.rows(); ++m) for (int n = 0; n < L.rows(); ++n) EXPECT_FLOAT_EQ(LLT_eigen(m,n).val(), LLT_stan(m,n).val()); }