orgposada.nummethpos.abstractmatrix.matrixdouble
Class MatrixDouble

java.lang.Object
  |
  +--orgposada.nummethpos.abstractmatrix.AbstractMatrix
        |
        +--orgposada.nummethpos.abstractmatrix.matrixdouble.MatrixDouble
Direct Known Subclasses:
BandedMatrix, RectangularMatrix, TriangularMatrix

public abstract class MatrixDouble
extends AbstractMatrix

Crea una matriz fija de numeros de tipo "double" para el manejo de operaciones del Algebra Lineal. Se usa la abreviacion "e" para hacer referencia al elemento y agilizar la escritura. Usar la referencia a la matriz (logica) cuando sea la posicion relativa al elemento de la matriz (i, j). Efectua ajuste fisico. (Usado) Usar la referencia a memoria (fisica) cuando sea la posicion absoluta en memoria. No hace ajuste.

Version:
1.7 02/12/2001 fillDiagonal(), setToIdentity()
Author:
Omar Posada Villarreal

Field Summary
protected  double[][] e
          El tipo de elementos es "double".
private  int findedColumn
          Columna del elemento encontrado.
private  int findedRow
          Renglon del elemento encontrado.
private  int memoryColumns
          Almacenamiento fisico maximo en memoria.
private  int memoryRows
          Almacenamiento fisico maximo en memoria.
 
Fields inherited from class orgposada.nummethpos.abstractmatrix.AbstractMatrix
columns, rows, squared
 
Constructor Summary
MatrixDouble(int rows, int columns, int memoryRows, int memoryColumns)
          Crea una matriz logica de n renglones "rows" por m columnas "columns" (n x m).
 
Method Summary
static MatrixDouble add(MatrixDouble mdA, MatrixDouble mdB)
          Suma dos matrices (A y B) y crea una de resultado.
 double[] backSubstitution(double[] b)
          Sustituye hacia atras para encontrar los valores de solucion.
 void clean()
          Llena la matriz con ceros (0.0).
 void copyFrom(MatrixDouble B)
          Copia el contenido de la matriz B a la actual.
static MatrixDouble createCopyFrom(MatrixDouble source)
          Regresa una copia de si misma.
 void fill(double value)
          Llena la matriz (logica) con el valor.
 void fillDiagonal(double number)
          Pone el numero en la diagonal de la matriz.
 double findMaxAbs()
          Obtiene el mayor numero absoluto de la matriz actual.
 double findMaxAbsOutOfDiagonal()
          Obtiene el mayor numero absoluto de la matriz actual, fuera de la diagonal.
 double[] forwardSubstitution(double[] b)
          Sustituye hacia adelante para encontrar los valores de solucion.
 double[] getDiagonal()
          Toma los elementos de la diagonal de la mtriz actual.
abstract  double getE(int row, int column)
          Metodo a implementar para obtener el elemento(i, j).
 int getFindedColumn()
          Columna del elemento encontrado.
 int getFindedRow()
          Renglon del elemento encontrado.
protected  double getMemoryElementAt(int memoryRow, int memoryColumn)
          Metodo para las subclases para obtener el elemento (i, j) en posicion absoluta de memoria.
 boolean hasSameSize(MatrixDouble B)
          Checa si las dimensiones son iguales.
static MatrixDouble multiply(double escalar, MatrixDouble mdA)
          Multiplica un escalar por una matriz y crea una matriz con la misma dimension que la matriz del parametro.
 double[] multiplyBy(double[] vectorB)
          Multiplica la matriz actual por un vector columna (arreglo unidimensional de "double") y crea un vector columna "b" de taman~o m para almacenar el resultado a partir de la dimension de A.
abstract  MatrixDouble newMatrix(int rows, int columns, int memoryRows, int memoryColumns)
          Metodo a implementar para definir una nueva instancia.
 void normalizeColumns()
          Cambia los vectores columna para que tengan una norma igual a uno (norma unitaria).
 double[] premultiplyBy(double[] vectorB)
          Pre-multiplica un vector renglon por la matriz actual.
 void print(java.lang.String message)
          Muestra la matriz de double en la consola.
abstract  void setE(int row, int column, double value)
          Metodo a implementar para asignar valor al elemento(i, j).
protected  void setMemoryElementAt(int memoryRow, int memoryColumn, double value)
          Metodo para las subclases para asignar valor al elemento(i, j) en posicion absoluta de memoria.
protected  void setMemoryMatrix(double[][] matrix)
          Asigna el arreglo double[][] directamente a matrix.
 void setToIdentity()
          Convierte la matriz en una identidad.
static MatrixDouble substract(MatrixDouble mdA, MatrixDouble mdB)
          Resta dos matrices (A y B) y crea una de resultado.
 double[][] toDoubleArray()
          Convierte la matriz en un arreglo de "double".
 java.lang.String toString()
          Representacion en cadena de una matriz.
 MatrixDouble transpose()
          Transpuesta.
 
