Minsky
minsky::EvalOp< T > Struct Template Reference

represents the operation when evaluating the equations More...

#include <evalOp.h>

Inheritance diagram for minsky::EvalOp< T >:
Inheritance graph
Collaboration diagram for minsky::EvalOp< T >:
Collaboration graph

Public Member Functions

OperationType::Type type () const override
 
int numArgs () const override
 
double evaluate (double in1=0, double in2=0) const override
 
double d1 (double x1=0, double x2=0) const override
 
double d2 (double x1=0, double x2=0) const override
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 
template<>
double evaluate (double in1, double in2) const
 
template<>
double d1 (double x1, double x2) const
 
template<>
double d2 (double x1, double x2) const
 

Detailed Description

template<minsky::OperationType::Type T>
struct minsky::EvalOp< T >

represents the operation when evaluating the equations

Definition at line 138 of file evalOp.h.

Member Function Documentation

◆ d1() [1/48]

template<>
double minsky::EvalOp< OperationType::constant >::d1 ( double  x1,
double  x2 
) const

Definition at line 137 of file evalOp.cc.

138  {return 0;}

◆ d1() [2/48]

template<minsky::OperationType::Type T>
double minsky::EvalOp< T >::d1 ( double  x1 = 0,
double  x2 = 0 
) const
override

◆ d1() [3/48]

template<>
double minsky::EvalOp< OperationType::time >::d1 ( double  x1,
double  x2 
) const

Definition at line 150 of file evalOp.cc.

151  {return 0;}

◆ d1() [4/48]

template<>
double minsky::EvalOp< OperationType::euler >::d1 ( double  x1,
double  x2 
) const

Definition at line 160 of file evalOp.cc.

161  {return 0;}

◆ d1() [5/48]

template<>
double minsky::EvalOp< OperationType::pi >::d1 ( double  x1,
double  x2 
) const

Definition at line 170 of file evalOp.cc.

171  {return 0;}

◆ d1() [6/48]

template<>
double minsky::EvalOp< OperationType::zero >::d1 ( double  x1,
double  x2 
) const

Definition at line 180 of file evalOp.cc.

181  {return 0;}

◆ d1() [7/48]

template<>
double minsky::EvalOp< OperationType::one >::d1 ( double  x1,
double  x2 
) const

Definition at line 190 of file evalOp.cc.

191  {return 0;}

◆ d1() [8/48]

template<>
double minsky::EvalOp< OperationType::inf >::d1 ( double  x1,
double  x2 
) const

Definition at line 200 of file evalOp.cc.

201  {return 0;}

◆ d1() [9/48]

template<>
double minsky::EvalOp< OperationType::percent >::d1 ( double  x1,
double  x2 
) const

Definition at line 210 of file evalOp.cc.

211  {return 100.0;}

◆ d1() [10/48]

template<>
double minsky::EvalOp< OperationType::copy >::d1 ( double  x1,
double  x2 
) const

Definition at line 220 of file evalOp.cc.

221  {return 1;}

◆ d1() [11/48]

template<>
double minsky::EvalOp< OperationType::integrate >::d1 ( double  x1,
double  x2 
) const

Definition at line 230 of file evalOp.cc.

231  {return x1;}

◆ d1() [12/48]

template<>
double minsky::EvalOp< OperationType::differentiate >::d1 ( double  x1,
double  x2 
) const

Definition at line 240 of file evalOp.cc.

241  {return x1;}

◆ d1() [13/48]

template<>
double minsky::EvalOp< OperationType::data >::d1 ( double  x1,
double  x2 
) const

Definition at line 250 of file evalOp.cc.

251  {return state? dynamic_cast<DataOp&>(*state).deriv(x1): 0;}

◆ d1() [14/48]

template<>
double minsky::EvalOp< OperationType::ravel >::d1 ( double  x1,
double  x2 
) const

Definition at line 260 of file evalOp.cc.

261  {return 1;}

◆ d1() [15/48]

template<>
double minsky::EvalOp< OperationType::sqrt >::d1 ( double  x1,
double  x2 
) const

Definition at line 270 of file evalOp.cc.

271  {return 0.5/::sqrt(fabs(x1));}
Expr sqrt(const Expr &x)
Definition: expr.h:154

◆ d1() [16/48]

template<>
double minsky::EvalOp< OperationType::exp >::d1 ( double  x1,
double  x2 
) const

Definition at line 280 of file evalOp.cc.

281  {return ::exp(x1);}
Expr exp(const Expr &x)
Definition: expr.h:126

◆ d1() [17/48]

template<>
double minsky::EvalOp< OperationType::ln >::d1 ( double  x1,
double  x2 
) const

