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 "ScaledCovMatrixTKGroup<V,M>::rv1()",
88 "ScaledCovMatrixTKGroup<V,M>::rv1()",
93 "ScaledCovMatrixTKGroup<V,M>::rv1()",
94 "m_preComputingPositions.size() <= stageId");
98 "ScaledCovMatrixTKGroup<V,M>::rv1()",
99 "m_preComputingPositions[stageId] == NULL");
101 if ((m_env.subDisplayFile() ) &&
102 (m_env.displayVerbosity() >= 10)) {
103 *m_env.subDisplayFile() <<
"In ScaledCovMatrixTKGroup<V,M>::rv1()"
104 <<
", stageId = " << stageId
105 <<
": about to call m_rvs[0]->updateLawExpVector()"
106 <<
", vector = " << *m_preComputingPositions[stageId]
114 return (*gaussian_rv);
117 template<
class V,
class M>
123 "ScaledCovMatrixTKGroup<V,M>::rv2()",
124 "m_rvs.size() < stageIds.size()");
128 "ScaledCovMatrixTKGroup<V,M>::rv2()",
129 "m_rvs[stageIds.size()-1] == NULL");
133 "ScaledCovMatrixTKGroup<V,M>::rv2()",
134 "m_preComputingPositions.size() <= stageIds[0]");
138 "ScaledCovMatrixTKGroup<V,M>::rv2()",
139 "m_preComputingPositions[stageIds[0]] == NULL");
141 if ((m_env.subDisplayFile() ) &&
142 (m_env.displayVerbosity() >= 10)) {
143 *m_env.subDisplayFile() <<
"In ScaledCovMatrixTKGroup<V,M>::rv2()"
144 <<
", stageIds.size() = " << stageIds.size()
145 <<
", stageIds[0] = " << stageIds[0]
146 <<
": about to call m_rvs[stageIds.size()-1]->updateLawExpVector()"
147 <<
", vector = " << *m_preComputingPositions[stageIds[0]]
155 return (*gaussian_rv);
158 template<
class V,
class M>
162 for (
unsigned int i = 0; i < m_scales.size(); ++i) {
163 double factor = 1./m_scales[i]/m_scales[i];
164 if ((m_env.subDisplayFile() ) &&
165 (m_env.displayVerbosity() >= 10)) {
166 *m_env.subDisplayFile() <<
"In ScaledCovMatrixTKGroup<V,M>::updateLawCovMatrix()"
167 <<
", m_scales.size() = " << m_scales.size()
169 <<
", m_scales[i] = " << m_scales[i]
170 <<
", factor = " << factor
171 <<
": about to call m_rvs[i]->updateLawCovMatrix()"
172 <<
", covMatrix = \n" << factor*covMatrix
182 template<
class V,
class M>
186 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 5)) {
187 *m_env.subDisplayFile() <<
"Entering ScaledCovMatrixTKGroup<V,M>::setPreComputingPosition()"
188 <<
": position = " << position
189 <<
", stageId = " << stageId
196 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 5)) {
197 *m_env.subDisplayFile() <<
"In ScaledCovMatrixTKGroup<V,M>::setPreComputingPosition()"
198 <<
", position = " << position
199 <<
", stageId = " << stageId
200 <<
": preComputingPos = " << *m_preComputingPositions[stageId];
201 if (stageId < m_scales.size()) {
202 *m_env.subDisplayFile() <<
", factor = " << 1./m_scales[stageId]/m_scales[stageId];
204 if (stageId < m_rvs.size()) {
206 *m_env.subDisplayFile() <<
", rvCov = " << pdfPtr->
lawCovMatrix();
208 *m_env.subDisplayFile() << std::endl;
211 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 5)) {
212 *m_env.subDisplayFile() <<
"Leaving ScaledCovMatrixTKGroup<V,M>::setPreComputingPosition()"
213 <<
": position = " << position
214 <<
", stageId = " << stageId
221 template<
class V,
class M>
231 template<
class V,
class M>
237 "ScaledCovMatrixTKGroup<V,M>::setRVsWithZeroMean()",
242 "ScaledCovMatrixTKGroup<V,M>::setRVsWithZeroMean()",
243 "m_rvs.size() != m_scales.size()");
245 for (
unsigned int i = 0; i < m_scales.size(); ++i) {
246 double factor = 1./m_scales[i]/m_scales[i];
249 "ScaledCovMatrixTKGroup<V,M>::setRVsWithZeroMean()",
253 m_vectorSpace->zeroVector(),
254 factor*m_originalCovMatrix);
260 template<
class V,
class M>
std::vector< BaseVectorRV< V, M > * > m_rvs
std::vector< double > m_scales
void clearPreComputingPositions()
Clears the pre-computing positions m_preComputingPositions[stageId].
This class allows the representation of a transition kernel with a scaled covariance matrix...
bool symmetric() const
Whether or not the matrix is symmetric. Always 'true'.
std::ofstream * subDisplayFile() const
Access function for m_subDisplayFile (displays file on stream).
virtual void print(std::ostream &os) const
TODO: Prints the transition kernel.
virtual void clearPreComputingPositions()
Clears the pre-computing positions m_preComputingPositions[stageId].
void print(std::ostream &os) const
TODO: Prints the transition kernel.
const M & lawCovMatrix() const
Returns the covariance matrix; access to protected attribute m_lawCovMatrix.
const BaseEnvironment & m_env
This base class allows the representation of a transition kernel.
void updateLawExpVector(const V &newLawExpVector)
Updates the vector that contains the mean values.
~ScaledCovMatrixTKGroup()
Destructor.
ScaledCovMatrixTKGroup(const char *prefix, const VectorSpace< V, M > &vectorSpace, const std::vector< double > &scales, const M &covMatrix)
Default constructor.
void updateLawCovMatrix(const M &covMatrix)
Scales the covariance matrix.
A class for handling Gaussian joint PDFs.
A class representing a vector space.
const GaussianVectorRV< V, M > & rv(unsigned int stageId) const
Gaussian increment property to construct a transition kernel.
unsigned int displayVerbosity() const
bool setPreComputingPosition(const V &position, unsigned int stageId)
Sets the pre-computing positions m_preComputingPositions[stageId] with a new vector of size position...
#define UQ_FATAL_TEST_MACRO(test, givenRank, where, what)
virtual bool setPreComputingPosition(const V &position, unsigned int stageId)
Sets the pre-computing positions m_preComputingPositions[stageId] with a new vector of size position...
std::vector< const V * > m_preComputingPositions
A class representing a Gaussian vector RV.
void setRVsWithZeroMean()
Sets the mean of the RVs to zero.