25 #include <queso/JeffreysJointPdf.h>
26 #include <queso/GslVector.h>
27 #include <queso/GslMatrix.h>
32 template<
class V,
class M>
53 template<
class V,
class M>
58 template<
class V,
class M>
61 const V& domainVector,
62 const V* domainDirection,
65 V* hessianEffect)
const
67 if (domainVector.sizeLocal() != this->m_domainSet.vectorSpace().dimLocal()) {
68 queso_error_msg(
"There is an invalid input while computing JeffreysJointPdf<V,M>::actualValue()");
71 if (gradVector ) *gradVector = m_domainSet.vectorSpace().zeroVector();
72 if (hessianMatrix) *hessianMatrix *= 0.;
73 if (hessianEffect) *hessianEffect = m_domainSet.vectorSpace().zeroVector();
75 if (domainDirection) {};
78 for (
unsigned int i = 0; i < domainVector.sizeLocal(); ++i){
79 if (domainVector[i] < 0.0 ) {
80 queso_error_msg(
"The domain for Jeffreys prior should be greater than zero.");
82 else if ((domainVector[i] == -INFINITY ) ||
83 (domainVector[i] == INFINITY ) ||
84 (m_normalizationStyle != 0 )) {
88 pdf = pdf * (1.0 / domainVector[i]);
91 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 54)) {
92 *m_env.subDisplayFile() <<
" return pdf " << std::endl;
99 template<
class V,
class M>
102 const V& domainVector,
103 const V* domainDirection,
106 V* hessianEffect)
const
108 if (gradVector ) *gradVector = m_domainSet.vectorSpace().zeroVector();
109 if (hessianMatrix) *hessianMatrix *= 0.0;
110 if (hessianEffect) *hessianEffect = m_domainSet.vectorSpace().zeroVector();
112 if (domainVector[0]) {};
113 if (domainDirection) {};
117 for (
unsigned int i = 0; i < domainVector.sizeLocal(); ++i){
118 if (domainVector[i] < 0.0) {
119 queso_error_msg(
"The domain for Jeffreys prior should be greater than zero.");
121 else if ((domainVector[i] == -INFINITY ) ||
122 (domainVector[i] == INFINITY ) ||
123 (m_normalizationStyle != 0 )) {
128 pdf = pdf * (1.0 / domainVector[i]);
132 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 54)) {
133 *m_env.subDisplayFile() <<
" return log(pdf) " << std::endl;
138 template<
class V,
class M>
144 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 2)) {
145 *m_env.subDisplayFile() <<
"Entering JeffreysJointPdf<V,M>::computeLogOfNormalizationFactor()"
149 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 2)) {
150 *m_env.subDisplayFile() <<
"Leaving JeffreysJointPdf<V,M>::computeLogOfNormalizationFactor()"
151 <<
", m_logOfNormalizationFactor = " << m_logOfNormalizationFactor
155 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 54)) {
156 *m_env.subDisplayFile() <<
" return normalization factor " << std::endl;
unsigned int displayVerbosity() const
#define queso_error_msg(msg)
A templated class for handling sets.
A templated (base) class for handling joint PDFs.
JeffreysJointPdf(const char *prefix, const VectorSet< V, M > &domainSet)
Constructor.
~JeffreysJointPdf()
Destructor.
double commonComputeLogOfNormalizationFactor(unsigned int numSamples, bool updateFactorInternally) const
Common method (to the derived classes) to compute the logarithm of the normalization factor...
double computeLogOfNormalizationFactor(unsigned int numSamples, bool updateFactorInternally) const
Computes the logarithm of the normalization factor.
const BaseEnvironment & m_env
std::ofstream * subDisplayFile() const
Access function for m_subDisplayFile (displays file on stream).
double lnValue(const V &domainVector, const V *domainDirection, V *gradVector, M *hessianMatrix, V *hessianEffect) const
Logarithm of the value of the jeffreys PDF.
A class for handling jeffreys joint PDFs.
double actualValue(const V &domainVector, const V *domainDirection, V *gradVector, M *hessianMatrix, V *hessianEffect) const
Actual value of the jeffreys PDF.