Definition at line 290 of file evalOp.cc.

291  {return 1/x1;}

◆ d1() [18/48]

template<>
double minsky::EvalOp< OperationType::log >::d1 ( double  x1,
double  x2 
) const

Definition at line 300 of file evalOp.cc.

301  {return 1/(x1*::log(x2));}
Expr log(const Expr &x)
Definition: expr.h:120

◆ d1() [19/48]

template<>
double minsky::EvalOp< OperationType::pow >::d1 ( double  x1,
double  x2 
) const

Definition at line 310 of file evalOp.cc.

311  {return ::pow(x1,x2)*x2/x1;}
UnitsExpressionWalker pow(const UnitsExpressionWalker &x, const UnitsExpressionWalker &y)

◆ d1() [20/48]

template<>
double minsky::EvalOp< OperationType::lt >::d1 ( double  x1,
double  x2 
) const

Definition at line 320 of file evalOp.cc.

321  {throw error("lt cannot be used with an implicit method");}

◆ d1() [21/48]

template<>
double minsky::EvalOp< OperationType::le >::d1 ( double  x1,
double  x2 
) const

Definition at line 330 of file evalOp.cc.

331  {throw error("le cannot be used with an implicit method");}

◆ d1() [22/48]

template<>
double minsky::EvalOp< OperationType::eq >::d1 ( double  x1,
double  x2 
) const

Definition at line 340 of file evalOp.cc.

341  {throw error("eq cannot be used with an implicit method");}

◆ d1() [23/48]

template<>
double minsky::EvalOp< OperationType::userFunction >::d1 ( double  x1,
double  x2 
) const

Definition at line 350 of file evalOp.cc.

351  {throw error("user functions cannot be used with an implicit method");}

◆ d1() [24/48]

template<>
double minsky::EvalOp< OperationType::min >::d1 ( double  x1,
double  x2 
) const

Definition at line 364 of file evalOp.cc.

365  {return x1<=x2;} // TODO: thow exception if x1==x2?

◆ d1() [25/48]

template<>
double minsky::EvalOp< OperationType::max >::d1 ( double  x1,
double  x2 
) const

Definition at line 378 of file evalOp.cc.

379  {return x1>x2;} // TODO: thow exception if x1==x2?

◆ d1() [26/48]

template<>
double minsky::EvalOp< OperationType::and_ >::d1 ( double  x1,
double  x2 
) const

Definition at line 388 of file evalOp.cc.

389  {throw error("and cannot be used with an implicit method");}

◆ d1() [27/48]

template<>
double minsky::EvalOp< OperationType::or_ >::d1 ( double  x1,
double  x2 
) const

Definition at line 398 of file evalOp.cc.

399  {throw error("or cannot be used with an implicit method");}

◆ d1() [28/48]

template<>
double minsky::EvalOp< OperationType::not_ >::d1 ( double  x1,
double  x2 
) const

Definition at line 408 of file evalOp.cc.

409  {throw error("not cannot be used with an implicit method");}

◆ d1() [29/48]

template<>
double minsky::EvalOp< OperationType::sin >::d1 ( double  x1,
double  x2 
) const

Definition at line 418 of file evalOp.cc.

419  {return ::cos(x1);}
Expr cos(const Expr &x)
Definition: expr.h:137

◆ d1() [30/48]

template<>
double minsky::EvalOp< OperationType::cos >::d1 ( double  x1,
double  x2 
) const

Definition at line 428 of file evalOp.cc.

429  {return -::sin(x1);}
Expr sin(const Expr &x)
Definition: expr.h:131

◆ d1() [31/48]

template<>
double minsky::EvalOp< OperationType::tan >::d1 ( double  x1,
double  x2 
) const

Definition at line 438 of file evalOp.cc.

439  {return 1/sqr(::cos(x1));}
Expr cos(const Expr &x)
Definition: expr.h:137
T sqr(T x)
Definition: geometry.h:36

◆ d1() [32/48]

template<>
double minsky::EvalOp< OperationType::asin >::d1 ( double  x1,
double  x2 
) const

Definition at line 448 of file evalOp.cc.

449  {return 1/::sqrt(1-sqr(x1));}
Expr sqrt(const Expr &x)
Definition: expr.h:154
T sqr(T x)
Definition: geometry.h:36

◆ d1() [33/48]

template<>
double minsky::EvalOp< OperationType::acos >::d1 ( double  x1,
double  x2 
) const

Definition at line 458 of file evalOp.cc.

459  {return -1/::sqrt(1-sqr(x1));}
Expr sqrt(const Expr &x)
Definition: expr.h:154
T sqr(T x)
Definition: geometry.h:36

