Dear Ladies and Gentlemen,I am so far quite confident with the basic usage of the GSL but now I wonder e.g. about combining methods. In the appendix I have written a class to initialize a spline, given two vectors as the x and y data set.
Fortnunetly, the GSL provides numerical methods, e.g. to integrate the interpolated data set.
But what if I want to use the interpolated data set as input for another GSL Routine, like root finding, Fourier Transform, odeint, etc.
I have put the return statement of the interpolation routine in the GSL function provided for the GSL method.
In the appended file I define (wrongly, it does not work) a function from line 33 to 36 to return the interpolated value and this should be use as required in line 41. But what about the params?
I hope you can help me. Kind regards, Klaus Huthmacher.
#include <iostream> #include <memory> #include <vector> #include "gsl/gsl_math.h" #include "gsl/gsl_spline.h" class foo { public: foo(std::vector<double>, std::vector<double>); double operator()(double); private: std::vector<double> _x, _y; std::unique_ptr<gsl_interp_accel,void(*)(gsl_interp_accel*)> acc; std::unique_ptr<gsl_spline,void(*)(gsl_spline*)> spline; }; foo::foo(std::vector<double> x, std::vector<double> y): _x(x), _y(y), acc(gsl_interp_accel_alloc(),gsl_interp_accel_free), spline(gsl_spline_alloc(gsl_interp_cspline, _x.size()),gsl_spline_free) { gsl_spline_init(spline.get(), _x.data(), _y.data(), _x.size()); } auto foo::operator()(double x) -> double { return gsl_spline_eval(spline.get(), x, acc.get()); } auto function(double x, void* params) -> double { return foo(x); } int main() { gsl_function F; F.function = &function; }
<<attachment: huthmacher.vcf>>