11 #pragma clang diagnostic push 12 #pragma ide diagnostic ignored "OCUnusedGlobalDeclarationInspection" 25 _mean = std::move(mean);
26 _std = std::move(std);
32 std::vector<double> parameterDifference = (std::move(parameters) -
_mean);
37 std::vector<double> parameters_diff = (parameters -
_mean);
38 std::vector<double> gradient;
40 for (
int q = 0; q < parameters.size(); q++) {
74 setICDMatrix_percentual(percentage);
80 std::vector<double> dataDifference = m.
calculateData(std::move(q)) - _observedData;
81 return 0.5 * (dataDifference * (_inverseCD * dataDifference));
85 std::vector<double> zeroRow((
unsigned long) _numberData, 0.0);
87 for (
int i = 0; i < _numberData; i++) {
88 _inverseCD.push_back(zeroRow);
89 _inverseCD[i][i] = 1 / (std * std);
95 std::vector<double> zeroRow((
unsigned long) _numberData, 0.0);
97 for (
int i = 0; i < _numberData; i++) {
98 _inverseCD.push_back(zeroRow);
99 std = _observedData[i] * (percentage / 100.0);
100 _inverseCD[i][i] = 1 / (std * std);
107 _observedData.clear();
108 std::ifstream infile(filename);
111 infile.ignore(500,
'\n');
112 infile.ignore(500,
'\n');
113 infile.ignore(500,
'\n');
115 infile >> _numberData;
116 for (
int i = 0; i < _numberData; i++) {
118 _observedData.push_back(a);
125 std::ofstream outfile;
126 outfile.open(filename);
128 outfile <<
"# Data generated from hardcoded class, which reads from matrix.txt" << std::endl;
129 outfile <<
"# Line 4: number of data points. Line 5: data in sequential order." << std::endl;
130 outfile <<
"# The first three lines are always ignored, no matter the characters (up to 500 characters per line)." << std::endl;
132 outfile << _numberData << std::endl;
133 for (
int i = 0; i < _numberData; i++) {
134 outfile << _observedData[i] <<
" ";
140 _misfitParameterDataMatrix =
TransposeMatrix(designMatrix) * _inverseCD;
141 setMisfitParameterMatrix(designMatrix);
145 _misfitParameterMatrix = _misfitParameterDataMatrix * std::move(designMatrix);
149 std::vector<double> gradient;
151 for (
int q = 0; q < parameters.size(); q++) {
153 gradient.push_back(0.5 * (
GetMatrixColumn(_misfitParameterMatrix, q) * parameters +
155 -2 * (
GetMatrixRow(_misfitParameterDataMatrix, q) * _observedData)
166 _designMatrix.clear();
167 std::vector<double> zeroRow((
unsigned long) numberParameters, 0);
168 _designMatrix.insert(_designMatrix.end(), (
unsigned long) numberParameters, zeroRow);
171 for (
int i = 0; i < numberParameters; i++) {
172 _designMatrix[i][i] = 1;
178 constructUnitDesignMatrix(numberParameters);
182 return (_designMatrix * std::move(parameters));
188 std::vector<double> row;
190 _designMatrix.clear();
192 std::ifstream infile(filename);
195 infile.ignore(500,
'\n');
196 infile.ignore(500,
'\n');
197 infile.ignore(500,
'\n');
199 infile >> numberData;
201 for (
int i = 0; i < numberData; i++) {
204 row.push_back(element);
206 _designMatrix.push_back(row);
215 return in_prior.
misfit(parameters) + in_data.
misfit(parameters, std::move(m));
223 for (
int i = 0; i < A.size(); i++) {
224 std::cout <<
"Component " << i + 1 <<
": " << A[i] << std::endl;
228 #pragma clang diagnostic pop
void setInverseCovarianceMatrix()
std::vector< double > _mean
void setICDMatrix(double std)
std::vector< std::vector< double > > _inverseCovarianceMatrix
double misfit(std::vector< double > parameters)
std::vector< double > _std
std::vector< double > gradientMisfit(std::vector< double > parameters)
std::vector< std::vector< double > > TransposeMatrix(std::vector< std::vector< double > > M)
std::vector< double > GetMatrixColumn(std::vector< std::vector< double >> M, int column)
Function to get a column from a matrix.
std::vector< double > GetMatrixRow(std::vector< std::vector< double >> M, int row)
Function to get a row from a matrix.
void constructUnitDesignMatrix(int numberParameters)
std::vector< double > gradientMisfit(std::vector< double > parameters)
void setMisfitParameterDataMatrix(std::vector< std::vector< double >> designMatrix)
double misfit(std::vector< double > parameters, prior &in_prior, data &in_data, forwardModel m)
std::vector< double > calculateData(std::vector< double > parameters)
Linear algebra functions operating on standard library containers.
void readData(const char *filename)
Prior information in parameter space.
void writeData(const char *filename)
unsigned long _numberParameters
double misfit(std::vector< double > in_parameters, forwardModel m)
void setMisfitParameterMatrix(std::vector< std::vector< double >> designMatrix)
void printVector(std::vector< double > A)
void setICDMatrix_percentual(double percentage)
std::vector< double > gradientMisfit(std::vector< double > parameters, prior &in_prior, data &in_data)