#include<stdio.h>
#include<math.h>
#include<gsl/gsl_errno.h>
#include<gsl/gsl_odeiv2.h>

int scos(double t, const double y[], double dydt[], void* params){
	double alpha=*(double*)params;
	dydt[0]=y[1];
	dydt[1]=-y[0]-y[1]/t+alpha*alpha/t/t*y[0];
	return GSL_SUCCESS;
	}

int main(void){
	gsl_odeiv2_system sys;
	sys.function=scos;
	sys.jacobian=NULL;
	sys.dimension=2;
	double alpha=0;
	sys.params=(void*)&alpha;

	double hstart=1e-3, epsabs=1e-6, epsrel=1e-6;

	gsl_odeiv2_driver *driver = 
		gsl_odeiv2_driver_alloc_y_new
			(&sys, gsl_odeiv2_step_rk8pd, hstart, epsabs, epsrel);

	double dt=0.1,t=dt/10;
	double y[2]={pow(t,alpha),alpha*pow(t,alpha-1)};
	for(double ti=t;ti<=10;ti+=dt){
		int status = gsl_odeiv2_driver_apply(driver,&t,ti,y);
		if(status != GSL_SUCCESS) break;
		printf("%g %g %g\n",ti,y[0],y[1]);
	}
return 0;
}