◆ d1() [34/48]

template<>
double minsky::EvalOp< OperationType::atan >::d1 ( double  x1,
double  x2 
) const

Definition at line 468 of file evalOp.cc.

469  {return 1/(1+sqr(x1));}
T sqr(T x)
Definition: geometry.h:36

◆ d1() [35/48]

template<>
double minsky::EvalOp< OperationType::sinh >::d1 ( double  x1,
double  x2 
) const

Definition at line 478 of file evalOp.cc.

479  {return ::cosh(x1);}
Expr cosh(const Expr &x)
Definition: expr.h:148

◆ d1() [36/48]

template<>
double minsky::EvalOp< OperationType::cosh >::d1 ( double  x1,
double  x2 
) const

Definition at line 488 of file evalOp.cc.

489  {return ::sinh(x1);}
Expr sinh(const Expr &x)
Definition: expr.h:142

◆ d1() [37/48]

template<>
double minsky::EvalOp< OperationType::tanh >::d1 ( double  x1,
double  x2 
) const

Definition at line 498 of file evalOp.cc.

499  {return 1/sqr(::cosh(x1));}
Expr cosh(const Expr &x)
Definition: expr.h:148
T sqr(T x)
Definition: geometry.h:36

◆ d1() [38/48]

template<>
double minsky::EvalOp< OperationType::abs >::d1 ( double  x1,
double  x2 
) const

Definition at line 508 of file evalOp.cc.

509  {return (x1<0)? -1: 1;}

◆ d1() [39/48]

template<>
double minsky::EvalOp< OperationType::floor >::d1 ( double  x1,
double  x2 
) const

Definition at line 518 of file evalOp.cc.

519  {throw error("floor cannot be used with an implicit method");}

◆ d1() [40/48]

template<>
double minsky::EvalOp< OperationType::frac >::d1 ( double  x1,
double  x2 
) const

Definition at line 528 of file evalOp.cc.

529  {throw error("frac cannot be used with an implicit method");}

◆ d1() [41/48]

template<>
double minsky::EvalOp< OperationType::Gamma >::d1 ( double  x1,
double  x2 
) const

Definition at line 538 of file evalOp.cc.

539  {return boost::math::digamma(fabs(x1))*boost::math::tgamma(fabs(x1));}

◆ d1() [42/48]

template<>
double minsky::EvalOp< OperationType::polygamma >::d1 ( double  x1,
double  x2 
) const

Definition at line 548 of file evalOp.cc.

549  {return boost::math::polygamma(::floor(x2)+1,fabs(x1));}
Expr polygamma(const Expr &x, const Expr &y)
Definition: expr.h:166

◆ d1() [43/48]

template<>
double minsky::EvalOp< OperationType::fact >::d1 ( double  x1,
double  x2 
) const

Definition at line 558 of file evalOp.cc.

559  {return x1 > -1? boost::math::polygamma(0,x1+1)*boost::math::tgamma(x1+1) : 0;}
Expr polygamma(const Expr &x, const Expr &y)
Definition: expr.h:166

◆ d1() [44/48]

template<>
double minsky::EvalOp< OperationType::add >::d1 ( double  x1,
double  x2 
) const

Definition at line 568 of file evalOp.cc.

569  {return 1;}

◆ d1() [45/48]

template<>
double minsky::EvalOp< OperationType::subtract >::d1 ( double  x1,
double  x2 
) const

Definition at line 578 of file evalOp.cc.

579  {return 1;}

◆ d1() [46/48]

template<>
double minsky::EvalOp< OperationType::multiply >::d1 ( double  x1,
double  x2 
) const

Definition at line 588 of file evalOp.cc.

589  {return x2;}

◆ d1() [47/48]

template<>
double minsky::EvalOp< OperationType::divide >::d1 ( double  x1,
double  x2 
) const

Definition at line 598 of file evalOp.cc.

599  {return 1/x2;}

◆ d1() [48/48]

template<>
double minsky::EvalOp< OperationType::numOps >::d1 ( double  x1,
double  x2 
) const

Definition at line 609 of file evalOp.cc.

610  {throw error("calling d1 on EvalOp<numOps> invalid");}

◆ d2() [1/48]

template<>
double minsky::EvalOp< OperationType::constant >::d2 ( double  x1,
double  x2 
) const

Definition at line 140 of file evalOp.cc.

141  {return 0;}

◆ d2() [2/48]

template<minsky::OperationType::Type T>
double minsky::EvalOp< T >::d2 ( double  x1 = 0,
double  x2 = 0 
) const
override

◆ d2() [3/48]

