/** @(#) matrixdouble/squaredmatrix.h */
#ifndef SQUAREDMATRIX_H
#define SQUAREDMATRIX_H
//----------------------------------------------------------------------------
#include "rectangularmatrix.h"

#include "../utilpos/interfacepos.h"
#include <iostream>
#include <string>
#include <stdexcept>	// runtime_error
using namespace std;

/**
* @author Omar Posada Villarreal
* @version 1.0, 02/03/2002
*/
// sig version template <class TObj>
class SquaredMatrix : public RectangularMatrix {
private:

public:
	/** Construye con rows = columns. */
	SquaredMatrix(int size = 1, int theLogic = 0, bool cleanMe = true)
	                : RectangularMatrix(size, size, theLogic, cleanMe) {
	}
	SquaredMatrix(RectangularMatrix &matrix);

	int getSize() {
        	return rows;	// = columns
        }

	/** Asegura redimensionamiento consistente.
        * No usar valores por omision. */
	void resize(int size, int theLogic, bool cleanMe) {
		RectangularMatrix::resize(size, size, theLogic, cleanMe);
                // Java super.resize(s, s);
	}

	void upperTriangularToSymmetric();
	void createRMatrix(SquaredMatrix &A, VectorDouble &d);
	double norm1();
	double condition();

	double findMinLimitEigenValue();
	double findMaxLimitEigenValue();

        void toIdentity();
	double dominantEigenValue(VectorDouble &x, int M, int seq,
		SquaredMatrix &V, VectorDouble &w);

};
//----------------------------------------------------------------------------
#endif
// Fin------------------------------------------------------------------------