inline Eigen::Matrix<T,Eigen::Dynamic,Eigen::Dynamic> block(const Eigen::Matrix<T,Eigen::Dynamic,Eigen::Dynamic>& m, size_t i, size_t j, size_t nrows, size_t ncols) { validate_row_index(m,i,"block"); validate_row_index(m,i+nrows-1,"block"); validate_column_index(m,j,"block"); validate_column_index(m,j+ncols-1,"block"); return m.block(i - 1,j - 1,nrows,ncols); }
inline Eigen::Matrix<T,Eigen::Dynamic,1> head(const Eigen::Matrix<T,Eigen::Dynamic,1>& v, size_t n) { if (n != 0) validate_row_index(v, n, "head"); return v.head(n); }
inline Eigen::Matrix<T,Eigen::Dynamic,1> tail(const Eigen::Matrix<T,Eigen::Dynamic,1>& v, size_t n) { if (n != 0) validate_row_index(v, v.size() - n + 1, "tail"); return v.tail(n); }