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.multiroots;
8 import gsl.math;
9 import gsl.vector;
10 import gsl.matrix;
11 
12 extern (C):
13 
14 alias gsl_multiroot_function_struct gsl_multiroot_function;
15 alias gsl_multiroot_function_fdf_struct gsl_multiroot_function_fdf;
16 
17 extern __gshared const(gsl_multiroot_fsolver_type)* gsl_multiroot_fsolver_dnewton;
18 extern __gshared const(gsl_multiroot_fsolver_type)* gsl_multiroot_fsolver_broyden;
19 extern __gshared const(gsl_multiroot_fsolver_type)* gsl_multiroot_fsolver_hybrid;
20 extern __gshared const(gsl_multiroot_fsolver_type)* gsl_multiroot_fsolver_hybrids;
21 extern __gshared const(gsl_multiroot_fdfsolver_type)* gsl_multiroot_fdfsolver_newton;
22 extern __gshared const(gsl_multiroot_fdfsolver_type)* gsl_multiroot_fdfsolver_gnewton;
23 extern __gshared const(gsl_multiroot_fdfsolver_type)* gsl_multiroot_fdfsolver_hybridj;
24 extern __gshared const(gsl_multiroot_fdfsolver_type)* gsl_multiroot_fdfsolver_hybridsj;
25 
26 struct gsl_multiroot_function_struct
27 {
28     int function (const(gsl_vector)*, void*, gsl_vector*) f;
29     size_t n;
30     void* params;
31 }
32 
33 struct gsl_multiroot_fsolver_type
34 {
35     const(char)* name;
36     size_t size;
37     int function (void*, size_t) alloc;
38     int function (void*, gsl_multiroot_function*, gsl_vector*, gsl_vector*, gsl_vector*) set;
39     int function (void*, gsl_multiroot_function*, gsl_vector*, gsl_vector*, gsl_vector*) iterate;
40     void function (void*) free;
41 }
42 
43 struct gsl_multiroot_fsolver
44 {
45     const(gsl_multiroot_fsolver_type)* type;
46     gsl_multiroot_function* function_;
47     gsl_vector* x;
48     gsl_vector* f;
49     gsl_vector* dx;
50     void* state;
51 }
52 
53 struct gsl_multiroot_function_fdf_struct
54 {
55     int function (const(gsl_vector)*, void*, gsl_vector*) f;
56     int function (const(gsl_vector)*, void*, gsl_matrix*) df;
57     int function (const(gsl_vector)*, void*, gsl_vector*, gsl_matrix*) fdf;
58     size_t n;
59     void* params;
60 }
61 
62 struct gsl_multiroot_fdfsolver_type
63 {
64     const(char)* name;
65     size_t size;
66     int function (void*, size_t) alloc;
67     int function (void*, gsl_multiroot_function_fdf*, gsl_vector*, gsl_vector*, gsl_matrix*, gsl_vector*) set;
68     int function (void*, gsl_multiroot_function_fdf*, gsl_vector*, gsl_vector*, gsl_matrix*, gsl_vector*) iterate;
69     void function (void*) free;
70 }
71 
72 struct gsl_multiroot_fdfsolver
73 {
74     const(gsl_multiroot_fdfsolver_type)* type;
75     gsl_multiroot_function_fdf* fdf;
76     gsl_vector* x;
77     gsl_vector* f;
78     gsl_matrix* J;
79     gsl_vector* dx;
80     void* state;
81 }
82 
83 int gsl_multiroot_fdjacobian (gsl_multiroot_function* F, const(gsl_vector)* x, const(gsl_vector)* f, double epsrel, gsl_matrix* jacobian);
84 gsl_multiroot_fsolver* gsl_multiroot_fsolver_alloc (const(gsl_multiroot_fsolver_type)* T, size_t n);
85 void gsl_multiroot_fsolver_free (gsl_multiroot_fsolver* s);
86 int gsl_multiroot_fsolver_set (gsl_multiroot_fsolver* s, gsl_multiroot_function* f, const(gsl_vector)* x);
87 int gsl_multiroot_fsolver_iterate (gsl_multiroot_fsolver* s);
88 const(char)* gsl_multiroot_fsolver_name (const(gsl_multiroot_fsolver)* s);
89 gsl_vector* gsl_multiroot_fsolver_root (const(gsl_multiroot_fsolver)* s);
90 gsl_vector* gsl_multiroot_fsolver_dx (const(gsl_multiroot_fsolver)* s);
91 gsl_vector* gsl_multiroot_fsolver_f (const(gsl_multiroot_fsolver)* s);
92 gsl_multiroot_fdfsolver* gsl_multiroot_fdfsolver_alloc (const(gsl_multiroot_fdfsolver_type)* T, size_t n);
93 int gsl_multiroot_fdfsolver_set (gsl_multiroot_fdfsolver* s, gsl_multiroot_function_fdf* fdf, const(gsl_vector)* x);
94 int gsl_multiroot_fdfsolver_iterate (gsl_multiroot_fdfsolver* s);
95 void gsl_multiroot_fdfsolver_free (gsl_multiroot_fdfsolver* s);
96 const(char)* gsl_multiroot_fdfsolver_name (const(gsl_multiroot_fdfsolver)* s);
97 gsl_vector* gsl_multiroot_fdfsolver_root (const(gsl_multiroot_fdfsolver)* s);
98 gsl_vector* gsl_multiroot_fdfsolver_dx (const(gsl_multiroot_fdfsolver)* s);
99 gsl_vector* gsl_multiroot_fdfsolver_f (const(gsl_multiroot_fdfsolver)* s);
100 int gsl_multiroot_test_delta (const(gsl_vector)* dx, const(gsl_vector)* x, double epsabs, double epsrel);
101 int gsl_multiroot_test_residual (const(gsl_vector)* f, double epsabs);