template<>
double minsky::EvalOp< OperationType::time >::d2 ( double  x1,
double  x2 
) const

Definition at line 153 of file evalOp.cc.

154  {return 0;}

◆ d2() [4/48]

template<>
double minsky::EvalOp< OperationType::euler >::d2 ( double  x1,
double  x2 
) const

Definition at line 163 of file evalOp.cc.

164  {return 0;}

◆ d2() [5/48]

template<>
double minsky::EvalOp< OperationType::pi >::d2 ( double  x1,
double  x2 
) const

Definition at line 173 of file evalOp.cc.

174  {return 0;}

◆ d2() [6/48]

template<>
double minsky::EvalOp< OperationType::zero >::d2 ( double  x1,
double  x2 
) const

Definition at line 183 of file evalOp.cc.

184  {return 0;}

◆ d2() [7/48]

template<>
double minsky::EvalOp< OperationType::one >::d2 ( double  x1,
double  x2 
) const

Definition at line 193 of file evalOp.cc.

194  {return 0;}

◆ d2() [8/48]

template<>
double minsky::EvalOp< OperationType::inf >::d2 ( double  x1,
double  x2 
) const

Definition at line 203 of file evalOp.cc.

204  {return 0;}

◆ d2() [9/48]

template<>
double minsky::EvalOp< OperationType::percent >::d2 ( double  x1,
double  x2 
) const

Definition at line 213 of file evalOp.cc.

214  {return 0;}

◆ d2() [10/48]

template<>
double minsky::EvalOp< OperationType::copy >::d2 ( double  x1,
double  x2 
) const

Definition at line 223 of file evalOp.cc.

224  {return 0;}

◆ d2() [11/48]

template<>
double minsky::EvalOp< OperationType::integrate >::d2 ( double  x1,
double  x2 
) const

Definition at line 233 of file evalOp.cc.

234  {return 0;}

◆ d2() [12/48]

template<>
double minsky::EvalOp< OperationType::differentiate >::d2 ( double  x1,
double  x2 
) const

Definition at line 243 of file evalOp.cc.

244  {return 0;}

◆ d2() [13/48]

template<>
double minsky::EvalOp< OperationType::data >::d2 ( double  x1,
double  x2 
) const

Definition at line 253 of file evalOp.cc.

254  {return 0;}

◆ d2() [14/48]

template<>
double minsky::EvalOp< OperationType::ravel >::d2 ( double  x1,
double  x2 
) const

Definition at line 263 of file evalOp.cc.

264  {return 0;}

◆ d2() [15/48]

template<>
double minsky::EvalOp< OperationType::sqrt >::d2 ( double  x1,
double  x2 
) const

Definition at line 273 of file evalOp.cc.

274  {return 0;}

◆ d2() [16/48]

template<>
double minsky::EvalOp< OperationType::exp >::d2 ( double  x1,
double  x2 
) const

Definition at line 283 of file evalOp.cc.

284  {return 0;}

◆ d2() [17/48]

template<>
double minsky::EvalOp< OperationType::ln >::d2 ( double  x1,
double  x2 
) const

Definition at line 293 of file evalOp.cc.

294  {return 0;}

◆ d2() [18/48]

template<>
double minsky::EvalOp< OperationType::log >::d2 ( double  x1,
double  x2 
) const

Definition at line 303 of file evalOp.cc.

304  {return -::log(x1)/(x2*sqr(::log(x2)));}
T sqr(T x)
Definition: geometry.h:36
Expr log(const Expr &x)
Definition: expr.h:120

◆ d2() [19/48]

template<>
double minsky::EvalOp< OperationType::pow >::d2 ( double  x1,
double  x2 
) const

Definition at line 313 of file evalOp.cc.

314  {return ::pow(x1,x2)*::log(x1);}
UnitsExpressionWalker pow(const UnitsExpressionWalker &x, const UnitsExpressionWalker &y)
Expr log(const Expr &x)
Definition: expr.h:120

◆ d2() [20/48]

template<>
double minsky::EvalOp< OperationType::lt >::d2 ( double  x1,
double  x2 
) const

Definition at line 323 of file evalOp.cc.

324  {return 0;}

◆ d2() [21/48]

template<>
double minsky::EvalOp< OperationType::le >::d2 ( double  x1,
double  x2 
) const

Definition at line 333 of file evalOp.cc.

334  {return 0;}

◆ d2() [22/48]

template<>
double minsky::EvalOp< OperationType::eq >::d2 ( double  x1,
double  x2 
) const

Definition at line 343 of file evalOp.cc.

344  {return 0;}

◆ d2() [23/48]

template<>
double minsky::EvalOp< OperationType::userFunction >::d2 ( double  x1,
double  x2 
) const

