Universidad de Costa Rica
Escuela de Ciencias de la Computación e Informática
CI-0202 Principios de informática - 2012b
Profesor Jeisson Hidalgo-Céspedes
Fecha: 05-nov-2012. Entrega grupo 10: 15-nov-2012, grupo 08: 16-nov-2012.
Escriba un programa en Java que calcule las soluciones de un sistema de ecuaciones lineales representado como una matriz aumentada, mediante el método de eliminación de Gauss-Jordan. Tome como punto de partida el ejemplo de clase MatrizAumentada.java, el cual carga matrices aumentadas y sus respuestas a partir de un archivo de texto ejercicios.txt.
Matriz 1: 3.0 5.0 8.0 | 63.0 2.0 3.0 6.0 | 41.0 1.0 2.0 3.0 | 24.0 f1 /= 3.0: 1.0 1.7 2.7 | 21.0 2.0 3.0 6.0 | 41.0 1.0 2.0 3.0 | 24.0 f2 += -2.0 f1: f3 += -1.0 f1: 1.0 1.7 2.7 | 21.0 0.0 -0.3 0.7 | -1.0 0.0 0.3 0.3 | 3.0 f2 /= -0.3: 1.0 1.7 2.7 | 21.0 -0.0 1.0 -2.0 | 3.0 0.0 0.3 0.3 | 3.0 f1 += -1.7 f2: f3 += -0.3 f2: 1.0 0.0 6.0 | 16.0 -0.0 1.0 -2.0 | 3.0 0.0 0.0 1.0 | 2.0 f3 /= 1.0: 1.0 0.0 6.0 | 16.0 -0.0 1.0 -2.0 | 3.0 0.0 0.0 1.0 | 2.0 f1 += -6.0 f3: f2 += 2.0 f3: 1.0 0.0 0.0 | 4.0 0.0 1.0 0.0 | 7.0 0.0 0.0 1.0 | 2.0 Correcto: false Resultado esperado: (4.0, 7.0, 2.0) Matriz 5: 1.0 1.0 4.0 | 1.0 3.0 2.0 11.0 | 1.0 1.0 0.0 3.0 | -1.0 f1 /= 1.0: 1.0 1.0 4.0 | 1.0 3.0 2.0 11.0 | 1.0 1.0 0.0 3.0 | -1.0 f2 += -3.0 f1: f3 += -1.0 f1: 1.0 1.0 4.0 | 1.0 0.0 -1.0 -1.0 | -2.0 0.0 -1.0 -1.0 | -2.0 f2 /= -1.0: 1.0 1.0 4.0 | 1.0 -0.0 1.0 1.0 | 2.0 0.0 -1.0 -1.0 | -2.0 f1 += -1.0 f2: f3 += 1.0 f2: 1.0 0.0 3.0 | -1.0 -0.0 1.0 1.0 | 2.0 0.0 0.0 0.0 | 0.0 Matriz inconsistente Resultado esperado: (-1.0, 2.0, 0.0)
Implemente un método reducir()
el cual transforma la matriz aumentada en una matriz identidad. El algoritmo de Gauss-Jordan puede resumirse como sigue:
Por cada fila (o ecuación) i
de la matriz:
Mi,i
en 1, multiplicando la ecuación completa por el inverso de Mi,i
.Por cada una de las restantes filas (o ecuaciones) j
:
Mj,i
, llámese -Mj,i
.Por cada columna k de la fila o ecuación j
:
Mj,k
el resultado de multiplicar el opuesto -Mj,i
con Mi,k
. En cada paso, se debe imprimir las operaciones sobre las filas que se le están aplicando a la matriz (por ejemplo f1 /= 3.0
indica que se está dividiendo por 3.0
todos los coeficientes de la fila 1. Tras aplicar una o un conjunto de operaciones, debe mostrarse su efecto sobre la matriz.
Al alcanzar la matriz identidad, se puede invocar un método para contrastar las soluciones obtenidas contra las soluciones prescritas en el archivo de ejercicios. Tenga en cuenta que los errores de precisión de números flotantes de Java, puede hacer creer que no se ha llegado a la respuesta, aunque en efecto se hizo, como se ve en la Matriz 1
del ejemplo de ejecución del programa.
correr()
para invocar a los demás métodos e imprimir los resultados.reducir()
. Transforma la matriz en matriz identidad.hacer1(i)
. Transforma la ecuación i
para que el coeficiente Mi,i
se convierta en 1. Si Mi,i
es 0, su programa debe advertir que la matriz es inconsistente y terminar el proceso.hacer0(j,i)
. Transforma la ecuación j
para que el coeficiente Mj,i
se convierta en 0.Mi,i
se convierte en 0, intercambiar la ecuación con una de las posteriores y continuar el proceso.Para presentar su solución, comprima los archivos .java
que haya creado y súbalos a Mediación virtual en la asignación con nombre Tarea04
.