CMP++: Uncertainty Quantification & Bayesian Calibration
Loading...
Searching...
No Matches
cmp_defines.h
Go to the documentation of this file.
1#ifndef CMP_DEFINES_H
2#define CMP_DEFINES_H
3
4#include <Eigen/Dense>
5#include <vector>
6#include <fstream>
7#include <iostream>
8#include <chrono>
9#include <math.h>
10#include <iomanip>
11#include <iostream>
12#include <map>
13#include <random>
14#include <string>
15#include <nlopt.hpp>
16#include <functional>
17
18// Additional Eigen typedefs
19namespace Eigen {
20using VectorXs = Matrix<size_t, Eigen::Dynamic, 1>;
21}
22
23
28namespace cmp {
29
30inline constexpr double TOL = 1e-12;
31
32// Dummy Matrix and Vector
33inline const Eigen::MatrixXd DummyMatrix(0, 0);
34inline const Eigen::VectorXd DummyVector(0);
35
36
50template<typename T>
51concept VectorLike = requires(T a, size_t i) {
52 typename T::value_type;
53 {
54 a.size()
55 }
56 -> std::convertible_to<size_t>;
57 {
58 a[i]
59 }
60 -> std::convertible_to<typename T::value_type>;
61 {
62 a.data()
63 }
64 -> std::convertible_to<const typename T::value_type*>;
65 {
66 a.begin()
67 };
68 {
69 a.end()
70 };
71};
72
73// Define a Eigen::VectorXd of size 1 containing the value zero and one containing the value one
74const Eigen::VectorXd ScalarZero = Eigen::VectorXd::Zero(1);
75const Eigen::VectorXd ScalarOne = Eigen::VectorXd::Ones(1);
76
82using score_t = std::function<double(const Eigen::VectorXd &)>;
83using gradient_t = std::function<Eigen::VectorXd(const Eigen::Ref<const Eigen::VectorXd>&)>;
84
85
99inline Eigen::LDLT<Eigen::MatrixXd> ldltDecomposition(const Eigen::Ref<const Eigen::MatrixXd> &cov) {
100 return cov.ldlt();
101}
102
117template <VectorLike V>
118auto asEigen(const V &v) -> Eigen::Map<const Eigen::Matrix<typename V::value_type, Eigen::Dynamic, 1>> {
119 using T = typename V::value_type;
120 return Eigen::Map<const Eigen::Matrix<T, Eigen::Dynamic, 1>>(v.data(), static_cast<Eigen::Index>(v.size()));
121}
122
130template <VectorLike V>
131auto asEigen(V &v) -> Eigen::Map<Eigen::Matrix<typename V::value_type, Eigen::Dynamic, 1>> {
132 using T = typename V::value_type;
133 return Eigen::Map<Eigen::Matrix<T, Eigen::Dynamic, 1>>(v.data(), static_cast<Eigen::Index>(v.size()));
134}
135
143template <VectorLike V>
144auto toEigen(const V &v) -> Eigen::VectorXd {
145 using T = typename V::value_type;
146 return Eigen::Map<const Eigen::Matrix<T, Eigen::Dynamic, 1>>(v.data(), static_cast<Eigen::Index>(v.size()));
147}
148
156template <VectorLike V>
157auto toStdVector(const V &v) -> std::vector<typename V::value_type> {
158 using T = typename V::value_type;
159 return std::vector<T>(v.begin(), v.end());
160}
161
177template<typename Derived>
178typename Derived::PlainObject slice(const Eigen::MatrixBase<Derived>& mat, const Eigen::VectorXs& indices) {
179 typename Derived::PlainObject result(indices.size(), mat.cols());
180 for(Eigen::Index i = 0; i < indices.size(); ++i) {
181 result.row(i) = mat.row(indices(i));
182 }
183 return result;
184}
185
194template<typename DerivedX, typename DerivedY>
195auto trainTestSplit(const Eigen::MatrixBase<DerivedX>& xObs, const Eigen::MatrixBase<DerivedY>& yObs, const std::pair<Eigen::VectorXs, Eigen::VectorXs>& train_test_pair) {
196 auto xTrain = slice(xObs, train_test_pair.first);
197 auto yTrain = slice(yObs, train_test_pair.first);
198 auto xTest = slice(xObs, train_test_pair.second);
199 auto yTest = slice(yObs, train_test_pair.second);
200 return std::make_tuple(xTrain, yTrain, xTest, yTest);
201}
202
203} // namespace cmp
206#endif // CMP_DEFINES_H
Concept for compile-time validation of vector-like containers.
Definition cmp_defines.h:51
Definition cmp_defines.h:19
Matrix< size_t, Eigen::Dynamic, 1 > VectorXs
Definition cmp_defines.h:20
Definition classifier.h:17
constexpr double TOL
Definition cmp_defines.h:30
auto toEigen(const V &v) -> Eigen::VectorXd
Copies the elements of a vector-like container to a new Eigen::VectorXd.
Definition cmp_defines.h:144
const Eigen::VectorXd ScalarOne
Definition cmp_defines.h:75
const Eigen::VectorXd DummyVector(0)
std::function< double(const Eigen::VectorXd &)> score_t
The score_t type A function that takes a const reference to an Eigen::VectorXd and returns a double A...
Definition cmp_defines.h:82
const Eigen::MatrixXd DummyMatrix(0, 0)
auto toStdVector(const V &v) -> std::vector< typename V::value_type >
Copies the elements of a vector-like container to a new std::vector.
Definition cmp_defines.h:157
auto trainTestSplit(const Eigen::MatrixBase< DerivedX > &xObs, const Eigen::MatrixBase< DerivedY > &yObs, const std::pair< Eigen::VectorXs, Eigen::VectorXs > &train_test_pair)
Function to split training data into training and test sets.
Definition cmp_defines.h:195
Eigen::LDLT< Eigen::MatrixXd > ldltDecomposition(const Eigen::Ref< const Eigen::MatrixXd > &cov)
Computes the LDLT decomposition of a symmetric matrix.
Definition cmp_defines.h:99
Derived::PlainObject slice(const Eigen::MatrixBase< Derived > &mat, const Eigen::VectorXs &indices)
Slices a matrix along its rows based on a set of indices.
Definition cmp_defines.h:178
const Eigen::VectorXd ScalarZero
Definition cmp_defines.h:74
auto asEigen(const V &v) -> Eigen::Map< const Eigen::Matrix< typename V::value_type, Eigen::Dynamic, 1 > >
Creates a non-owning, read-only Eigen view (Eigen::Map) of a vector-like container.
Definition cmp_defines.h:118
std::function< Eigen::VectorXd(const Eigen::Ref< const Eigen::VectorXd > &)> gradient_t
Definition cmp_defines.h:83