/* -*-ePiX-*- */
#include "epix.h"
using namespace ePiX;

double f(double x)
{
  double u(x-7), v(u*u);
  return 0.125*v*(0.001*v*v + 1) - 1;
}

Deriv fp(f);

double df(double x)
{
  return fp.eval(x);
}

double iter(double x)
{
  return x - f(x)/df(x);
}

int main()
{
  picture(P(0,-1), P(8,4), "2.5 x 1.5625in");

  begin();
  bold();

  double xQ(2), T(iter(xQ)), T1(iter(T));

  P O(0,0);

  line(O, P(xmax(),0));
  line(O, P(0,3));

  line(P(xQ,0), P(xQ, f(xQ)));
  line(P(T,0), P(xQ, f(xQ)));

  plot(f, xQ, xmax(), 60);

  line_style("-  -  ");
  line(P(T,0), P(T, f(T)));
  line(P(T1,0), P(T, f(T)));

  label(O, P(0,-2), "$O$", b);
  label(P(xQ), P(0,-2), "$Q$", b);
  label(P(T), P(0,-2), "$T$", b);
  label(P(T1), P(0,-2), "$T_1$", b);

  label(P(7,f(7)), P(0,-2), "$P_1$", b);

  label(P(0.5*xQ), P(0, 2), "$a$", t);
  label(P(0.5*(xQ+T)), P(0, 2), "$h$", t);
  label(P(newton(f, T1)), P(2, 2), "$S$", t);
  label(P(xmax()), P(0, 2), "$X$", t);

  label(P(0,3), P(2,0), "$Y$", r);

  label(P(xQ,f(xQ)), P(2,0), "$P$", r);
  label(P(xmax(),f(xmax())), P(2,0), "$P_2$", r);

  label(P(0.5*xmax(), ymin()), P(0,-18), "\\textsc{Fig.~22}", b);

  tikz_format();

  end();
}
