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.

Tarea 04

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)
Salida parcial de una ejecución del programa.

Implemente un método reducir() el cual transforma la matriz aumentada en una matriz identidad. El algoritmo de Gauss-Jordan puede resumirse como sigue:

  1. Por cada fila (o ecuación) i de la matriz:

    1. Hacer el elemento de la diagonal de esa fila Mi,i en 1, multiplicando la ecuación completa por el inverso de Mi,i.
    2. Por cada una de las restantes filas (o ecuaciones) j:

      1. Tomar el opuesto aditivo de Mj,i, llámese -Mj,i.
      2. Por cada columna k de la fila o ecuación j:

        1. Sumar al coeficiente 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.

Evaluación

  1. [20%] Modificaciones al método correr() para invocar a los demás métodos e imprimir los resultados.
  2. [30%] Método reducir(). Transforma la matriz en matriz identidad.
  3. [20%] Método 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.
  4. [30%] Método hacer0(j,i). Transforma la ecuación j para que el coeficiente Mj,i se convierta en 0.
  5. [10% Opcional] Si durante el proceso, el elemento 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.