inline bool check_greater_or_equal(const char* function, const T_y& y, const T_low& low, const char* name, T_result* result) { return check_greater_or_equal(function,y,low,name,result, default_policy()); }
Eigen::Matrix<fvar<T>, Eigen::Dynamic, Eigen::Dynamic> qr_Q(const Eigen::Matrix<fvar<T>, Eigen::Dynamic, Eigen::Dynamic>& m) { typedef Eigen::Matrix<fvar<T>, Eigen::Dynamic, Eigen::Dynamic> matrix_fwd_t; check_nonzero_size("qr_Q", "m", m); check_greater_or_equal("qr_Q", "m.rows()", m.rows(), m.cols()); Eigen::HouseholderQR< matrix_fwd_t > qr(m.rows(), m.cols()); qr.compute(m); matrix_fwd_t Q = qr.householderQ(); for (int i = 0; i < m.cols(); i++) if (qr.matrixQR()(i, i) < 0.0) Q.col(i) *= -1.0; return Q; }