Loading...
Searching...
No Matches
ensembleClass.C
1#include"ensembleClass.H"
2
3// Kabir: In the ensemble class, we have methods for calculating the mean, covariance, and cross-covariance of samples.
4namespace ITHACAmuq
5{
6ensemble::ensemble() {}
7
8ensemble::ensemble(int _Nsamples, int _samplesSize)
9{
10 Nsamples = _Nsamples;
11 samplesSize = _samplesSize;
12 samples = Eigen::MatrixXd(samplesSize, Nsamples);
13}
14
15ensemble::ensemble(Eigen::MatrixXd _samples)
16{
17 samples = _samples;
18 Nsamples = samples.cols();
19 samplesSize = samples.rows();
20}
21
23{
24 return Nsamples;
25}
26
27Eigen::VectorXd ensemble::getSample(int sampleI)
28{
29 std::string message = "Sample index (" + std::to_string(sampleI) +
30 ") is bigger than the number of samples ("
31 + std::to_string(samplesSize) + ")";
32 M_Assert(sampleI < samples.cols(), message.c_str());
33 return samples.col(sampleI);
34}
35
36Eigen::MatrixXd ensemble::getSamples()
37{
38 return samples;
39}
40
41void ensemble::assignSample(int sampleI, Eigen::VectorXd _sample)
42{
43 std::string message =
44 "The input sample should have the right size. Here input size = " +
45 std::to_string(_sample.size())
46 + " while samplesSize = "
47 + std::to_string(samplesSize);
48 M_Assert(_sample.size() == samplesSize, message.c_str());
49 M_Assert(sampleI < Nsamples,
50 "The index of the input sample is bigger than the number of samples in the ensemble");
51 samples.col(sampleI) = _sample;
52}
53
54void ensemble::assignSamples(Eigen::MatrixXd _samples)
55{
56 M_Assert(_samples.size() > 0, "Not valid input matrix");
57 Nsamples = _samples.cols();
58
59 if (samplesSize == 0)
60 {
61 samplesSize = _samples.rows();
62 }
63 else
64 {
65 std::string message = "The input samples have a different size. Input size = " +
66 std::to_string(_samples.rows())
67 + " while samplesSize = "
68 + std::to_string(samplesSize);
69 M_Assert(_samples.rows() == samplesSize, message.c_str());
70 }
71
72 samples = _samples;
73}
74
75Eigen::VectorXd ensemble::mean()
76{
77 return samples.rowwise().mean();
78}
79
80Eigen::MatrixXd ensemble::cov()
81{
82 Eigen::MatrixXd centered = samples.colwise() - samples.rowwise().mean();
83 return (centered * centered.adjoint()) / double(Nsamples - 1);
84}
85
86Eigen::MatrixXd ensemble::crossCov(Eigen::MatrixXd samples2)
87{
88 std::string message = "Input has wrong number of samples. Nsamples = " +
89 std::to_string(Nsamples) + "while samples2.cols() = " +
90 std::to_string(samples2.cols());
91 M_Assert(samples2.cols() == Nsamples, message.c_str());
92 Eigen::MatrixXd centered1 = samples.colwise() - samples.rowwise().mean();
93 Eigen::MatrixXd centered2 = samples2.colwise() - samples2.rowwise().mean();
94 return (centered1 * centered2.adjoint()) / double(Nsamples - 1);
95}
96}
Eigen::MatrixXd cov()
Samples autocovariance.
int getSize()
Get number of samples.
void assignSample(int sampleI, Eigen::VectorXd sample)
Assign a sample.
Eigen::MatrixXd getSamples()
Get matrix of samples.
Eigen::VectorXd getSample(int sampleI)
Get matrix of samples.
void assignSamples(Eigen::MatrixXd _samples)
Assing the samples matrix.
Eigen::VectorXd mean()
Samples mean.
Eigen::MatrixXd crossCov(Eigen::MatrixXd samples2)
Samples cross covariance.