1 #ifndef STAN__AGRAD__REV__MATRIX__SUM_HPP
2 #define STAN__AGRAD__REV__MATRIX__SUM_HPP
15 class sum_v_vari :
public vari{
19 inline static double var_sum(
const var *v,
size_t length) {
21 for (
size_t i = 0; i <
length; i++)
22 result += v[i].vi_->val_;
25 template<
typename Derived>
26 inline static double var_sum(
const Eigen::DenseBase<Derived> &v) {
28 for (
int i = 0; i < v.size(); i++)
29 result += v(i).vi_->val_;
33 template<
typename Derived>
34 sum_v_vari(
const Eigen::DenseBase<Derived> &v) :
37 for (
size_t i = 0; i <
length_; i++)
40 template<
int R1,
int C1>
41 sum_v_vari(
const Eigen::Matrix<var,R1,C1> &v1) :
42 vari(var_sum(v1)), length_(v1.
size()) {
44 for (
size_t i = 0; i <
length_; i++)
47 sum_v_vari(
const var *v,
size_t len) :
48 vari(var_sum(v,len)), length_(len) {
50 for (
size_t i = 0; i <
length_; i++)
53 virtual void chain() {
54 for (
size_t i = 0; i <
length_; i++) {
67 template <
int R,
int C>
68 inline var sum(
const Eigen::Matrix<var,R,C>& m) {
71 return var(
new sum_v_vari(m));
memory::stack_alloc memalloc_
fvar< T > sum(const Eigen::Matrix< fvar< T >, R, C > &m)
void * alloc(size_t len)
Return a newly allocated block of memory of the appropriate size managed by the stack allocator...
Independent (input) and dependent (output) variables for gradients.
int size(const std::vector< T > &x)