25 #include <queso/ScaledCovMatrixTKGroup.h>
26 #include <queso/GslVector.h>
27 #include <queso/GslMatrix.h>
28 #include <queso/GaussianJointPdf.h>
33 template<
class V,
class M>
37 const std::vector<double>& scales,
41 m_originalCovMatrix (covMatrix)
50 <<
": m_scales.size() = " <<
m_scales.size()
52 <<
", m_rvs.size() = " <<
m_rvs.size()
65 template<
class V,
class M>
70 template<
class V,
class M>
77 template<
class V,
class M>
83 queso_require_msg(m_rvs[0],
"m_rvs[0] == NULL");
85 queso_require_greater_msg(m_preComputingPositions.size(), stageId,
"m_preComputingPositions.size() <= stageId");
87 queso_require_msg(m_preComputingPositions[stageId],
"m_preComputingPositions[stageId] == NULL");
89 if ((m_env.subDisplayFile() ) &&
90 (m_env.displayVerbosity() >= 10)) {
91 *m_env.subDisplayFile() <<
"In ScaledCovMatrixTKGroup<V,M>::rv1()"
92 <<
", stageId = " << stageId
93 <<
": about to call m_rvs[0]->updateLawExpVector()"
94 <<
", vector = " << *m_preComputingPositions[stageId]
102 return (*gaussian_rv);
105 template<
class V,
class M>
109 queso_require_greater_equal_msg(m_rvs.size(), stageIds.size(),
"m_rvs.size() < stageIds.size()");
111 queso_require_msg(m_rvs[stageIds.size()-1],
"m_rvs[stageIds.size()-1] == NULL");
113 queso_require_greater_msg(m_preComputingPositions.size(), stageIds[0],
"m_preComputingPositions.size() <= stageIds[0]");
115 queso_require_msg(m_preComputingPositions[stageIds[0]],
"m_preComputingPositions[stageIds[0]] == NULL");
117 if ((m_env.subDisplayFile() ) &&
118 (m_env.displayVerbosity() >= 10)) {
119 *m_env.subDisplayFile() <<
"In ScaledCovMatrixTKGroup<V,M>::rv2()"
120 <<
", stageIds.size() = " << stageIds.size()
121 <<
", stageIds[0] = " << stageIds[0]
122 <<
": about to call m_rvs[stageIds.size()-1]->updateLawExpVector()"
123 <<
", vector = " << *m_preComputingPositions[stageIds[0]]
131 return (*gaussian_rv);
134 template <
class V,
class M>
139 queso_require_msg(m_rvs[0],
"m_rvs[0] == NULL");
147 return (*gaussian_rv);
151 template<
class V,
class M>
155 for (
unsigned int i = 0; i < m_scales.size(); ++i) {
156 double factor = 1./m_scales[i]/m_scales[i];
157 if ((m_env.subDisplayFile() ) &&
158 (m_env.displayVerbosity() >= 10)) {
159 *m_env.subDisplayFile() <<
"In ScaledCovMatrixTKGroup<V,M>::updateLawCovMatrix()"
160 <<
", m_scales.size() = " << m_scales.size()
162 <<
", m_scales[i] = " << m_scales[i]
163 <<
", factor = " << factor
164 <<
": about to call m_rvs[i]->updateLawCovMatrix()"
165 <<
", covMatrix = \n" << factor*covMatrix
173 template<
class V,
class M>
177 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 5)) {
178 *m_env.subDisplayFile() <<
"Entering ScaledCovMatrixTKGroup<V,M>::setPreComputingPosition()"
179 <<
": position = " << position
180 <<
", stageId = " << stageId
187 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 5)) {
188 *m_env.subDisplayFile() <<
"In ScaledCovMatrixTKGroup<V,M>::setPreComputingPosition()"
189 <<
", position = " << position
190 <<
", stageId = " << stageId
191 <<
": preComputingPos = " << *m_preComputingPositions[stageId];
192 if (stageId < m_scales.size()) {
193 *m_env.subDisplayFile() <<
", factor = " << 1./m_scales[stageId]/m_scales[stageId];
195 if (stageId < m_rvs.size()) {
197 *m_env.subDisplayFile() <<
", rvCov = " << pdfPtr->
lawCovMatrix();
199 *m_env.subDisplayFile() << std::endl;
202 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 5)) {
203 *m_env.subDisplayFile() <<
"Leaving ScaledCovMatrixTKGroup<V,M>::setPreComputingPosition()"
204 <<
": position = " << position
205 <<
", stageId = " << stageId
212 template<
class V,
class M>
219 template <
class V,
class M>
223 unsigned int old_stageId = this->m_stageId;
224 this->m_stageId = stageId;
229 template<
class V,
class M>
237 for (
unsigned int i = 0; i < m_scales.size(); ++i) {
238 double factor = 1./m_scales[i]/m_scales[i];
239 queso_require_msg(!(m_rvs[i]),
"m_rvs[i] != NULL");
242 m_vectorSpace->zeroVector(),
243 factor*m_originalCovMatrix);
247 template<
class V,
class M>
std::vector< const V * > m_preComputingPositions
std::vector< BaseVectorRV< V, M > * > m_rvs
MonteCarloSGOptions::MonteCarloSGOptions(const BaseEnvironment &env, const char *prefix queso_require_not_equal_to_msg)(m_env.optionsInputFileName(), std::string(""), std::string("this constructor is incompatible with the absence of an options input file"))
const M & lawCovMatrix() const
Returns the covariance matrix; access to protected attribute m_lawCovMatrix.
virtual void print(std::ostream &os) const
TODO: Prints the transition kernel.
std::vector< double > m_scales
A class representing a vector space.
const BaseEnvironment & m_env
void print(std::ostream &os) const
TODO: Prints the transition kernel.
const GaussianVectorRV< V, M > & rv(unsigned int stageId) const
Gaussian increment property to construct a transition kernel.
virtual void clearPreComputingPositions()
Clears the pre-computing positions m_preComputingPositions[stageId].
virtual unsigned int set_dr_stage(unsigned int stageId)
Sets the internal m_stageId varialbe to stageId.
bool symmetric() const
Whether or not the matrix is symmetric. Always 'true'.
void setRVsWithZeroMean()
Sets the mean of the RVs to zero.
void clearPreComputingPositions()
Clears the pre-computing positions m_preComputingPositions[stageId].
This base class allows the representation of a transition kernel.
This class allows the representation of a transition kernel with a scaled covariance matrix...
~ScaledCovMatrixTKGroup()
Destructor.
void updateLawCovMatrix(const M &covMatrix)
Scales the covariance matrix.
ScaledCovMatrixTKGroup(const char *prefix, const VectorSpace< V, M > &vectorSpace, const std::vector< double > &scales, const M &covMatrix)
Default constructor.
bool setPreComputingPosition(const V &position, unsigned int stageId)
Sets the pre-computing positions m_preComputingPositions[stageId] with a new vector of size position...
MonteCarloSGOptions::MonteCarloSGOptions(const BaseEnvironment &env, const char *prefix, const McOptionsValues &alternativeOptionsValues queso_require_equal_to_msg)(m_env.optionsInputFileName(), std::string(""), std::string("this constructor is incompatible with the existence of an options input file"))
std::ofstream * subDisplayFile() const
Access function for m_subDisplayFile (displays file on stream).
A class for handling Gaussian joint PDFs.
unsigned int displayVerbosity() const
virtual bool setPreComputingPosition(const V &position, unsigned int stageId)
Sets the pre-computing positions m_preComputingPositions[stageId] with a new vector of size position...
void updateLawExpVector(const V &newLawExpVector)
Updates the vector that contains the mean values.
A class representing a Gaussian vector RV.