Hamiltonian Monte Carlo

auxiliary.hpp
Go to the documentation of this file.
1 //
2 // Created by Lars Gebraad on 7/10/17.
3 // Remake of the original aux.cpp, with a bit more logic to it.
4 //
5 
6 #ifndef HMC_VSP_AUXILIARY_HPP
7 #define HMC_VSP_AUXILIARY_HPP
8 
9 class prior;
10 
11 class data;
12 
13 class posterior;
14 
15 class forwardModel;
16 
20 class prior {
21 public:
22  // Fields
23  unsigned long _numberParameters;
24  std::vector<double> _mean;
25  std::vector<double> _std;
26  std::vector<std::vector<double> > _inverseCovarianceMatrix;
27 
28  // Constructors and destructor
29  prior();
30 
31  // Constructor needed for prior information
32  explicit prior(std::vector<double> mean, std::vector<double> std);
33 
34  // Copy constructor
35  prior(const prior &);
36 
37  ~prior();
38 
39  // Member functions
40  // Explicit misfit, without pre-computation
41  double misfit(std::vector<double> parameters);
42 
43  // Explicit misfit gradient, without pre-computation
44  std::vector<double> gradientMisfit(std::vector<double> parameters);
45 
46 private:
48 };
49 
50 class data {
51 public:
52 
53  data();
54 
55  explicit data(const char *filename);
56 
57  data(const char *filename, double percentage);
58 
60  std::vector<double> _observedData;
61  std::vector<std::vector<double> > _inverseCD;
62  std::vector<std::vector<double> > _misfitParameterDataMatrix;
63  std::vector<std::vector<double> > _misfitParameterMatrix;
64 
65  void setICDMatrix(double std);
66 
67  void setICDMatrix_percentual(double percentage);
68 
69  void readData(const char *filename);
70 
71  void writeData(const char *filename);
72 
73  double misfit(std::vector<double> in_parameters, forwardModel m);
74 
75  void setMisfitParameterDataMatrix(std::vector<std::vector<double>> designMatrix);
76 
77  void setMisfitParameterMatrix(std::vector<std::vector<double>> designMatrix);
78 
79  std::vector<double> gradientMisfit(std::vector<double> parameters);
80 };
81 
82 /* ----------------------------------------------------------------------------------------------------------------------- *
83  * Class is redundant when pre-computation is used within the monte carlo class.
84  * ----------------------------------------------------------------------------------------------------------------------- */
85 class posterior {
86 public:
87  posterior() = default;
88 
89  double misfit(std::vector<double> parameters, prior &in_prior, data &in_data, forwardModel m);
90 
91  std::vector<double> gradientMisfit(std::vector<double> parameters, prior &in_prior, data &in_data);
92 };
93 
94 class forwardModel {
95 public:
96  // Fields
98  std::vector<std::vector<double>> _designMatrix;
99 
100  // Constructors & destructors
101  // Constructor which creates a unit forward model of dimensions nP x nP
102  explicit forwardModel(int numberParameters);
103 
104  explicit forwardModel(const char *filename);
105 
106  forwardModel();
107 
108  // Member functions
109  void constructUnitDesignMatrix(int numberParameters);
110 
111  std::vector<double> calculateData(std::vector<double> parameters);
112 };
113 
114 
115 void printVector(std::vector<double> A);
116 
117 #endif //HMC_VSP_AUXILIARY_HPP
void setInverseCovarianceMatrix()
Definition: auxiliary.cpp:48
std::vector< double > _mean
Definition: auxiliary.hpp:24
std::vector< std::vector< double > > _inverseCovarianceMatrix
Definition: auxiliary.hpp:26
double misfit(std::vector< double > parameters)
Definition: auxiliary.cpp:31
STL namespace.
int _numberData
Definition: auxiliary.hpp:59
std::vector< double > _std
Definition: auxiliary.hpp:25
std::vector< std::vector< double > > _inverseCD
Definition: auxiliary.hpp:61
std::vector< std::vector< double > > _misfitParameterMatrix
Definition: auxiliary.hpp:63
std::vector< double > gradientMisfit(std::vector< double > parameters)
Definition: auxiliary.cpp:36
void printVector(std::vector< double > A)
Definition: auxiliary.cpp:222
std::vector< std::vector< double > > _misfitParameterDataMatrix
Definition: auxiliary.hpp:62
std::vector< double > _observedData
Definition: auxiliary.hpp:60
Prior information in parameter space.
Definition: auxiliary.hpp:20
unsigned long _numberParameters
Definition: auxiliary.hpp:23
int _numberParameters
Definition: auxiliary.hpp:97
std::vector< std::vector< double > > _designMatrix
Definition: auxiliary.hpp:98