Definition at line 353 of file evalOp.cc.

354  {throw error("user functions cannot be used with an implicit method");}

◆ d2() [24/48]

template<>
double minsky::EvalOp< OperationType::min >::d2 ( double  x1,
double  x2 
) const

Definition at line 367 of file evalOp.cc.

368  {return x1>x2;}

◆ d2() [25/48]

template<>
double minsky::EvalOp< OperationType::max >::d2 ( double  x1,
double  x2 
) const

Definition at line 381 of file evalOp.cc.

382  {return x1<=x2;}

◆ d2() [26/48]

template<>
double minsky::EvalOp< OperationType::and_ >::d2 ( double  x1,
double  x2 
) const

Definition at line 391 of file evalOp.cc.

392  {return 0;}

◆ d2() [27/48]

template<>
double minsky::EvalOp< OperationType::or_ >::d2 ( double  x1,
double  x2 
) const

Definition at line 401 of file evalOp.cc.

402  {return 0;}

◆ d2() [28/48]

template<>
double minsky::EvalOp< OperationType::not_ >::d2 ( double  x1,
double  x2 
) const

Definition at line 411 of file evalOp.cc.

412  {return 0;}

◆ d2() [29/48]

template<>
double minsky::EvalOp< OperationType::sin >::d2 ( double  x1,
double  x2 
) const

Definition at line 421 of file evalOp.cc.

422  {return 0;}

◆ d2() [30/48]

template<>
double minsky::EvalOp< OperationType::cos >::d2 ( double  x1,
double  x2 
) const

Definition at line 431 of file evalOp.cc.

432  {return 0;}

◆ d2() [31/48]

template<>
double minsky::EvalOp< OperationType::tan >::d2 ( double  x1,
double  x2 
) const

Definition at line 441 of file evalOp.cc.

442  {return 0;}

◆ d2() [32/48]

template<>
double minsky::EvalOp< OperationType::asin >::d2 ( double  x1,
double  x2 
) const

Definition at line 451 of file evalOp.cc.

452  {return 0;}

◆ d2() [33/48]

template<>
double minsky::EvalOp< OperationType::acos >::d2 ( double  x1,
double  x2 
) const

Definition at line 461 of file evalOp.cc.

462  {return 0;}

◆ d2() [34/48]

template<>
double minsky::EvalOp< OperationType::atan >::d2 ( double  x1,
double  x2 
) const

Definition at line 471 of file evalOp.cc.

472  {return 0;}

◆ d2() [35/48]

template<>
double minsky::EvalOp< OperationType::sinh >::d2 ( double  x1,
double  x2 
) const

Definition at line 481 of file evalOp.cc.

482  {return 0;}

◆ d2() [36/48]

template<>
double minsky::EvalOp< OperationType::cosh >::d2 ( double  x1,
double  x2 
) const

Definition at line 491 of file evalOp.cc.

492  {return 0;}

◆ d2() [37/48]

template<>
double minsky::EvalOp< OperationType::tanh >::d2 ( double  x1,
double  x2 
) const

Definition at line 501 of file evalOp.cc.

502  {return 0;}

◆ d2() [38/48]

template<>
double minsky::EvalOp< OperationType::abs >::d2 ( double  x1,
double  x2 
) const

Definition at line 511 of file evalOp.cc.

512  {return 0;}

◆ d2() [39/48]

template<>
double minsky::EvalOp< OperationType::floor >::d2 ( double  x1,
double  x2 
) const

Definition at line 521 of file evalOp.cc.

522  {return 0;}

◆ d2() [40/48]

template<>
double minsky::EvalOp< OperationType::frac >::d2 ( double  x1,
double  x2 
) const

Definition at line 531 of file evalOp.cc.

532  {return 0;}

◆ d2() [41/48]

template<>
double minsky::EvalOp< OperationType::Gamma >::d2 ( double  x1,
double  x2 
) const

Definition at line 541 of file evalOp.cc.

542  {return 0;}

◆ d2() [42/48]

template<>
double minsky::EvalOp< OperationType::polygamma >::d2 ( double  x1,
double  x2 
) const

Definition at line 551 of file evalOp.cc.

552  {return 0;}

◆ d2() [43/48]

template<>
double minsky::EvalOp< OperationType::fact >::d2 ( double  x1,
double  x2 
) const

Definition at line 561 of file evalOp.cc.

562  {return 0;}

◆ d2() [44/48]

template<>
double minsky::EvalOp< OperationType::add >::d2 ( double  x1,
double  x2 
) const

Definition at line 571 of file evalOp.cc.

572  {return 1;}

◆ d2() [45/48]

