27 #include <queso/Defines.h>
28 #include <queso/VectorSet.h>
29 #include <queso/VectorSubset.h>
30 #include <queso/Environment.h>
31 #include <queso/GenericScalarFunction.h>
32 #include <queso/GslVector.h>
33 #include <queso/GslMatrix.h>
38 template<
class V,
class M>
41 double (*valueRoutinePtr)(
const V& domainVector,
const V* domainDirection,
const void* routinesDataPtr, V* gradVector, M* hessianMatrix, V* hessianEffect),
42 const void* routinesDataPtr,
45 m_valueRoutinePtr (valueRoutinePtr),
46 m_routinesDataPtr (routinesDataPtr),
47 m_routineIsForLn (routineIsForLn)
52 template<
class V,
class M>
58 template<
class V,
class M>
60 const V* domainDirection,
63 V* hessianEffect)
const
67 "GenericScalarFunction<V,M>::actualValue()",
68 "m_valueRoutinePtr = NULL");
70 double value = m_valueRoutinePtr(domainVector, domainDirection, m_routinesDataPtr, gradVector, hessianMatrix, hessianEffect);
71 if (m_routineIsForLn) {
72 #ifdef QUESO_EXPECTS_LN_LIKELIHOOD_INSTEAD_OF_MINUS_2_LN
73 value = std::exp(value);
75 value = std::exp(-.5*value);
78 (gradVector != NULL) ||
79 (hessianMatrix != NULL) ||
80 (hessianEffect != NULL),
82 "GenericScalarFunction<V,M>::gradOfActual()",
89 template<
class V,
class M>
91 const V* domainDirection,
94 V* hessianEffect)
const
98 "GenericScalarFunction<V,M>::lnValue()",
99 "m_valueRoutinePtr = NULL");
101 double value = m_valueRoutinePtr(domainVector, domainDirection, m_routinesDataPtr, gradVector, hessianMatrix, hessianEffect);
102 if (m_routineIsForLn ==
false) {
103 #ifdef QUESO_EXPECTS_LN_LIKELIHOOD_INSTEAD_OF_MINUS_2_LN
106 value = -2.*log(value);
109 (gradVector != NULL) ||
110 (hessianMatrix != NULL) ||
111 (hessianEffect != NULL),
113 "GenericScalarFunction<V,M>::gradOfLn()",
A templated (base) class for handling scalar functions.
double lnValue(const V &domainVector, const V *domainDirection, V *gradVector, M *hessianMatrix, V *hessianEffect) const
Calculates the logarithm of value of this scalar function.
virtual ~GenericScalarFunction()
Virtual destructor.
#define UQ_FATAL_TEST_MACRO(test, givenRank, where, what)
A templated class for handling sets.
double actualValue(const V &domainVector, const V *domainDirection, V *gradVector, M *hessianMatrix, V *hessianEffect) const
Calculates the actual value of this scalar function.
A class for handling generic scalar functions.
GenericScalarFunction(const char *prefix, const VectorSet< V, M > &domainSet, double(*valueRoutinePtr)(const V &domainVector, const V *domainDirection, const void *routinesDataPtr, V *gradVector, M *hessianMatrix, V *hessianEffect), const void *routinesDataPtr, bool routineIsForLn)
Default constructor.