#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#include"qspline.h" //prototypes:
//typedef struct {int n; double *x,*y,*p,*a;} qspline;
//qspline* qspline_make(int n,double* x,double* y);
//double qspline_eval(qspline* S, double z);

double pinterp(int n,double*x,double*y,double z);

int main(int argc, char** argv){

int n=10, N=200;
//allocating arrays:
double* x = (double*)calloc(n,sizeof(double));
double* y = (double*)calloc(n,sizeof(double));

//this is a command for the graph routine:
printf("#m=0, S=16\n");

//the table to be interpolated:
double z=-4.5;
for(int i=0; i<n; i++){
	x[i]=z;
	y[i]=1.0/(1.0+x[i]*x[i]);
	printf("%g %g\n",x[i],y[i]);
	z+=1.0;
	}

double step=(x[n-1]-x[0])/(N-1);
int i;

// polynomial interpolation:
printf("#m=6, S=0\n");
for (z=x[0], i=0; i<N; i++, z=x[0]+i*step)
	printf("%g %g\n",z,pinterp(n,x,y,z));

qspline* S = qspline_make(n,x,y); //building quadratic spline

//spline interpolation:
printf("#m=4, S=0\n");
for (z=x[0], i=0; i<N; i++, z=x[0]+i*step)
	printf("%g %g\n", z, qspline_eval(S,z));

qspline_free(S);
return 0;
}// end main
