#include "NumMeth.h"

void fnewt(Matrix x, Matrix a, Matrix& f, Matrix& D) {
//  Function used by the N-variable Newton's method
//  Inputs
//    x     State vector [x y z]
//    a     Parameters [r sigma b]
//  Outputs
//    f     Lorenz model r.h.s. [dx/dt dy/dt dz/dt]
//    D     Jacobian matrix, D(i,j) = df(j)/dx(i)

  // Evaluate f(i)
  f(1) = a(2)*(x(2)-x(1));
  f(2) = a(1)*x(1)-x(2)-x(1)*x(3);
  f(3) = x(1)*x(2)-a(3)*x(3);

  // Evaluate D(i,j)
  D(1,1) = -a(2);        // df(1)/dx(1)
  D(1,2) = a(1)-x(3);    // df(2)/dx(1)
  D(1,3) = x(2);         // df(3)/dx(1)
  D(2,1) = a(2);         // df(1)/dx(2)
  D(2,2) = -1;           // df(2)/dx(2)
  D(2,3) = x(1);         // df(3)/dx(2)
  D(3,1) = 0;            // df(1)/dx(3)
  D(3,2) = -x(1);        // df(2)/dx(3)
  D(3,3) = -a(3);        // df(3)/dx(3)
}

