[Gambas-user] Gambas3 and Gnu scientific library

Benoît Minisini gambas at ...1...
Wed May 18 17:07:09 CEST 2011


> Hello  Jussi,
> 
> in C the stuff works pretty nice, so i agree to your suggestion 2.
> 
> Do all math stuff directly in Gambas is an option i should check.
> 
> I think i mentioned that i use Gambas3 and want to make interpolations,
> derivatives and integrals from an integrarray.
> The array contains ADC outputs from a CCD linear array sensor measurment
> 
> wally
> 
> On Monday, May 16, 2011 17:46:51 Jussi Lahtinen wrote:
> > Not very easy task...
> > Here is interpolation example in C.
> > http://www.gnu.org/software/gsl/manual/html_node/Interpolation-Example-pr
> > og rams.html
> > 
> > As you can see, you need to call several functions to get what you want.
> > Declaring those in Gambas is OK, except determining interpolation type!
> > 
> > You can find definition of interpolation type from "gsl_interp.h",
> > and unfortunately it is not anything simple;
> > 
> > typedef struct {
> > 
> >   const char * name;
> >   unsigned int min_size;
> >   void *  (*alloc) (size_t size);
> >   int     (*init)    (void *, const double xa[], const double ya[],
> >   size_t
> > 
> > size);
> > 
> >   int     (*eval)    (const void *, const double xa[], const double ya[],
> > 
> > size_t size, double x, gsl_interp_accel *, double * y);
> > 
> >   int     (*eval_deriv)  (const void *, const double xa[], const double
> > 
> > ya[], size_t size, double x, gsl_interp_accel *, double * y_p);
> > 
> >   int     (*eval_deriv2) (const void *, const double xa[], const double
> > 
> > ya[], size_t size, double x, gsl_interp_accel *, double * y_pp);
> > 
> >   int     (*eval_integ)  (const void *, const double xa[], const double
> > 
> > ya[], size_t size, gsl_interp_accel *, double a, double b, double *
> > result); void    (*free)         (void *);
> > 
> > } gsl_interp_type;
> > 
> > GSL_VAR const gsl_interp_type * gsl_interp_cspline; * <-- this is used in
> > example*
> > 
> > 
> > Right now I don't know how to implement that reasonably in Gambas.
> > There are at least three possibilities to overcome this problem:
> > 
> > 1. Hope that Benoit will implement new feature to use external
> > structures. 2. Use C to write your own interface between GSL and Gambas.
> > Perhaps easiest option.
> > 3. Do not use GSL at all, and write what you need purely with Gambas.
> > 
> > That's all I can say...
> > Also because you didn't specify what you need exactly, nor are you using
> > Gambas 2 or 3.
> > 
> > Jussi
> > 

Hi,

I added a System.GetExternSymbol() method in the last revision so that you can 
get the address of the interpolation type structure.

You have to do something like that:

	Dim gsl_interp_cspline As Pointer

	gsl_interp_cspline = Pointer@(System.GetExternSymbol("libgsl",
		"gsl_interp_cspline"))

Maybe the Pointer@() is not needed, I don't know. The symbol can be directly 
the address of the structure (no Pointer@ needed), or a pointer to the address 
of the structure.

Try and tell me.

Regards,

-- 
Benoît Minisini




More information about the User mailing list