Theoretica
A C++ numerical and automatic mathematical library
Loading...
Searching...
No Matches
errorprop.h
Go to the documentation of this file.
1
5
6#ifndef THEORETICA_ERRORPROP_H
7#define THEORETICA_ERRORPROP_H
8
9#include "../core/core_traits.h"
10#include "../algebra/vec.h"
11#include "../autodiff/autodiff.h"
12#include "../statistics/statistics.h"
13#include "../pseudorandom/montecarlo.h"
14#include "../pseudorandom/sampling.h"
15
16
17namespace theoretica {
18
19
20 namespace stats {
21
22
28 template <
29 typename Matrix = mat<real>, typename Dataset = vec<real>,
31 >
32 inline Matrix covar_mat(const std::vector<Dataset>& v) {
33
34 Matrix cm;
35 cm.resize(v.size(), v.size());
36
37 for (unsigned int i = 0; i < cm.rows(); ++i)
38 for (unsigned int j = 0; j < cm.cols(); ++j)
39 cm(i, j) = stats::covariance(v[i], v[j]);
40
41 return cm;
42 }
43
44
57 template<
58 unsigned int N = 0,
62 const vec<real, N>& x_best, const vec<real, N>& delta_x) {
63
64 real err_sqr = 0;
66
67 for (unsigned int i = 0; i < x_best.size(); ++i)
68 err_sqr += square(df.Dual().get(i) * delta_x.get(i));
69
70 return sqrt(err_sqr);
71 }
72
73
87 template <
88 unsigned int N = 0,
89 typename Matrix, enable_matrix<Matrix> = true,
91 >
93 MultiDualFunction f, const vec<real, N>& x_best, const Matrix& cm) {
94
95
96 if(cm.rows() != x_best.size()) {
97 TH_MATH_ERROR("error_propagation", cm.rows(), INVALID_ARGUMENT);
98 return nan();
99 }
100
101 if(cm.cols() != x_best.size()) {
102 TH_MATH_ERROR("error_propagation", cm.cols(), INVALID_ARGUMENT);
103 return nan();
104 }
105
106 real err_sqr = 0;
108
109 for (unsigned int i = 0; i < cm.rows(); ++i)
110 for (unsigned int j = 0; j < cm.cols(); ++j)
111 err_sqr += df.Dual().get(i) * df.Dual().get(j) * cm(i, j);
112
113 return sqrt(err_sqr);
114 }
115
116
128 template<
129 unsigned int N = 0,
131 typename Dataset = vec<real, N>>
134 const std::vector<Dataset>& v) {
135
137 x_mean.resize(v.size());
138
139 for (unsigned int i = 0; i < v.size(); ++i)
140 x_mean[i] = stats::mean(v[i]);
141
142 return error_propagation(
144 }
145
146
165 template<typename Function>
167 Function f, std::vector<pdf_sampler>& rv, unsigned int N = 1E+6) {
168
169 return stats::stdev(sample_mc(f, rv, N));
170 }
171 }
172}
173
174
175#endif
Multidual number algebra for functions of the form .
Definition multidual.h:26
#define TH_MATH_ERROR(F_NAME, VALUE, EXCEPTION)
TH_MATH_ERROR is a macro which throws exceptions or modifies errno (depending on which compiling opti...
Definition error.h:219
multidual< N > dreal_t
Real type for multivariate automatic differentiation (read "differential real").
Definition autodiff_types.h:117
vec< dreal_t< N >, N > dvec_t
Vector type for multivariate automatic differentiation (read "differential vector").
Definition autodiff_types.h:122
real stdev(const histogram &h)
Compute the standard deviation of the values of a histogram.
Definition histogram.h:320
real covariance(const Dataset1 &X, const Dataset2 &Y, unsigned int constraints=1)
Compute the covariance between two datasets with the given number of constraints.
Definition statistics.h:262
real error_propagation(MultiDualFunction f, const vec< real, N > &x_best, const vec< real, N > &delta_x)
Automatically propagate uncertainties under quadrature on an arbitrary function given the uncertainti...
Definition errorprop.h:60
real mean(const histogram &h)
Compute the mean of the values of a histogram.
Definition histogram.h:296
real error_propagation_mc(Function f, std::vector< pdf_sampler > &rv, unsigned int N=1E+6)
Propagate the statistical error on a given function using the Monte Carlo method, by generating a sam...
Definition errorprop.h:166
Matrix covar_mat(const std::vector< Dataset > &v)
Build the covariance matrix given a vector of datasets by computing the covariance between all couple...
Definition errorprop.h:32
Main namespace of the library which contains all functions and objects.
Definition algebra.h:27
double real
A real number, defined as a floating point type.
Definition constants.h:198
dual2 sqrt(dual2 x)
Compute the square root of a second order dual number.
Definition dual2_functions.h:54
std::remove_reference_t< decltype(std::declval< Structure >()[0])> vector_element_t
Extract the type of a vector (or any indexable container) from its operator[].
Definition core_traits.h:134
Vector sample_mc(Function f, std::vector< pdf_sampler > &rv, unsigned int N)
Generate a Monte Carlo sample of values of a given function of arbitrary variables following the give...
Definition montecarlo.h:376
constexpr real E
The Euler mathematical constant (e)
Definition constants.h:237
dual2 square(dual2 x)
Return the square of a second order dual number.
Definition dual2_functions.h:23
real nan()
Return a quiet NaN number in floating point representation.
Definition error.h:54