template<>
double minsky::EvalOp< OperationType::subtract >::d2 ( double  x1,
double  x2 
) const

Definition at line 581 of file evalOp.cc.

582  {return -1;}

◆ d2() [46/48]

template<>
double minsky::EvalOp< OperationType::multiply >::d2 ( double  x1,
double  x2 
) const

Definition at line 591 of file evalOp.cc.

592  {return x1;}

◆ d2() [47/48]

template<>
double minsky::EvalOp< OperationType::divide >::d2 ( double  x1,
double  x2 
) const

Definition at line 601 of file evalOp.cc.

602  {return -x1/(x2*x2);}

◆ d2() [48/48]

template<>
double minsky::EvalOp< OperationType::numOps >::d2 ( double  x1,
double  x2 
) const

Definition at line 612 of file evalOp.cc.

613  {throw error("calling d2() on EvalOp<numOps> invalid");}

◆ evaluate() [1/48]

template<>
double minsky::EvalOp< OperationType::constant >::evaluate ( double  in1,
double  in2 
) const

Definition at line 134 of file evalOp.cc.

135  {return 0;}

◆ evaluate() [2/48]

template<minsky::OperationType::Type T>
double minsky::EvalOp< T >::evaluate ( double  in1 = 0,
double  in2 = 0 
) const
override

◆ evaluate() [3/48]

template<>
double minsky::EvalOp< OperationType::time >::evaluate ( double  in1,
double  in2 
) const

Definition at line 147 of file evalOp.cc.

148  {return t;}

◆ evaluate() [4/48]

template<>
double minsky::EvalOp< OperationType::euler >::evaluate ( double  in1,
double  in2 
) const

Definition at line 157 of file evalOp.cc.

158  {return 2.71828182845904523536028747135266249775724709369995;}

◆ evaluate() [5/48]

template<>
double minsky::EvalOp< OperationType::pi >::evaluate ( double  in1,
double  in2 
) const

Definition at line 167 of file evalOp.cc.

168  {return 3.14159265358979323846264338327950288419716939937510;}

◆ evaluate() [6/48]

template<>
double minsky::EvalOp< OperationType::zero >::evaluate ( double  in1,
double  in2 
) const

Definition at line 177 of file evalOp.cc.

178  {return 0;}

◆ evaluate() [7/48]

template<>
double minsky::EvalOp< OperationType::one >::evaluate ( double  in1,
double  in2 
) const

Definition at line 187 of file evalOp.cc.

188  {return 1;}

◆ evaluate() [8/48]

template<>
double minsky::EvalOp< OperationType::inf >::evaluate ( double  in1,
double  in2 
) const

Definition at line 197 of file evalOp.cc.

198  {return numeric_limits<double>::max();}

◆ evaluate() [9/48]

template<>
double minsky::EvalOp< OperationType::percent >::evaluate ( double  in1,
double  in2 
) const

Definition at line 207 of file evalOp.cc.

208  {return 100.0*in1;}

◆ evaluate() [10/48]

template<>
double minsky::EvalOp< OperationType::copy >::evaluate ( double  in1,
double  in2 
) const

Definition at line 217 of file evalOp.cc.

218  {return in1;}

◆ evaluate() [11/48]

template<>
double minsky::EvalOp< OperationType::integrate >::evaluate ( double  in1,
double  in2 
) const

Definition at line 227 of file evalOp.cc.

228  {throw error("evaluate for integral operator should not be called");}

◆ evaluate() [12/48]

template<>
double minsky::EvalOp< OperationType::differentiate >::evaluate ( double  in1,
double  in2 
) const

Definition at line 237 of file evalOp.cc.

238  {throw error("evaluate for derivative operator should not be called");}

◆ evaluate() [13/48]

template<>
double minsky::EvalOp< OperationType::data >::evaluate ( double  in1,
double  in2 
) const

Definition at line 247 of file evalOp.cc.

248  {return state? dynamic_cast<DataOp&>(*state).interpolate(in1): 0;}

◆ evaluate() [14/48]

template<>
double minsky::EvalOp< OperationType::ravel >::evaluate ( double  in1,
double  in2 
) const

Definition at line 257 of file evalOp.cc.

258  {return in1;}

◆ evaluate() [15/48]

template<>
double minsky::EvalOp< OperationType::sqrt >::evaluate ( double  in1,
double  in2 
) const

Definition at line 267 of file evalOp.cc.

268  {return ::sqrt(fabs(in1));}
Expr sqrt(const Expr &x)
Definition: expr.h:154

◆ evaluate() [16/48]

template<>
double minsky::EvalOp< OperationType::exp >::evaluate ( double  in1,
double  in2 
) const

