You are on page 1of 7

Instituto Politcnico Nacional Escuela Superior de Fsica y Matemticas Programacin 2 Proyecto 1er departamental Resolucin de matrices por el mtodo

de Gauss-Jordan Vidal Castillo Aldo Alejandro Resumen En este proyecto, se implemento un programa en el lenguaje Fortran para resolver un sistema de n ecuaciones con n incgnitas; a partir de la eliminacin de Gauss-Jordan aplicada a la matriz aumentada de dicho sistema. Problema Implementar el algoritmo de la eliminacin de Gauss-Jordan en Fortran Mtodo numrico La eliminacin de Gauss-Jordan consiste en: se tiene un sistema de ecuaciones, con sus incgnitas, para que dicho sistema tenga solucin necesitamos que sean el mismo nmero de incgnitas que de ecuaciones. a11x1 + a12x2 + . . . + a1kxk = n1 a21x1 + a22x2 + . . . + a2kxk = n2 . . . ak1x1 + ak2x2 + . . . + akkxk = nk As los coeficientes y constantes del sistema con k ecuaciones y k incgnitas se pasa a una matriz, llamada matriz aumentada x1 x2 . . . xk

a11 a12 . . . a1k n1 a21 a22 . . . a2k n2 . . . ak1 ak2 . . . akk nk La resolucin de dicha matriz, ser la solucin para el sistema de ecuaciones La forma de resolver dicha matriz con el mtodo de Gauss-Jordan es la siguiente Suponemos que el elemento a11 es distinto de 0 y con este procedemos a eliminar a los elementos de la forma a1k mediante operaciones de matrices (intercambio de filas, multiplicacin de una fila por una constante, cambio de una fila por la suma de esa fila y una diferente), de la siguiente manera: A la fila k le sumamos la fila 1multiplicada por la constante -ak1a11

As obtenemos la siguiente matriz x1 x2 . . . xk n1 n2

a11 a12 . . . a1k 0 . . . 0 b22 . . . b2k

bk2 . . . bkk

nk

Repetimos el proceso para, que con el elemento crr (donde crr es una constante y 1<=r<=k) eliminemos los elementos cri (con i<>r) sumandoles el elemento crr multiplicado por la constante -cri/crr , obteniendose asi la siguiente matriz x1 c11 0 . . . 0 x2 . . . 0 ... c22 ... xk 0 0 c1 c2

0 ...

ckk

ck

A cada fila de la matriz anterior la podemos dividir por el elemento crr, quedando una matriz de la forma x1 1 0 . . . 0 x2 . . . 0 ... 1 ... 0 0 xk c'1 c'2

0 ...

c'k

La cual es una matriz diagonal,y es la solucion a nuestro sistema de ecuaciones Cdigo fuente El siguiente texto es el cdigo fuente del algoritmo de Gauss-Jordan implementado en Fortran, el cual obtiene su matriz aumentada de un archivo.

program gaussJordan implicit none real, allocatable :: A(:,:),X(:),av(:),aux(:,:) real :: xis integer :: i,j,k,m,n,l ! abrir archivos (de entrada) con las matrices A y B: open(237,file='matrizA.dat') ! Abrir archivo con las soluciones open(637,file='matrizX.dat') read(237,*)n write(*,*)n ! Inicializar con valores cero allocate(A(n,n+1),X(n),av(n),aux(n,n+1)) A = 0.0 av = 0.0 ! Lectura de las matrices: do i=1,n read(237,*)(A(i,j),j=1,n+1) write(*,*)(A(i,j),j=1,n+1) enddo ! Proceso de eliminacion gaussiana: do k=1,n-1 do i=k+1,n av(i)= A(i,k)/A(k,k) enddo do i=k+1,n do j=1,n+1 A(i,j) = A(i,j) - av(i)*A(k,j) enddo enddo enddo write(*,*)"--------------------------" write(*,*)"--------------------------" av=0.0 !se rota la matriz do i=1,n do j=1,n+1 aux(i,j)=A(i,j) enddo enddo do i=1,n

k= n+1-i do j=1,n+1 A(i,j)=aux(k,j) enddo enddo do i=1,n do j=1,n+1 aux(i,j)=A(i,j) enddo enddo do i=1,n do j=1,n l=n+1-j A(i,j)=aux(i,l) enddo enddo ! A la matriz rotada se le aplica otra vez el Proceso de eliminacion gaussiana: do k=1,n-1 do i=k+1,n av(i)= A(i,k)/A(k,k) enddo do i=k+1,n do j=1,n+1 A(i,j) = A(i,j) - av(i)*A(k,j) enddo enddo enddo !se vuelve a rotar la matriz do i=1,n do j=1,n+1 aux(i,j)=A(i,j) enddo enddo do i=1,n k= n+1-i do j=1,n+1 A(i,j)=aux(k,j) enddo

enddo do i=1,n do j=1,n+1 aux(i,j)=A(i,j) enddo enddo do i=1,n do j=1,n l=n+1-j A(i,j)=aux(i,l) enddo enddo !se divide la matriz entre los elementos pivote do i=1,n av(i)=A(i,i) enddo do i=1,n do j=1,n+1 A(i,j)=A(i,j)/av(i) enddo enddo !Matriz final write(*,*)"La matriz diagonalizada es" do i=1, n write(*,*)(A(i,j),j=1,n+1) enddo write(*,*)"Las soluciones son:" ! Escribimos la "matriz" solucion en archivo llamado matrizX.dat: write(637,*)"las soluciones son:" write(637,*)n do i=1,n write(637,*)"x",i,A(i,n+1) write(*,*)"x",i,A(i,n+1) enddo end program gaussJordan

Discusin y comentarios Dicho programa es til en la resolucin de sistemas de ecuaciones, ya que ofrece una solucin general. Como comentario, se necesitara explorar en los diversos tipos de casos con los que uno se encuentra al resolver matrices, uno en particular que llama la atencin es, que el programa no ofrece resultados correctos si no consideramos que el elemento crr es distinto de 0, ya que en la parte de la eliminacin de vectores se cometera un error en el algoritmo, luego entonces una solucin viable seria revisar que el elemento crr sea distinto de 0 y en caso contrario, hacer un intercambio de filas hasta encontrar dicho elemento diferente a 0 y seguir con el algoritmo anterior. Aplicaciones Las aplicaciones del mtodo de Gauss-Jordan para matrices, son tan diversas como los experimentos o fenmenos que conlleven a un sistema de ecuaciones. Aqu se analizara uno, la resolucin de un circuito elctrico, con las leyes de Kirchoff

Resolveremos el siguiente ejemplo

Obteniendo asi la matriz aumentada, (que se resolvio en el programa del cdigo fuente) i1 i2 i3 1 -1 -1 0 5 0 5 10 0 10 -5 16 Obteniendo los siguientes resultados i1 = 1.84 i2 = 1.68 i3 = 0.16

You might also like