#include <math.h>

#include "chapter7.cpp"

typedef double runtype;
typedef std::vector<runtype> Array;

ofstream outfile1("spline1.txt");

inline runtype f(runtype x) { return 1.0/(x*x + 1.0); }

void main()
{
  int n = 18;
  int  i;
  Array t(n+3, 0.0);
  Array y(n+3, 0.0);
  Array s(10, 0.0);
  
  t[1]	= 0.0;  t[2]	= 0.6;  t[3]	= 1.5;  t[4]	= 1.7;
  t[5]	= 1.9;  t[6]	= 2.1;  t[7]	= 2.3;  t[8]	= 2.6;
  t[9]	= 2.8;  t[10]	= 3.0;  t[11]	= 3.6;  t[12]	= 4.7;
  t[13] = 5.2;  t[14]	= 5.7;  t[15]	= 5.8;  t[16]	= 6.0;
  t[17] = 6.4;  t[18]	= 6.9;  t[19]	= 7.6;  t[20]	= 8.0;

  y[1]	= -0.8; y[2]	= -.34; y[3]	= 0.59; y[4]	= 0.59;
  y[5]	= 0.23; y[6]	= 0.1;  y[7]	= 0.28; y[8]	= 1.03;
  y[9]	= 1.5;  y[10]	= 1.44; y[11]	= 0.74; y[12]	= -0.82;
  y[13] =-1.27; y[14]	= -.92; y[15]	= -.92; y[16]	= -1.04;
  y[17] = -.79; y[18]	= -.06; y[19]	= 1.0;  y[20]	= 0.0;

  for (i = 0; i <= 8 ; i++)
	  s[i+1] = spline1(n, t, y, runtype(i));
  
  for (i = 1; i < 10; i++)
	  outfile1 << "s[" << i << "] = " << setw(10) << s[i] << endl;


ofstream outfile2("spline3.txt");
  n = 9;
  const runtype a = 0;
  const runtype b = 1.6875;

  Array z(n+1, 0.0);
  runtype e, h, x;
 
  h = (b - a)/n;
  for (i = 0; i <= n; i++)
    { 
      t[i] = a + i*h;
      y[i] = sin(t[i]);
    }
   spline3_coef(n, t, y, z);
  for (i = 0; i <= 4*n; i++)
    {
      x = a + i*h/4;
      e = fabs(sin(x) - spline3_eval(n, t, y, z, x));
	  outfile2 << "i = " << i << " x = " << x << " d = " << e << endl;
    }


ofstream outfile3("bspline2.txt");

  n = 19;

  Array X(n+1, 0.0);

  t[1]	= 0.2;  t[2]	= 0.5;  t[3]	= 1.0;  t[4]	= 1.5;
  t[5]	= 2.0;  t[6]	= 2.5;  t[7]	= 3.0;  t[8]	= 3.5;
  t[9]	= 4.0;  t[10]	= 4.5;  t[11]	= 5.0;  t[12]	= 5.2;
  t[13] = 5.5;  t[14]	= 6.0;  t[15]	= 6.2;  t[16]	= 6.5;
  t[17] = 7.0;  t[18]	= 7.5;  t[19]	= 8.0;  

  y[1]	= -0.8; y[2]	= -.34; y[3]	= 0.59; 
  y[4]	= 0.23; y[5]	= 0.1;  y[6]	= 0.28; y[7]	= 1.03;
  y[8]	= 1.5;  y[9]	= 1.44; y[10]	= 0.74; y[11]	= -0.82;
  y[12] =-1.27; y[13]	= -.92; y[14]	= -.92; y[15]	= -1.04;
  y[16] = -.79; y[17]	= -.06; y[18]	= 1.0;  y[19]	= 0.0;

  X[1]	= 0.6;  X[2]	= 1.5;  X[3]	= 1.7;  X[4]	= 1.9;
  X[5]	= 2.1;  X[6]	= 2.3;  X[7]	= 2.6;  X[8]	= 2.8;
  X[9]	= 3.0;  X[10]	= 3.6;  X[11]	= 4.7;  X[12]	= 5.2;
  X[13] = 5.7;  X[14]	= 5.8;  X[15]	= 6.0;  X[16]	= 6.4;
  X[17] = 6.9;  X[18]	= 7.6;  X[19]	= 8.0;

  Array A(n+2, 0.0); 
  Array H(n+2, 0.0); 

  bspline2_coef(n,t,y,A,H);
  outfile3 << "evaluation of bspline" <<endl;
  for (i = 1; i <= n; i++)
	outfile3 << bspline2_eval(n, t, A, H, X[i]) << endl;


ofstream outfile4("sch.txt");


  n = 9;
  Array d(n+4, 0.0);
 
  sch_coef(f, a, b, n, d);
  h = (b - a)/n;
  for (i = 0; i <= 4*n; i++)
    {
      x = a + i*h/4;
      e = fabs(sin(x) - sch_eval(a, b, n, d, x));
	  outfile4 << " i =" << setw(2) << i << " x =" << setw(10) << x;
	  outfile4 << " d =" << setw(10) << e << endl;
    }
}