Definition at line 277 of file evalOp.cc.

278  {return ::exp(in1);}
Expr exp(const Expr &x)
Definition: expr.h:126

◆ evaluate() [17/48]

template<>
double minsky::EvalOp< OperationType::ln >::evaluate ( double  in1,
double  in2 
) const

Definition at line 287 of file evalOp.cc.

288  {return ::log(in1);}
Expr log(const Expr &x)
Definition: expr.h:120

◆ evaluate() [18/48]

template<>
double minsky::EvalOp< OperationType::log >::evaluate ( double  in1,
double  in2 
) const

Definition at line 297 of file evalOp.cc.

298  {return ::log(in1)/::log(in2);}
Expr log(const Expr &x)
Definition: expr.h:120

◆ evaluate() [19/48]

template<>
double minsky::EvalOp< OperationType::pow >::evaluate ( double  in1,
double  in2 
) const

Definition at line 307 of file evalOp.cc.

308  {return ::pow(in1,in2);}
UnitsExpressionWalker pow(const UnitsExpressionWalker &x, const UnitsExpressionWalker &y)

◆ evaluate() [20/48]

template<>
double minsky::EvalOp< OperationType::lt >::evaluate ( double  in1,
double  in2 
) const

Definition at line 317 of file evalOp.cc.

318  {return in1<in2;}

◆ evaluate() [21/48]

template<>
double minsky::EvalOp< OperationType::le >::evaluate ( double  in1,
double  in2 
) const

Definition at line 327 of file evalOp.cc.

328  {return in1<=in2;}

◆ evaluate() [22/48]

template<>
double minsky::EvalOp< OperationType::eq >::evaluate ( double  in1,
double  in2 
) const

Definition at line 337 of file evalOp.cc.

338  {return in1==in2;}

◆ evaluate() [23/48]

template<>
double minsky::EvalOp< OperationType::userFunction >::evaluate ( double  in1,
double  in2 
) const

Definition at line 347 of file evalOp.cc.

348  {return state? dynamic_cast<UserFunction&>(*state).evaluate(in1,in2): 0;}

◆ evaluate() [24/48]

template<>
double minsky::EvalOp< OperationType::min >::evaluate ( double  in1,
double  in2 
) const

Definition at line 357 of file evalOp.cc.

358  {
359  if (isnan(in1)) return in2; // see ravel #175
360  if (isnan(in2)) return in1;
361  return std::min(in1,in2);
362  }

◆ evaluate() [25/48]

template<>
double minsky::EvalOp< OperationType::max >::evaluate ( double  in1,
double  in2 
) const

Definition at line 371 of file evalOp.cc.

372  {
373  if (isnan(in1)) return in2; // see ravel #175
374  if (isnan(in2)) return in1;
375  return std::max(in1,in2);
376  }

◆ evaluate() [26/48]

template<>
double minsky::EvalOp< OperationType::and_ >::evaluate ( double  in1,
double  in2 
) const

Definition at line 385 of file evalOp.cc.

386  {return in1>0.5 && in2>0.5;}

◆ evaluate() [27/48]

template<>
double minsky::EvalOp< OperationType::or_ >::evaluate ( double  in1,
double  in2 
) const

Definition at line 395 of file evalOp.cc.

396  {return in1>0.5 || in2>0.5;}

◆ evaluate() [28/48]

template<>
double minsky::EvalOp< OperationType::not_ >::evaluate ( double  in1,
double  in2 
) const

Definition at line 405 of file evalOp.cc.

406  {return in1<=0.5;}

◆ evaluate() [29/48]

template<>
double minsky::EvalOp< OperationType::sin >::evaluate ( double  in1,
double  in2 
) const

Definition at line 415 of file evalOp.cc.

416  {return ::sin(in1);}
Expr sin(const Expr &x)
Definition: expr.h:131

◆ evaluate() [30/48]

template<>
double minsky::EvalOp< OperationType::cos >::evaluate ( double  in1,
double  in2 
) const

Definition at line 425 of file evalOp.cc.

426  {return ::cos(in1);}
Expr cos(const Expr &x)
Definition: expr.h:137

◆ evaluate() [31/48]

template<>
double minsky::EvalOp< OperationType::tan >::evaluate ( double  in1,
double  in2 
) const

Definition at line 435 of file evalOp.cc.

436  {return ::tan(in1);}

◆ evaluate() [32/48]

template<>
double minsky::EvalOp< OperationType::asin >::evaluate ( double  in1,
double  in2 
) const

Definition at line 445 of file evalOp.cc.

446  {return ::asin(in1);}

◆ evaluate() [33/48]

