1 #ifndef STAN_MATH_REV_CORE_GEVV_VVV_VARI_HPP
2 #define STAN_MATH_REV_CORE_GEVV_VVV_VARI_HPP
21 size_t length,
double *dotprod) {
23 for (
size_t i = 0; i <
length; i++)
24 result += v1[i*stride1].vi_->
val_ * v2[i*stride2].
vi_->
val_;
26 return alpha->vi_->
val_ * result;
33 vari(
eval_gevv(alpha, v1, stride1, v2, stride2, length, &dotval_)),
41 for (
size_t i = 0; i <
length_; i++)
42 v1_[i] = v1[i*stride1].vi_;
43 for (
size_t i = 0; i <
length_; i++)
44 v2_[i] = v2[i*stride2].vi_;
48 const double adj_alpha =
adj_ * alpha_->
val_;
49 for (
size_t i = 0; i <
length_; i++) {
50 v1_[i]->
adj_ += adj_alpha * v2_[i]->
val_;
51 v2_[i]->
adj_ += adj_alpha * v1_[i]->
val_;
static stack_alloc memalloc_
The variable implementation base class.
size_t length(const std::vector< T > &x)
static double eval_gevv(const stan::math::var *alpha, const stan::math::var *v1, int stride1, const stan::math::var *v2, int stride2, size_t length, double *dotprod)
Independent (input) and dependent (output) variables for gradients.
const double val_
The value of this variable.
stan::math::vari * alpha_
vari * vi_
Pointer to the implementation of this variable.
gevv_vvv_vari(const stan::math::var *alpha, const stan::math::var *v1, int stride1, const stan::math::var *v2, int stride2, size_t length)
double adj_
The adjoint of this variable, which is the partial derivative of this variable with respect to the ro...
void * alloc(size_t len)
Return a newly allocated block of memory of the appropriate size managed by the stack allocator...
void chain()
Apply the chain rule to this variable based on the variables on which it depends. ...