1 /** D bindings for GSL.
2     Authors:    Chibisi Chima-Okereke
3     Copyright:  Copyright (c) 2016, Chibisi Chima-Okereke. All rights reserved.
4     License:    Boost License 1.0
5 */
6 
7 module gsl.monte;
8 import gsl.rng;
9 
10 extern (C):
11 
12 //monte
13 alias gsl_monte_function_struct gsl_monte_function;
14 
15 struct gsl_monte_function_struct
16 {
17     double function (double*, size_t, void*) f;
18     size_t dim;
19     void* params;
20 }
21 
22 //gsl_monte_miser
23 struct gsl_monte_miser_state
24 {
25     size_t min_calls;
26     size_t min_calls_per_bisection;
27     double dither;
28     double estimate_frac;
29     double alpha;
30     size_t dim;
31     int estimate_style;
32     int depth;
33     int verbose;
34     double* x;
35     double* xmid;
36     double* sigma_l;
37     double* sigma_r;
38     double* fmax_l;
39     double* fmax_r;
40     double* fmin_l;
41     double* fmin_r;
42     double* fsum_l;
43     double* fsum_r;
44     double* fsum2_l;
45     double* fsum2_r;
46     size_t* hits_l;
47     size_t* hits_r;
48 }
49 
50 struct gsl_monte_miser_params
51 {
52     double estimate_frac;
53     size_t min_calls;
54     size_t min_calls_per_bisection;
55     double alpha;
56     double dither;
57 }
58 
59 int gsl_monte_miser_integrate (gsl_monte_function* f, const(double)* xl, const(double)* xh, size_t dim, size_t calls, gsl_rng* r, gsl_monte_miser_state* state, double* result, double* abserr);
60 gsl_monte_miser_state* gsl_monte_miser_alloc (size_t dim);
61 int gsl_monte_miser_init (gsl_monte_miser_state* state);
62 void gsl_monte_miser_free (gsl_monte_miser_state* state);
63 void gsl_monte_miser_params_get (const(gsl_monte_miser_state)* state, gsl_monte_miser_params* params);
64 void gsl_monte_miser_params_set (gsl_monte_miser_state* state, const(gsl_monte_miser_params)* params);
65 
66 //gsl_monte_plain
67 struct gsl_monte_plain_state
68 {
69     size_t dim;
70     double* x;
71 }
72 
73 int gsl_monte_plain_integrate (const(gsl_monte_function)* f, const(double)* xl, const(double)* xu, const size_t dim, const size_t calls, gsl_rng* r, gsl_monte_plain_state* state, double* result, double* abserr);
74 gsl_monte_plain_state* gsl_monte_plain_alloc (size_t dim);
75 int gsl_monte_plain_init (gsl_monte_plain_state* state);
76 void gsl_monte_plain_free (gsl_monte_plain_state* state);