template<>
double minsky::EvalOp< OperationType::acos >::evaluate ( double  in1,
double  in2 
) const

Definition at line 455 of file evalOp.cc.

456  {return ::acos(in1);}

◆ evaluate() [34/48]

template<>
double minsky::EvalOp< OperationType::atan >::evaluate ( double  in1,
double  in2 
) const

Definition at line 465 of file evalOp.cc.

466  {return ::atan(in1);}

◆ evaluate() [35/48]

template<>
double minsky::EvalOp< OperationType::sinh >::evaluate ( double  in1,
double  in2 
) const

Definition at line 475 of file evalOp.cc.

476  {return ::sinh(in1);}
Expr sinh(const Expr &x)
Definition: expr.h:142

◆ evaluate() [36/48]

template<>
double minsky::EvalOp< OperationType::cosh >::evaluate ( double  in1,
double  in2 
) const

Definition at line 485 of file evalOp.cc.

486  {return ::cosh(in1);}
Expr cosh(const Expr &x)
Definition: expr.h:148

◆ evaluate() [37/48]

template<>
double minsky::EvalOp< OperationType::tanh >::evaluate ( double  in1,
double  in2 
) const

Definition at line 495 of file evalOp.cc.

496  {return ::tanh(in1);}

◆ evaluate() [38/48]

template<>
double minsky::EvalOp< OperationType::abs >::evaluate ( double  in1,
double  in2 
) const

Definition at line 505 of file evalOp.cc.

506  {return ::fabs(in1);}

◆ evaluate() [39/48]

template<>
double minsky::EvalOp< OperationType::floor >::evaluate ( double  in1,
double  in2 
) const

Definition at line 515 of file evalOp.cc.

516  {return ::floor(in1);}

◆ evaluate() [40/48]

template<>
double minsky::EvalOp< OperationType::frac >::evaluate ( double  in1,
double  in2 
) const

Definition at line 525 of file evalOp.cc.

526  {return in1-::floor(in1);}

◆ evaluate() [41/48]

template<>
double minsky::EvalOp< OperationType::Gamma >::evaluate ( double  in1,
double  in2 
) const

Definition at line 535 of file evalOp.cc.

536  {return in1 > 0? boost::math::tgamma(in1) : numeric_limits<double>::max();}

◆ evaluate() [42/48]

template<>
double minsky::EvalOp< OperationType::polygamma >::evaluate ( double  in1,
double  in2 
) const

Definition at line 545 of file evalOp.cc.

546  {return in1 > 0? boost::math::polygamma(::floor(in2),in1) : numeric_limits<double>::max();}
Expr polygamma(const Expr &x, const Expr &y)
Definition: expr.h:166

◆ evaluate() [43/48]

template<>
double minsky::EvalOp< OperationType::fact >::evaluate ( double  in1,
double  in2 
) const

Definition at line 555 of file evalOp.cc.

556  {return in1 > -1? boost::math::tgamma(in1+1) : 1;}

◆ evaluate() [44/48]

template<>
double minsky::EvalOp< OperationType::add >::evaluate ( double  in1,
double  in2 
) const

Definition at line 565 of file evalOp.cc.

566  {return in1+in2;}

◆ evaluate() [45/48]

template<>
double minsky::EvalOp< OperationType::subtract >::evaluate ( double  in1,
double  in2 
) const

Definition at line 575 of file evalOp.cc.

576  {return in1-in2;}

◆ evaluate() [46/48]

template<>
double minsky::EvalOp< OperationType::multiply >::evaluate ( double  in1,
double  in2 
) const

Definition at line 585 of file evalOp.cc.

586  {return in1*in2;}

◆ evaluate() [47/48]

template<>
double minsky::EvalOp< OperationType::divide >::evaluate ( double  in1,
double  in2 
) const

Definition at line 595 of file evalOp.cc.

596  {return in1/in2;}

◆ evaluate() [48/48]

template<>
double minsky::EvalOp< OperationType::numOps >::evaluate ( double  in1,
double  in2 
) const

Definition at line 606 of file evalOp.cc.

607  {throw error("calling evaluate() on EvalOp<numOps> invalid");}

◆ numArgs()

template<minsky::OperationType::Type T>
int minsky::EvalOp< T >::numArgs ( ) const
inlineoverride

Definition at line 141 of file evalOp.h.

141  {
142  return OperationTypeInfo::numArguments<T>();
143  }

◆ type()

template<minsky::OperationType::Type T>
OperationType::Type minsky::EvalOp< T >::type ( ) const
inlineoverride

Definition at line 140 of file evalOp.h.

140 {return T;}

The documentation for this struct was generated from the following file: