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);