Methods inherited from class orgposada.nummethpos.abstractmatrix.AbstractMatrix
getColumns, getRows, isSquared, isStoredAt
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, wait, wait, wait
 

Field Detail

e

protected double[][] e
El tipo de elementos es "double". protected para que getE y setE funcionen. Permitir sobreescritura.

memoryRows

private int memoryRows
Almacenamiento fisico maximo en memoria.

memoryColumns

private int memoryColumns
Almacenamiento fisico maximo en memoria.

findedRow

private int findedRow
Renglon del elemento encontrado.

findedColumn

private int findedColumn
Columna del elemento encontrado.
Constructor Detail

MatrixDouble

public MatrixDouble(int rows,
                    int columns,
                    int memoryRows,
                    int memoryColumns)
Crea una matriz logica de n renglones "rows" por m columnas "columns" (n x m). Y creando un arreglo bidimensional fisico en memoria de "memoryRows" x "memoryColumns" fija el taman~o absoluto en memoria. Las subclases pueden hacer optimizacion para memoryColumns <= columns. por lo que siempre se tiene que memoryRows = rows. Pero las clases conocidas no ajustan memoryRows (memoryRows = rows, siempre), pero la firma se deja abierta. a posibles cambios. Usar memoryRows y memoryColumns para optimizar operaciones.
Method Detail

setE

public abstract void setE(int row,
                          int column,
                          double value)
                   throws java.lang.IndexOutOfBoundsException
Metodo a implementar para asignar valor al elemento(i, j). Posicion logica o relativa (no corresponde a la fisica en la memoria). Si el elemento no existe, no se hace nada.

getE

public abstract double getE(int row,
                            int column)
Metodo a implementar para obtener el elemento(i, j). Posicion logica o relativa (no corresponde a la fisica en la memoria). Si el elemento no existe regresa 0.0.

newMatrix

public abstract MatrixDouble newMatrix(int rows,
                                       int columns,
                                       int memoryRows,
                                       int memoryColumns)
Metodo a implementar para definir una nueva instancia. Sirve para agrupar a los constructores de las subclases. Todas las subclases de MatrixDouble deben implementarla y las sub-subclases de ellas deben sobreescribirlas

setMemoryElementAt

protected void setMemoryElementAt(int memoryRow,
                                  int memoryColumn,
                                  double value)
Metodo para las subclases para asignar valor al elemento(i, j) en posicion absoluta de memoria.

getMemoryElementAt

protected double getMemoryElementAt(int memoryRow,
                                    int memoryColumn)
Metodo para las subclases para obtener el elemento (i, j) en posicion absoluta de memoria.

setMemoryMatrix

protected void setMemoryMatrix(double[][] matrix)
Asigna el arreglo double[][] directamente a matrix. Se asume que el programador establecio consistentemente las dimensiones, en caso contrario se reajustan las dimensiones de memoria.

fill

public void fill(double value)
Llena la matriz (logica) con el valor. Esto no garantiza que todos los elementos (i, j) se les asigne este valor, ya que hay tipos de matrices que optimizan el espacio. Solo se actualizan los elementos que existen fisicamente.

clean

public void clean()
Llena la matriz con ceros (0.0).

setToIdentity

public void setToIdentity()
                   throws java.lang.RuntimeException
Convierte la matriz en una identidad. Si no es cuadrada, no hace ningun cambio.
Throws:
java.lang.RuntimeException - La matriz no es cuadrada.

fillDiagonal

public void fillDiagonal(double number)
Pone el numero en la diagonal de la matriz. No importa si es o no cuadrada. No limpia el resto de la matriz.

print

public void print(java.lang.String message)
Muestra la matriz de double en la consola.

multiplyBy

public double[] multiplyBy(double[] vectorB)
Multiplica la matriz actual por un vector columna (arreglo unidimensional de "double") y crea un vector columna "b" de taman~o m para almacenar el resultado a partir de la dimension de A. Checa las dimensiones del vectorB. Por default se refiere a postmultiplicacion. Es decir, se multiplica la matriz por un vector columna. Este metodo puede ser sobreescrito ("override") para eficientarlo ya que recorre todos los elementos (existan o no) de la matriz. Las dimensiones de las matrices deben ser A(n x m) b(m x 1) = c(m x 1). Ejemplo:

arrDoubC = mdA.multiplyBy(arrDoubB)

Returns:
Vector columna (double[]) producto entre "MatrixDouble" y el vector columna "b". "null" si las dimensiones no coinciden.
Throws:
java.lang.IllegalArgumentException - Matrices con dimensiones distintas.
See Also:
premultiplyBy(double[])

premultiplyBy

public double[] premultiplyBy(double[] vectorB)
Pre-multiplica un vector renglon por la matriz actual. (arreglo unidimensional de "double") y crea un vector renglon "b" de taman~o m para almacenar el resultado a partir de la dimension de A. Checa las dimensiones del vectorB. Es decir, se multiplica un vector renglon por la matriz. Las dimensiones de las matrices deben ser b(1 x n) A(n x m) = c(1 x m). Ejemplo:

