matrixsolution
Class EigenInverseIterationSolver

java.lang.Object
  |
  +--matrixsolution.MatrixSolver
        |
        +--matrixsolution.IterativeMatrixSolver
              |
              +--matrixsolution.EigenInverseIterationSolver

public class EigenInverseIterationSolver
extends IterativeMatrixSolver

Busca los Eigen valores y Eigen vectores (propios o caracteristicos) de una matriz cuadrada por el metodo de Iteracion Inversa (o de Potencia Inverso). Solo se puede usar un objeto en todo el programa. Se necesitaria cambiar todos las demas clases.

Version:
1.0, 16/09/2001
Author:
Omar Posada Villarreal
See Also:
"Burden, Richard. Analisis Numerico. Pag. 502. Metodo de Potencia Inverso."

Field Summary
private  double[] eigenValues
          Valores propios.
private  double[][] eigenVectors
          Vectores propios.
private  int indexMaxAbs
          Indice del primer maximo valor absoluto.
private  SquaredMatrix matrIden
          Matriz identidad solo inicializarla una vez.
private  int n
          Dimension de la matriz.
private  boolean solverFoundedSolution
          Comunicacion entre el Solver y find().
 
Fields inherited from class matrixsolution.MatrixSolver
found
 
Constructor Summary
EigenInverseIterationSolver()
          Vacio.
 
Method Summary
private  double calculateAprEigVal(SquaredMatrix A, double[] x)
          Calcula el aproximado iterativo del Eigen valor.
 double[] find(SquaredMatrix A, double[] x, double tolerance, int iterations)
          Busca los Eigen valores y Eigen vectores (propios o caracteristicos) de una matriz cuadrada simetrica por el metodo de Iteracion Inversa (o de Potencia Inverso).
 double findOneEigen(double[] eigX, double aprEigVal, int iEig, int indexMaxAbs, SquaredMatrix A, double[] x, double tolerance, int iterations)
          Encuentra un Eigen valor y Eigen vector.
 double[] getEigenVector(int i)
          Regresa un vector propio.
private  double[] quitEigenContribution(double[] eigX, int iEig)
          Reduce las contribuciones de los Eigen vectores para reducir el error de redondeo numerico.
 double[] solve(MatrixDouble A, double[] b, double tolerance, int iterations)
          Llama al metodo "find" para asegurar una matriz cuadrada.
private  double[] solveVectorY(SquaredMatrix A, double[] eigX, double aprEigVal)
          Resolver (A - qI) y = x.
 boolean wasFound()
          Checa el exito del metodo.
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
 

Field Detail

eigenVectors

private double[][] eigenVectors
Vectores propios.

eigenValues

private double[] eigenValues
Valores propios.

n

private int n
Dimension de la matriz.

indexMaxAbs

private int indexMaxAbs
Indice del primer maximo valor absoluto.

matrIden

private SquaredMatrix matrIden
Matriz identidad solo inicializarla una vez.

solverFoundedSolution

private boolean solverFoundedSolution
Comunicacion entre el Solver y find().
Constructor Detail

EigenInverseIterationSolver

public EigenInverseIterationSolver()
Vacio.
Method Detail

solveVectorY

private double[] solveVectorY(SquaredMatrix A,
                              double[] eigX,
                              double aprEigVal)
Resolver (A - qI) y = x. "Solve difference A - qI and change vect Y".

quitEigenContribution

private double[] quitEigenContribution(double[] eigX,
                                       int iEig)
Reduce las contribuciones de los Eigen vectores para reducir el error de redondeo numerico.

calculateAprEigVal

private double calculateAprEigVal(SquaredMatrix A,
                                  double[] x)
                           throws java.lang.ArithmeticException
Calcula el aproximado iterativo del Eigen valor.

findOneEigen

public double findOneEigen(double[] eigX,
                           double aprEigVal,
                           int iEig,
                           int indexMaxAbs,
                           SquaredMatrix A,
                           double[] x,
                           double tolerance,
                           int iterations)
                    throws java.lang.ArithmeticException,
                           java.lang.RuntimeException
Encuentra un Eigen valor y Eigen vector. Regresa el Eigen valor y cambia el Eigen vector en la posicion (eigenVectors[iEig]).
Returns:
Eigen valor encontrado. 0.0, si hubo una excepcion

wasFound

public boolean wasFound()
Checa el exito del metodo.
Overrides:
wasFound in class MatrixSolver

getEigenVector

public double[] getEigenVector(int i)
                        throws java.lang.IndexOutOfBoundsException
Regresa un vector propio.
Returns:
Un eigen vector. null si no se pudo encontrar por el metodo.
Throws:
java.lang.IndexOutOfBoundsException - Se se trata de acceder un Eigen que no puede existir (menor que 0, o mayor que el orden de la matriz).

solve

public double[] solve(MatrixDouble A,
                      double[] b,
                      double tolerance,
                      int iterations)
Llama al metodo "find" para asegurar una matriz cuadrada. El vector "b" debe ser no nulo (vector no cero). Se recomienda usar vector [1 1 1 1]. Si "b" es null, se usa el vector recomendado.
Overrides:
solve in class IterativeMatrixSolver
See Also:
find(abstractmatrix.matrixdouble.SquaredMatrix, double[], double, int)

find

public double[] find(SquaredMatrix A,
                     double[] x,
                     double tolerance,
                     int iterations)
Busca los Eigen valores y Eigen vectores (propios o caracteristicos) de una matriz cuadrada simetrica por el metodo de Iteracion Inversa (o de Potencia Inverso). Checar metodo "wasFound()" para verificar el exito del metodo: false, no se encontro algun EigenVector; true, se encontraron todos. Checar metodo "getEigenVectors()" para obtener los eigen vectores.
Parameters:
A - Matriz cuadrada (n x n).
x - Vector columna (n x 1) inicial (no debe ser cero y de preferencia de norma 1).
tolerance - Precision aceptable del error (ejemplo: 0.01)
iterations - Numero maximo de veces a ejecutar
Returns:
eigenValues[] Arreglo con los Eigen valores encontrados
See Also:
"Burden, Richard. Analisis Numerico. Alg. Potencia Inverso."