[ Foro de Pascal ]
cálculo de matrices escalonadas reducidas
Estoy elaborando un programa en Pascal hasta cierto punto complejo (o al menos, lo es para mí, ya que estando a medio tiene más de 250 líneas
![aprobación aprobación](http://www.aprendeaprogramar.com/pix/s/approve.gif)
) para el cálculo de matrices, capaz de sumar, restar, multiplicar matrices de cualquier orden (hasta 14 por ejemplo, estando la dimensión de la matriz predefinida como una constante) el "problema" llega cuando quiero realizar el procedimiento de cálcular la forma escalonada reducida de una matriz por filas o columnas (así aprovecharía y calcularía también la inversa en otro procedimiento), no soy capaz de darle una forma cuando menos sensata. No encuentro la manera de hacerlo de una forma simple. Pensé en establecer un bucle del tipo REPEAT-UNTIL poniendo como condicion para su finalización comparar la matriz con los requisitos que debe tener para considerarse escalonada reducida, y dentro del bucle las operaciones que permiten realizarlo, pero me pierdo en ello. No quiero un código copiado ni que nadie me lo haga, pero si un pseudocódigo o algunas directrices concretas para poder hacerlo, un saludo.
P.D. Si quiere puedo publicar el código fuente en un nuevo mensaje para que la gente pueda usarlo/verlo/analizarlo/criticarlo.
Para calcular una matriz escalonada ("diagonal superior") existe un algoritmo predefinido para hacerlo, tanto si es porque quieres usarla para resolver un sistema de ecuaciones como si es para hallar la matriz inversa.
Es el método de Gauss-Seidel, y consiste en ir haciendo ceros de forma ordenada por debajo de la diagonal principal.
Explicarlo en texto (sin imágenes "bien alineadas" de como quedaría la matriz) no es fácil, pero voy a intentarlo. Vamos a suponer que la matriz es
1 2 3
4 0 -6
7 -1 9
Tomas un elemento de la primera columna como pivote, por ejemplo el 1 (hay "trucos" para hacerlo de forma eficiente, pero no vamos a entrar en tanto detalle).
Para convertir el 4 en un 0, divides entre el pivote (1): como 4/1 = 4, hay que restar a la segunda fila la primera multiplicada por cuatro:
[4 0 -6] -4 [1 2 3] = [4 0 -6] - [4 8 12] = [0 -8 -18]
Ahora la matriz es
1 2 3
0 8 -18
7 -1 9
Ahora, a la tercera fila se le resta la primera multiplicada por 7 (porque 7/1 = 7)
[7 -1 9] -7 [1 2 3] = [7 -1 9] - [7 14 21] = [0 -15 -12]
Así que ahora tenemos
1 2 3
0 8 -18
0 -15 -12
Sólo nos queda hacer 0 el -15. Ahora tomamos como pivote el 8 de la segunda fila (ya no podemos usar la primera, o perderíamos el 0 que ya habíamos conseguido en la primera columna). Tendremos que restar a la tercera fila la segunda multiplicada por -15/8 (sí, este número es más feo, pero es que he escogido los datos al azar
![lengua fuera lengua fuera](http://www.aprendeaprogramar.com/pix/s/tongueout.gif)
).
Tras ese paso, ya tenemos una matriz escalonada.
si te dijeran que encontraras la forma escalonada normal de la matriz de coeficiente como lo harias
¿Te refieres a la forma escalonada reducida, en la que los pivotes valen 1? Bastaría con dividir los elementos de cada fila por el pivote. Aun así, no es un problema realmente de programación, sino de álgebra de matrices, así que sería mejores que buscaras documentos sobre matrices, como éste:
http://www.ugr.es/~lmerino/B1-1.html
(No se puede continuar esta discusión
porque tiene más de dos meses de antigüedad.
Si tienes dudas parecidas, abre un nuevo hilo.)