orgposada.nummethpos.matrixsolution
Class EigenSubspaceSolver

java.lang.Object
  |
  +--orgposada.nummethpos.matrixsolution.MatrixSolver
        |
        +--orgposada.nummethpos.matrixsolution.EigenSubspaceSolver

public class EigenSubspaceSolver
extends MatrixSolver

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

Version:
1.0, 29/11/2001
Author:
Omar Posada Villarreal

Field Summary
private  double[] eigenValues
          Valores propios.
private  double[][] eigVectCol
          Vectores propios, cada columna es un Eigen vector.
private  double[][] eigVectRow
          Vectores propios, cada columna es un Eigen vector.
private  boolean solverFoundedSolution
          Comunicacion entre el Solver y find().
 
Fields inherited from class orgposada.nummethpos.matrixsolution.MatrixSolver
found
 
Constructor Summary
EigenSubspaceSolver()
           
 
Method Summary
 double[] find(SquaredMatrix mA, int nEig, double tolerance, int iterations)
          Busca los Eigen valores y Eigen vectores (propios o caracteristicos) de una matriz cuadrada simetrica por el metodo iterativo en el subespacio.
 double[] getEigenVector(int i)
          Regresa un vector propio.
 double[][] getEigenVectorsAsColumns()
          Regresa los Eigen vectores como una matriz, cada columna es un Eigen vector.
 double[][] getEigenVectorsAsRows()
          Regresa los Eigen vectores como una matriz, cada columna es un Eigen vector.
private  double[] quitEigenContribution(double[] eigX, int iEig)
          Reduce las contribuciones de los Eigen vectores para reducir el error de redondeo numerico.
 void quitEigenContribution(MatrixDouble A)
          Quita las contribuciones a los vectores columna.
 double[] solve(MatrixDouble A, int numberEigen, double tolerance, int iterations)
          Llama al metodo "find" para asegurar una matriz cuadrada.
 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

eigVectCol

private double[][] eigVectCol
Vectores propios, cada columna es un Eigen vector.

eigVectRow

private double[][] eigVectRow
Vectores propios, cada columna es un Eigen vector.

eigenValues

private double[] eigenValues
Valores propios.

solverFoundedSolution

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

EigenSubspaceSolver

public EigenSubspaceSolver()
Method Detail

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.

getEigenVectorsAsColumns

public double[][] getEigenVectorsAsColumns()
Regresa los Eigen vectores como una matriz, cada columna es un Eigen vector.
Returns:
Matriz con Eigen vectores.

getEigenVectorsAsRows

public double[][] getEigenVectorsAsRows()
Regresa los Eigen vectores como una matriz, cada columna es un Eigen vector.
Returns:
Matriz con Eigen vectores.

solve

public double[] solve(MatrixDouble A,
                      int numberEigen,
                      double tolerance,
                      int iterations)
               throws java.lang.RuntimeException,
                      java.lang.ArithmeticException
Llama al metodo "find" para asegurar una matriz cuadrada. El vector "b" no se usa. Cualquier excepcion indica que no se pudo encontrar solucion.
Parameters:
A - Matriz cuadrada (n x n).
numberEigen - Numero de eigen vectores a buscar.
tolerance - Precision aceptable del error (ejemplo: 0.01).
iterations - Numero maximo de veces a ejecutar.
Returns:
eigenValues[] Arreglo con los Eigen valores encontrados.
Throws:
java.lang.RuntimeException - Se excedio el maximo numero de iteraciones. No se encontro los Eigen valores y vectores.
java.lang.ArithmeticException - Problemas con las operaciones aritmeticas.
See Also:
find(orgposada.nummethpos.abstractmatrix.matrixdouble.SquaredMatrix, int, double, int)

quitEigenContribution

public void quitEigenContribution(MatrixDouble A)
                           throws java.lang.ArithmeticException
Quita las contribuciones a los vectores columna.
Throws:
java.lang.ArithmeticException - Division entre cero.

quitEigenContribution

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

find

public double[] find(SquaredMatrix mA,
                     int nEig,
                     double tolerance,
                     int iterations)
              throws java.lang.RuntimeException,
                     java.lang.ArithmeticException
Busca los Eigen valores y Eigen vectores (propios o caracteristicos) de una matriz cuadrada simetrica por el metodo iterativo en el subespacio.
Parameters:
mA - Matriz cuadrada (n x n).
nEig - Numero de eigen vectores a buscar.
tolerance - Precision aceptable del error (ejemplo: 0.01).
iterations - Numero maximo de veces a ejecutar.
Returns:
eigenValues[] Arreglo con los Eigen valores encontrados.
Throws:
java.lang.RuntimeException - Se excedio el maximo numero de iteraciones. No se encontro los Eigen valores y vectores.
java.lang.ArithmeticException - Problemas con las operaciones aritmeticas.
See Also:
Checar metodo "wasFound()" para verificar el exito del metodo: false, no se encontro algun EigenVector; true, se encontraron los requeridos., Checar metodo "getEigenVectors()" para obtener los eigen vectores.