Stan  1.3
probability, sampling & optimization
 All Classes Namespaces Files Functions Variables Typedefs Enumerator Friends Macros Pages
fdim.hpp
Go to the documentation of this file.
1 #ifndef __STAN__AGRAD__REV__FDIM_HPP__
2 #define __STAN__AGRAD__REV__FDIM_HPP__
3 
4 #include <stan/agrad/rev/var.hpp>
7 
8 namespace stan {
9  namespace agrad {
10 
11  namespace {
12  class fdim_vv_vari : public op_vv_vari {
13  public:
14  fdim_vv_vari(vari* avi, vari* bvi) :
15  op_vv_vari(avi->val_ - bvi->val_, avi, bvi) {
16  }
17  void chain() {
18  avi_->adj_ += adj_;
19  bvi_->adj_ -= adj_;
20  }
21  };
22 
23  class fdim_vd_vari : public op_v_vari {
24  public:
25  fdim_vd_vari(vari* avi, double b) :
26  op_v_vari(avi->val_ - b, avi) {
27  }
28  void chain() {
29  avi_->adj_ += adj_;
30  }
31  };
32 
33  class fdim_dv_vari : public op_v_vari {
34  public:
35  fdim_dv_vari(double a, vari* bvi) :
36  op_v_vari(a - bvi->val_, bvi) {
37  }
38  void chain() {
39  // avi_ is bvi argument to constructor
40  avi_->adj_ -= adj_;
41  }
42  };
43  }
44 
68  inline var fdim(const stan::agrad::var& a,
69  const stan::agrad::var& b) {
70  if (a.vi_->val_ > b.vi_->val_)
71  return var(new fdim_vv_vari(a.vi_,b.vi_));
72  else
73  return var(new vari(0.0));
74  }
75 
93  inline var fdim(const double& a,
94  const stan::agrad::var& b) {
95  return a > b.vi_->val_
96  ? var(new fdim_dv_vari(a,b.vi_))
97  : var(new vari(0.0));
98  }
99 
116  inline var fdim(const stan::agrad::var& a,
117  const double& b) {
118  return a.vi_->val_ > b
119  ? var(new fdim_vd_vari(a.vi_,b))
120  : var(new vari(0.0));
121  }
122 
123  }
124 }
125 #endif

     [ Stan Home Page ] © 2011–2013, Stan Development Team.