Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
gsl_wrappers.cpp
Go to the documentation of this file.
1#include "gsl_wrappers.h"
2
3double unwrap_lambda_unidim(double x, void *p) {
4 auto fun = static_cast<std::function<double(double)>*>(p);
5 return (*fun)(x);
6}
7
8double unwrap_lambda_multidim(const gsl_vector *t, void *params) {
9 auto fun = static_cast<ScaledForm*>(params);
10 std::vector<double> args (t->size);
11 for (size_t i = 0; i < t->size; i++) {
12 args[i] = gsl_vector_get(t, i);
13 }
14 return (*fun)(args);
15}
16
17void unwrap_lambda_gradient(const gsl_vector *t, void *params, gsl_vector *g) {
18 auto fun = static_cast<ScaledForm*>(params);
19 std::vector<double> args (t->size);
20 for (size_t i = 0; i < t->size; i++) {
21 args[i] = gsl_vector_get(t, i);
22 }
23 auto grad = gradient(*fun, args);
24 for (size_t i = 0; i < grad.size(); i++) {
25 gsl_vector_set(g, i, grad[i]);
26 }
27}
28
29void unwrap_lambda_func_and_gradient(const gsl_vector *t, void *params, double *f, gsl_vector *g) {
30 auto fun = static_cast<ScaledForm*>(params);
31 std::vector<double> args (t->size);
32 for (size_t i = 0; i < t->size; i++) {
33 args[i] = gsl_vector_get(t, i);
34 }
35 *f = (*fun)(args);
36 auto grad = gradient(*fun, args);
37 for (size_t i = 0; i < grad.size(); i++) {
38 // std::cout << "d_" << i << "f = " << grad[i] << std::endl;
39 gsl_vector_set(g, i, grad[i]);
40 }
41}
std::vector< double > gradient(const RealValuedForm &f, const std::vector< double > &x, const std::vector< double > &scales)
Definition diffcalc.cpp:3
constexpr double g
double unwrap_lambda_multidim(const gsl_vector *t, void *params)
void unwrap_lambda_gradient(const gsl_vector *t, void *params, gsl_vector *g)
double unwrap_lambda_unidim(double x, void *p)
void unwrap_lambda_func_and_gradient(const gsl_vector *t, void *params, double *f, gsl_vector *g)
double f(double x)
Wilson special function f depending on x.