// This may look like C code, but it is really -*- C++ -*-

/*
 *  Copyright (c) University of Aizu
 */

#ifndef _Eigen_h
#define _Eigen_h 1

#ifdef __GNUG__
#pragma interface
#endif

#include "Cmatrix.h"

class Eigen {
 private:
  int n;
  Cvector *eigenValues;
  Cmatrix *eigenVectors;

 public:
  Eigen(int dimension);
  ~Eigen();
  int init(int real = 0);
  int print();
  int solve(const Cmatrix& A,     // input: matrix
	    double epsilon,       // input: required precision
	    int iterations = 30,  // input: max. number of iterations
	    int randomize = 1,
	    int verbose = 0);     // optional: print intermediary values
  int check(const Cmatrix& A,
	    double epsilon,
	    int verbose = 0);
};

#endif
