25 #include <queso/ScaledCovMatrixTKGroup.h>
26 #include <queso/GslVector.h>
27 #include <queso/GslMatrix.h>
32 template<
class V,
class M>
36 const std::vector<double>& scales,
40 m_originalCovMatrix (covMatrix)
49 <<
": m_scales.size() = " <<
m_scales.size()
51 <<
", m_rvs.size() = " <<
m_rvs.size()
64 template<
class V,
class M>
69 template<
class V,
class M>
76 template<
class V,
class M>
82 "ScaledCovMatrixTKGroup<V,M>::rv1()",
87 "ScaledCovMatrixTKGroup<V,M>::rv1()",
92 "ScaledCovMatrixTKGroup<V,M>::rv1()",
93 "m_preComputingPositions.size() <= stageId");
97 "ScaledCovMatrixTKGroup<V,M>::rv1()",
98 "m_preComputingPositions[stageId] == NULL");
100 if ((m_env.subDisplayFile() ) &&
101 (m_env.displayVerbosity() >= 10)) {
102 *m_env.subDisplayFile() <<
"In ScaledCovMatrixTKGroup<V,M>::rv1()"
103 <<
", stageId = " << stageId
104 <<
": about to call m_rvs[0]->updateLawExpVector()"
105 <<
", vector = " << *m_preComputingPositions[stageId]
108 m_rvs[0]->updateLawExpVector(*m_preComputingPositions[stageId]);
113 template<
class V,
class M>
119 "ScaledCovMatrixTKGroup<V,M>::rv2()",
120 "m_rvs.size() < stageIds.size()");
124 "ScaledCovMatrixTKGroup<V,M>::rv2()",
125 "m_rvs[stageIds.size()-1] == NULL");
129 "ScaledCovMatrixTKGroup<V,M>::rv2()",
130 "m_preComputingPositions.size() <= stageIds[0]");
134 "ScaledCovMatrixTKGroup<V,M>::rv2()",
135 "m_preComputingPositions[stageIds[0]] == NULL");
137 if ((m_env.subDisplayFile() ) &&
138 (m_env.displayVerbosity() >= 10)) {
139 *m_env.subDisplayFile() <<
"In ScaledCovMatrixTKGroup<V,M>::rv2()"
140 <<
", stageIds.size() = " << stageIds.size()
141 <<
", stageIds[0] = " << stageIds[0]
142 <<
": about to call m_rvs[stageIds.size()-1]->updateLawExpVector()"
143 <<
", vector = " << *m_preComputingPositions[stageIds[0]]
146 m_rvs[stageIds.size()-1]->updateLawExpVector(*m_preComputingPositions[stageIds[0]]);
148 return (*m_rvs[stageIds.size()-1]);
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
168 m_rvs[i]->updateLawCovMatrix(factor*covMatrix);
175 template<
class V,
class M>
179 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 5)) {
180 *m_env.subDisplayFile() <<
"Entering ScaledCovMatrixTKGroup<V,M>::setPreComputingPosition()"
181 <<
": position = " << position
182 <<
", stageId = " << stageId
189 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 5)) {
190 *m_env.subDisplayFile() <<
"In ScaledCovMatrixTKGroup<V,M>::setPreComputingPosition()"
191 <<
", position = " << position
192 <<
", stageId = " << stageId
193 <<
": preComputingPos = " << *m_preComputingPositions[stageId];
194 if (stageId < m_scales.size()) {
195 *m_env.subDisplayFile() <<
", factor = " << 1./m_scales[stageId]/m_scales[stageId];
197 if (stageId < m_rvs.size()) {
199 *m_env.subDisplayFile() <<
", rvCov = " << pdfPtr->
lawCovMatrix();
201 *m_env.subDisplayFile() << std::endl;
204 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 5)) {
205 *m_env.subDisplayFile() <<
"Leaving ScaledCovMatrixTKGroup<V,M>::setPreComputingPosition()"
206 <<
": position = " << position
207 <<
", stageId = " << stageId
214 template<
class V,
class M>
224 template<
class V,
class M>
230 "ScaledCovMatrixTKGroup<V,M>::setRVsWithZeroMean()",
235 "ScaledCovMatrixTKGroup<V,M>::setRVsWithZeroMean()",
236 "m_rvs.size() != m_scales.size()");
238 for (
unsigned int i = 0; i < m_scales.size(); ++i) {
239 double factor = 1./m_scales[i]/m_scales[i];
242 "ScaledCovMatrixTKGroup<V,M>::setRVsWithZeroMean()",
246 m_vectorSpace->zeroVector(),
247 factor*m_originalCovMatrix);
253 template<
class V,
class M>
A class for handling Gaussian joint PDFs.
virtual void clearPreComputingPositions()
Clears the pre-computing positions m_preComputingPositions[stageId].
A class representing a vector space.
std::ofstream * subDisplayFile() const
Access function for m_subDisplayFile (displays file on stream).
This class allows the representation of a transition kernel with a scaled covariance matrix...
void print(std::ostream &os) const
TODO: Prints the transition kernel.
std::vector< const V * > m_preComputingPositions
void setRVsWithZeroMean()
Sets the mean of the RVs to zero.
const M & lawCovMatrix() const
Returns the covariance matrix; access to protected attribute m_lawCovMatrix.
virtual bool setPreComputingPosition(const V &position, unsigned int stageId)
Sets the pre-computing positions m_preComputingPositions[stageId] with a new vector of size position...
virtual void print(std::ostream &os) const
TODO: Prints the transition kernel.
std::vector< GaussianVectorRV< V, M > * > m_rvs
#define UQ_FATAL_TEST_MACRO(test, givenRank, where, what)
const GaussianVectorRV< V, M > & rv(unsigned int stageId)
Gaussian increment property to construct a transition kernel.
ScaledCovMatrixTKGroup(const char *prefix, const VectorSpace< V, M > &vectorSpace, const std::vector< double > &scales, const M &covMatrix)
Default constructor.
This base class allows the representation of a transition kernel.
A class representing a Gaussian vector RV.
unsigned int displayVerbosity() const
std::vector< double > m_scales
void clearPreComputingPositions()
Clears the pre-computing positions m_preComputingPositions[stageId].
~ScaledCovMatrixTKGroup()
Destructor.
void updateLawCovMatrix(const M &covMatrix)
Scales the covariance matrix.
bool symmetric() const
Whether or not the matrix is symmetric. Always 'true'.
bool setPreComputingPosition(const V &position, unsigned int stageId)
Sets the pre-computing positions m_preComputingPositions[stageId] with a new vector of size position...
const BaseEnvironment & m_env