Implementamos el método de Choleski para factorizar una matriz de n x n como un producto de matrices LLt, donde L es una matriz triangular inferior y ...
Descripción: Ideal para la continuar en bienes raices
reporte de un accidenteDescripción completa
reporte de un accidenteFull description
Descripción completa
Descripción: reporte
Reporte Pendulo InvertidoDescripción completa
lavial 2Descripción completa
termoDescripción completa
Descripción completa
muy buenoDescripción completa
Reporte BismutoFull description
Descripción completa
Descripción: ing.civi
Reporte PosologiaDescripción completa
Laboratorio de fisicoquímica 2
Reporte de practica de un dado en el programa de CodeWarriorDescripción completa
Descripción completa
Reporte Aplastamiento Resistencia de los Materiales UDBDescripción completa
1.- CÓDIGO FUENTE. Ahora implementamos el método de Choleski para factorizar una matriz de como un producto de matrices
t
LL
, donde
L es
una matriz triangular inferior y
n x n t
L
es
una matriz triangular superior y transpuesta de L. El lenguaje de programación utilizado será Java. Para ello, hemos modificado la clase Matriz.java que que implementa el método en cuestión, además de algunos métodos auxiliares para que el usuario ingrese las entradas de la matriz desde el teclado y ésta se imprima con un formato entendible. A continuación, se muestra el código fuente: 1 2 import java.util.Scanner; 3 4 class Matriz { 5 6 int filas ; 7 int columnas ; 8 double m[][]; 9 10 public Matriz(double m[][]) { 11 this.m = m; 12 this.filas = m.lengt m.length h; 13 this.columnas = m[0].length ; 14 15 } 16 17 set setFilas (int filas ) { public void 18 this.filas = filas ; 19 } 20 21 set setColumnas (int columnas ) { public void 22 this.columnas = columnas ; 23 } 24 25 public int getFilas () { 26 return this.filas ; 27 } 28 29 public int getColumnas () { 30 return this.columnas ; 31 } 32 33 imprimirMatriz() { imprimirMatriz() public void 34 for (int i = 0; i < m.length; i++) { 35 for (int j = 0; j < m[i].length ; j++) { 36 37 if (m[i][j] >= 0) { 38 System.out.printf("\t%s%.2f", " ", m[i][j]); 39 } else { 40 System.out.printf("\t%.2f", m[i][j]); 41 }
1
42 43 } 44 System.out.println(""); 45 } 46 System.out.println(""); 47 System.out.println(""); 48 } 49 50 llenarMatriz() { llenarMatriz() public void 51 Scanner entrada = new Scanner(System.in); 52 for (int i = 0; i < m.length; i++) { 53 for (int j = 0; j < m[i].length ; j++) { 54 System.out.print("Ingrese el elemento [" + (i + 1) + "," + (j + 1) + "]: "); 55 m[i][j] = entrada.nextInt(); 56 } 57 } 58 System.out.println(""); 59 }
//----------------------------------------------------------------------public ArrayList public ArrayList choleski choleski() { < int N int N = m.length; double L double L[][] = new double[filas][columnas]; double U double U[][] = new double[filas][columnas]; L[0][0] = Math.sqrt(m[0][0]); int j j=1; j for( for (int <=N-1; j++) { <= L[j][0] = m[j][0] / L[0][0]; } double sumaAux1; double sumaAux1 int i i=1; i for( for (int <=N-2; i++) { <= sumaAux1 = 0.0; int k k=0; k for( for (int <=i-1; k++) { <= sumaAux1 += Math.pow(L[i][k], 2);
} L[i][i] = Math.sqrt(m[i][i] - sumaAux1); double sumaAux2; double sumaAux2 int j j=i+1; j for( for (int <=N-1; j++) { <= sumaAux2 = 0.0; int k k=0; k for( for (int <=i-1; k++) { <= sumaAux2 += L[j][k]*L[i][k];
} L[j][i] = (m[j][i] - sumaAux2)/L[i][i]; } } double sumaAux3 = 0.0; double sumaAux3 int k k=0; k for( for (int <=N-2; k++) { <= sumaAux3 += Math.pow(L[N-1][k], 2);
//U es la matriz transpuesta de L int i i=0; i for( for (int
} } ArrayList matricesFactor = new ArrayList matricesFactor < <>(); <>(); matricesFactor.add(L); matricesFactor.add(U);
return matricesFactor; }
//---------------------------------------------------------------------public double[] sustitucionAdelante(double double L L[][], double double b b[]) { int N int N = m.length; double Y double Y[] = new double[N]; Y[0] = b[0]; System.out.println("Y[1]: " + Y[0]); double sumaAux; double sumaAux int i i=1; i for( for (int <=N-1; i++) { <= sumaAux = 0.0; int j j=0; j for( for (int <=i-1; j++) { <= sumaAux += L[i][j] * Y[j];
return Y; } //-------------------------------------------------------------------public double[] sustitucionAtras(double double U U[][], double double Y Y[]) { int N int N = m.length; double X double X[] = new double[N]; X[N-1] = Y[N-1] / U[N-1][N-1]; System.out.println("X["+N+"]: " + X[N-1]); double sumaAux double sumaAux; int i i=N-2; i>=0; i--) { for( for (int sumaAux = 0.0; int j j=i+1; j for( for (int <=N-1; j++) { <= sumaAux += U[i][j]*X[j]; } X[i] = (Y[i]-sumaAux)/U[i][i]; System.out.println("X["+(i+1)+"]: " + X[i]);
} 3
return X; } public static void void main main(String[] args) { Scanner entrada = new Scanner(System.in); System.out.print("\nIngrese la dimensión de la matriz: "); int dim int dim = entrada.nextInt(); double A double A[][] = new double[dim][dim]; Matriz matrix = new Matriz(A); matrix.llenarMatriz(); System.out.println("\nLa matriz ingresada A es: \n"); matrix.imprimirMatriz(); double L[][] = matrix.choleski().get(0); double L double U double U[][] = matrix.choleski().get(1); System.out.println("\nLa matriz triangular inferior L: \n"); matrix.imprimirMatriz(L); System.out.println("\nLa matriz triangular superior U: \n"); matrix.imprimirMatriz(U);
2.- PRUEBA Y EJECUCIÓN. Probamos el algoritmo factorizando factorizando la siguiente matriz de 4x4: 4
−1
1
−1
4.25
2.75
1
2.75
3. 5
4
Durante la ejecución el programa solicita al usuario ingresar la dimensión del sistema de ecuaciones (3 en este caso); acto seguido, el usuario deberá ingresar mediante el teclado la matriz de coeficientes. coeficientes. Una vez ingresada la matriz, el programa procederá a ejecutar el algoritmo de Choleski, imprimiendo la factorización: factorización: