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.roots;
8 
9 //import core.stdc.math;
10 import gsl.math;
11 
12 extern (C):
13 
14 extern __gshared const(gsl_root_fsolver_type)* gsl_root_fsolver_bisection;
15 extern __gshared const(gsl_root_fsolver_type)* gsl_root_fsolver_brent;
16 extern __gshared const(gsl_root_fsolver_type)* gsl_root_fsolver_falsepos;
17 extern __gshared const(gsl_root_fdfsolver_type)* gsl_root_fdfsolver_newton;
18 extern __gshared const(gsl_root_fdfsolver_type)* gsl_root_fdfsolver_secant;
19 extern __gshared const(gsl_root_fdfsolver_type)* gsl_root_fdfsolver_steffenson;
20 
21 struct gsl_root_fsolver_type
22 {
23     const(char)* name;
24     size_t size;
25     int function (void*, gsl_function*, double*, double, double) set;
26     int function (void*, gsl_function*, double*, double*, double*) iterate;
27 }
28 
29 struct gsl_root_fsolver
30 {
31     const(gsl_root_fsolver_type)* type;
32     gsl_function* function_;
33     double root;
34     double x_lower;
35     double x_upper;
36     void* state;
37 }
38 
39 struct gsl_root_fdfsolver_type
40 {
41     const(char)* name;
42     size_t size;
43     int function (void*, gsl_function_fdf*, double*) set;
44     int function (void*, gsl_function_fdf*, double*) iterate;
45 }
46 
47 struct gsl_root_fdfsolver
48 {
49     const(gsl_root_fdfsolver_type)* type;
50     gsl_function_fdf* fdf;
51     double root;
52     void* state;
53 }
54 
55 gsl_root_fsolver* gsl_root_fsolver_alloc (const(gsl_root_fsolver_type)* T);
56 void gsl_root_fsolver_free (gsl_root_fsolver* s);
57 int gsl_root_fsolver_set (gsl_root_fsolver* s, gsl_function* f, double x_lower, double x_upper);
58 int gsl_root_fsolver_iterate (gsl_root_fsolver* s);
59 const(char)* gsl_root_fsolver_name (const(gsl_root_fsolver)* s);
60 double gsl_root_fsolver_root (const(gsl_root_fsolver)* s);
61 double gsl_root_fsolver_x_lower (const(gsl_root_fsolver)* s);
62 double gsl_root_fsolver_x_upper (const(gsl_root_fsolver)* s);
63 gsl_root_fdfsolver* gsl_root_fdfsolver_alloc (const(gsl_root_fdfsolver_type)* T);
64 int gsl_root_fdfsolver_set (gsl_root_fdfsolver* s, gsl_function_fdf* fdf, double root);
65 int gsl_root_fdfsolver_iterate (gsl_root_fdfsolver* s);
66 void gsl_root_fdfsolver_free (gsl_root_fdfsolver* s);
67 const(char)* gsl_root_fdfsolver_name (const(gsl_root_fdfsolver)* s);
68 double gsl_root_fdfsolver_root (const(gsl_root_fdfsolver)* s);
69 int gsl_root_test_interval (double x_lower, double x_upper, double epsabs, double epsrel);
70 int gsl_root_test_residual (double f, double epsabs);
71 int gsl_root_test_delta (double x1, double x0, double epsabs, double epsrel);