Sei sulla pagina 1di 5

Introduccin

El mtodo Gauss-Jordan para solucionar sistemas de ecuaciones lineales ha sido ampliamente utilizado en el campo de las matemticas por su simplicidad. Previamente con el auge de las tecnologas de la computacin, este mtodo pudo ser transcrito a cdigo para la creacin de programas que permitan solucionar estos sistemas de una manera ms rpida. Bsicamente la lgica a seguir para solucionar sistemas de ecuaciones lineales de N variables en el mtodo Gauss-Jordan, es presentado en el siguiente anlisis. Dado el siguiente sistema de N-ecuaciones lineales, resolveremos por Gauss-Jordan:  

   

Podemos descomponer este sistema de ecuaciones en dos matrices, Q y R, tal que:

Entonces tenemos:   La idea principal de este mtodo es obtener de Q la matriz identidad, mediante operaciones que se aplican tanto a Q como a R. Para ello identificamos lo siguiente:                  

Solo cabe aclarar que este procedimiento se da por iteraciones y el hecho de tener en ambos lados de la igualdad el mismo trmino, no es ms que decir que, el del lado izquierdo va a ser el nuevo valor y el que est en el lado derecho es el valor que es , en ese momento, antes de asignarle el nuevo.

Planteamiento

El programa en el que se implementar el algoritmo Gauss-Jordan, contar con interfaz grfica de usuario (GUI) y resolver sistemas de N-ecuaciones. Pero antes de plasmar los componentes de la GUI, mostrar el pseudocdigo que describe el planteamiento anteriormente mostrado. Pseudocdigo para Gauss-Jordan

ENTRADAS SALIDAS VARIABLES

Mat_Q[,], Mat_R[], order; (Matriz de coeficientes, matriz de resultados, orden de la matriz) Mat_X[]; (Matriz de soluciones) i, colrow, j, factor; (Para moverme por los renglones, por la diagonal, por las columnas, factor por el que se multiplican los renglones)

(Para este bloque se hacen ceros los elementos debajo de la diagonal) colrow = 0 (Primera ciclo while, para moverse por la diagonal) MIENTRAScolrow < orderHACER i = colrow + 1 (Segundo while, para movernos por cada rengln) MIENTRASi < orderHACER (Se le asigna a factor un valor para hacer cero el valor correspondiente a cada rengln) factor = - Mat_Q[i, colrow] / Mat_Q[colrow, colrow] (Este for es para cambiar cada elemento de los renglones de Mat_Q. Nos movemos por las columnas) PARAjEN[colrow, order] Mat_Q[i, j] = factor * Mat_Q[colrow, j] + Mat_Q[i, j] (Aqu le asignamos a Mat_X solamente) Mat_X[i] = factor * Mat_R[colrow] + Mat_R[i] i = i + 1; (Incrementamos i) colrow = colrow + 1 (Incrementamos colrow) (Para este bloque, se hacen ceros los elementos arriba de la diagonal) colrow = order 1 (La lgica es similar al primer bloque, ahora solo me muevo de abajo hacia arriba.Por eso cambia la direccin en los intervalos de los ciclos) MIENTRAS colrow 0 HACER Mat_R[colrow] = Mat_R[colrow] / Mat_Q[colrow, colrow] Mat_Q[colrow, colrow] = 1 i = colrow 1 MIENTRAS i 0 HACER factor = - Mat_Q[i, colrow] / Mat_Q[colrow, colrow] Mat_Q[i, colrow] = factor * Mat_Q[colrow, colrow] + Mat_Q[i, colrow] Mat_X[i] = factor * Mat_R[colrow] + Mat_R[i] i = i 1 colrow = colrow 1 SALIDA(Mat_X)

Una vez planteado el algoritmo, identifiquemos los componentes de la GUI. Tomando en cuenta que deseamos que sea de fcil manejo para el usuario, amigable y con pocos comandos a operar. Un vistazo simple de ello sera una GUI como esta:

Donde el cuadro grande, amarillo de la izquierda, es una caja de texto donde escribiremos solo los coeficientes de la ecuacin; ejemplo, para un sistema de 4 ecuaciones:  

Nota: Me gusta escribir mis programas en ingls, aunque sea malo. Por esa razn los textos de la GUI estn en ese idioma. En el cuadro de la derecha, nos mostrar las soluciones de la ecuacin.

El diseo de la GUI fue escogida de esa manera para hacer ms cmodo su uso al usuario. El usuario slo necesita colocar los coeficientes de la ecuacin y presionar la tecla escape para obtener los resultados de la ecuacin.
Problemtica

Al hacer ms fcil el manejo del programa al usuario final, la mayora de las veces, esta tendencia suele complicar las cosas al momento de programar. Un programa poco elaborado preguntara un elemento de la matriz a la vez, e incluso tendra la limitante de resolver como mximo un sistema de 3 ecuaciones. Pues bien, este programa no hace nada de eso. El usuario tiene la facilidad de ingresar los elementos de la ecuacin cmodamente, modificarlos si se le antoja. Y lo que es ms, capturar sistemas de N-ecuaciones. Para esta interfaz de usuario, hubo muchas cosas que tomar en cuenta. Las cajas de texto devuelven cadenas; todo el texto dentro de una caja de texto se almacena, en una variable de tipo string. Los datos o nmeros que se desean manejar son de tipo double, entonces es sobre entendible que es necesario transformar de string a double, y almacenarla en arreglos multidimensionales, en nuestro algoritmo seran Mat_Q, y un arreglo convencional Mat_R. Cmo acomodar los elementos string en las matrices double?

Los renglones de la matriz se identifican en la caja de texto porque, es necesario presionar ENTER para capturar un nuevo rengln, y los elementos de cada columna van separados por espacios; nos servimos de esto para idear un algoritmo que permita descomponer la cadena de la caja de texto y acomodar sus elementos en donde corresponde. Dicho esto el algoritmo quedara como sigue:

StrText,order; (Cadena donde se encuentran almacenados los elementos de la matriz, orden de la matriz) SALIDAS Mat_Q[,], Mat_R[]; (Matriz de coeficientes, matriz de las constantes o igualaciones) VARIABLES StrRow[],StrCol[], row,col; (Cadena descompuesta por renglones, cadena descompuesta por columnas de cada rengln, contador a renglones, contador a columnas) StrRow[] = DESCOMPONER(StrText, \n) (En este caso separamos cada que encuentre el salto de lnea \n) MIENTRASrow<orderHACER (Para cada rengln separa las columnas) este casoseparamos StrCol[] = DESCOMPONER(StrRow[row], ) (En cada que encuentre un espacio ) MIENTRAS col orderHACER (Los elementos de cada rengln los acomoda en donde corresponde para cada matriz) SI col <orderENTONCES Mat_Q[row, col] = StrCol[col] SI col == order ENTONCES Mat_R[row] = StrCol[col] col = col + 1 row = row + 1 ENTRADAS

Hasta aqu, las partes del programa que nos interesan ya estn resueltas. Slo queda puntuar en las limitaciones que tiene el programa.
Limitaciones

La versin de este programa es muy bsica, puesto que tiene varias limitaciones. La primera de ellas, es que si el primer coeficiente de la primera ecuacin es cero, nos va a devolver soluciones indeseables, por la divisin entre cero que se genera. La segunda es similar, puesto que se trata de obtener la matriz identidad, si se desacomodan los unos de la diagonal; existira tambin divisin entre cero. Una versin futura de este programa podra acomodar los renglones a antojo para que no sucedan este tipo de situaciones.

Potrebbero piacerti anche