arrDoubC = mdA.premultiplyBy(arrDoubB)

Returns:
Vector renglon (double[]) producto entre el vector columna "b" y "MatrixDouble". "null" si las dimensiones no coinciden.
See Also:
multiplyBy(double[])

multiply

public static MatrixDouble multiply(double escalar,
                                    MatrixDouble mdA)
Multiplica un escalar por una matriz y crea una matriz con la misma dimension que la matriz del parametro. No olvidar hacer un casting al resultado. Ejemplo de uso:

rmRes = (RectangularMatrix)MatrixDouble.multiply(escalar, smA);

Returns:
Matriz producto escalar.

add

public static MatrixDouble add(MatrixDouble mdA,
                               MatrixDouble mdB)
                        throws java.lang.IllegalArgumentException
Suma dos matrices (A y B) y crea una de resultado.

C = A + B

No olvidar hacer un casting al resultado. Ejemplo de uso:

rmRes = (RectangularMatrix)MatrixDouble.add(rmA, rmB);

Se recomienda que las tres matrices sean del mismo tipo para que no se pierdan elementos. La matriz C debe ser del mismo tipo que A. La matriz C se crea con las dimensiones y el tipo de de la matriz A.
Returns:
Matriz con el resultado.
Throws:
java.lang.IllegalArgumentException - Matrices con dimensiones distintas.

substract

public static MatrixDouble substract(MatrixDouble mdA,
                                     MatrixDouble mdB)
Resta dos matrices (A y B) y crea una de resultado.

C = A - B

No olvidar hacer un casting al resultado. Ejemplo de uso:

rmRes = (RectangularMatrix)MatrixDouble.substract(rmA, rmB);

Se recomienda que las tres matrices sean del mismo tipo para que no se pierdan elementos. La matriz C debe ser del mismo tipo que A. La matriz C se crea con las dimensiones y el tipo de de la matriz A.
Returns:
Matriz con el resultado.
Throws:
java.lang.IllegalArgumentException - Matrices con dimensiones distintas.

backSubstitution

public double[] backSubstitution(double[] b)
Sustituye hacia atras para encontrar los valores de solucion. Se supone que se trata de una matriz que aunque no sea "TriangularMatrix" tenga una forma triangular inferior valida para ser resuelta. No funciona para matrices aumentadas, se necesita que dar el vector por separado.
Parameters:
b - Vector del lado derecho.

forwardSubstitution

public double[] forwardSubstitution(double[] b)
Sustituye hacia adelante para encontrar los valores de solucion. Se supone que se trata de una matriz que aunque no sea "TriangularMatrix" tenga una forma triangular superior valida para ser resuelta. No funciona para matrices aumentadas, se necesita que dar el vector por separado.
Parameters:
b - Vector del lado derecho.

getDiagonal

public double[] getDiagonal()
Toma los elementos de la diagonal de la mtriz actual. Uso:
	// vectX = A(i,i); para i = 0...n
	double[] vectX;
	...
	vectX = getDiagonal();
 
Returns:
double[] Elementos de la diagonal

findMaxAbs

public double findMaxAbs()
Obtiene el mayor numero absoluto de la matriz actual.
See Also:
Renglon del elemento encontrado., Columna del elemento encontrado.

findMaxAbsOutOfDiagonal

public double findMaxAbsOutOfDiagonal()
Obtiene el mayor numero absoluto de la matriz actual, fuera de la diagonal.
See Also:
Renglon del elemento encontrado., Columna del elemento encontrado.

getFindedRow

public int getFindedRow()
Renglon del elemento encontrado.

getFindedColumn

public int getFindedColumn()
Columna del elemento encontrado.

hasSameSize

public boolean hasSameSize(MatrixDouble B)
Checa si las dimensiones son iguales.

createCopyFrom

public static MatrixDouble createCopyFrom(MatrixDouble source)
Regresa una copia de si misma. No olvidar el casting.

copyFrom

public void copyFrom(MatrixDouble B)
              throws java.lang.NullPointerException,
                     java.lang.RuntimeException
Copia el contenido de la matriz B a la actual.
Throws:
java.lang.RuntimeException - Las dimensiones no coinciden.

transpose

public MatrixDouble transpose()
Transpuesta. Gira una matriz. Si las dimensiones de la matriz actual son (m x n), las dimensiones de la matriz transpuesta seran (m x n). El elemento aij se vuelve aji.

toDoubleArray

public double[][] toDoubleArray()
Convierte la matriz en un arreglo de "double".

toString

public java.lang.String toString()
Representacion en cadena de una matriz. Las columnas se separan con tabulado "\t". Los renglones se separan con otra linea "\n".
Overrides:
toString in class java.lang.Object
Returns:
Regresa una cadena con la matriz de doubles.

normalizeColumns

public void normalizeColumns()
Cambia los vectores columna para que tengan una norma igual a uno (norma unitaria).