You are on page 1of 19

Jorge Celis Oriolson Rodriguez Oscar Alberto Estevez Octavio Bonnet

Contenido
1) 2) 3) 4) 5) 6) Introducción Eliminación Gaussiana Algoritmo Matemático Ejemplo Diagrama de flujo Código de programación: 
Fortran  JAVA

Introduccion
‡ La eliminación Gaussiana, también llamado como eliminación de Gauss o eliminación de Gauss-Jordan, llamadas así debido a Carl Friedrich Gauss y Wilhelm Jordan. Aunque el método fue presentado por Gauss se conocía anteriormente en un importante libro matemático chino llamado Jiuzhang suanshu o Nueve capítulos del arte matemático.

Eliminación Gaussiana
‡ ‡ La eliminación Gaussiana es un algoritmo del álgebra lineal para determinar las soluciones de un sistema de ecuaciones lineales, encontrar matrices e inversas. La complejidad computacional de la eliminación gaussiana es aproximadamente n3. Esto es, el número de operaciones requeridas es n3 si el tamaño de la matriz es n × n

Sistema de ecuaciones linéales

Matriz aumentada resultante

a12 x1  a13 x 2  .....  a1 n x n ! b1 a 21 x1  a 22 x 2  .....  a 2 n x n ! b 2 / a m 1 x1  a m 2 x 2  .....  a mn x n ! b m

_ x 1 x 2 ........ x n ¨ a11 a12 ........ a1 n © © a 21 a 22 ........ a 2 n ©/ © © a a ....... a mn ª m1 m 2 ¸ ¨ b1 ¹© ¹ © b2 ¹© / ¹© ¹© b ºª m ¸ ¹ ¹ ¹ ¹ ¹ º

Algoritmo Matemático
1. Ir a la columna no cero extrema izquierda

2. Si

Si el primer renglón tiene un cero en esta columna, intercambiarlo con otro que no lo tenga

a11 ! 0 , › , a12 ! 0   

¨ a12 a11 ........ a1 n © © a 22 a 21 ........ a 2 n ©/ © © a a ....... a mn ª m 2 m1

¸ ¨ b1 ¹© ¹ © b2 ¹© / ¹© ¹© b ºª m

¸ ¹ ¹ ¹ ¹ ¹ º

3. Luego, obtener ceros debajo de este elemento delantero, sumando múltiplos adecuados del renglón superior a los renglones debajo de él. Este proceso se realiza por medio de las siguientes operaciones: ‡ Multiplicar una ecuación por un escalar no nulo. ‡ Intercambiar de posición dos ecuaciones ‡ Sumar a una ecuación un múltiplo de otra.

¨ a11 a12 ........ a1 n © © a 21 a 22 ........ a 2 n ©/ © © a a ....... a mn ª m1 m 2

¸ ¨ b1 ¹© ¹© b2 ¹© / ¹© ¹© b ºª m

a1 n ¨ a12 ........ ©1 ¸ a11 ¹ © a11 1 ¹ )   © a 21 a 22 ........ a 2 n @ F1* ( ¹ © a11 ¹ ©/ ¹ º © a a ....... a mn ª m1 m 2

¸ ¨ b1 ¹© ¹ © a11 ¹© b ¹© 2 ¹© / ¹© b ºª m

¸ ¹ ¹ ¹ ¹ ¹ ¹ º

a ¨ a12 ........ 1 n ©1 a11 © a11 © a a ........ a 2n © 21 22 ©/ © a a ....... a mn ª m1 m 2

¸ ¨ b1 ¹© ¹ © a11 ¹© b ¹© 2 ¹© / ¹© b ºª m

¸ ¹ ¹ ¹ ¹ ¹ ¹ º

2

1 * a 21

a ¨ a12 ........ 1 n ©1 a11 © a11   © 0 a 22 ........ a 2 n © ©/ © a a ....... a mn ª m1 m 2

¨ ¸© ¹© ¹© ¹© b2 ¹© ¹© ¹© º© ª

b1 a11

¸ ¹ ¹ b1 ¹  ¹ a11 ¹ ¹ / ¹ bm ¹ º

4. Cubrir el renglón superior y repetir el proceso anterior con la submatriz restante. Repetir con el resto de los renglones (en este punto la matriz se encuentra en la forma de escalón)

¨ 1 .. a12 ... a13 ... a1 n ¸ ¹ © © 0 ... 1 .... a13 .... a 2 n ¹ © 0 .... 0 .... 1 ... a ¹ 3n ¹ © ¹ © / ¹ © 0 ........ 0 ....... 1 º ª

5.

Comenzando con el último renglón no cero, avanzar hacia arriba: para cada renglón obtener un 1 delantero e introducir ceros arriba de este sumando múltiplos correspondientes a los renglones correspondientes

¨ 1 .. a12 ... a13 ... a1 n ¸ ¹ © © 0 ... 1 .... a13 .... a 2 n ¹ © 0 .... 0 .... 1 ... a ¹ 3n ¹ © ¹ © / ¹ © 0 ........ 0 ....... 1 º ª

¨ 1 ... a12 ... a13 ... a1 n ¸ ¹ © © 0 ... 1 .... a 23 .... a 2 n ¹ ( n  1)  n * ( a 3 n )   © 0 .... 0 .... 1 ... 0 ¹ ¹ © ¹ © / ¹ © 0 ........ 0 ....... 1 º ª 

Repetimos este procedimiento hasta llegar a una matriz escalonada reducida.

6.

Luego obtenemos las soluciones del sistema de ecuaciones

¨ x1 ... 0 .... 0 ... 0 ¸ ¨ b1 ¸ ¹© ¹ © © 0 ... x 2 .... 0 .... 0 ¹ © b 2 ¹ © 0 .... 0 .... x 3 ... 0 ¹ © b 3 ¹ ¹© ¹ © / ¹© / ¹ © © 0 ........ 0 ....... xn ¹ © bn ¹ ºª º ª
Luego, la solución es:

x1 ! b1 x2 ! b2 / xn ! bn

Ejemplo
‡ Supongamos que es necesario encontrar los números x, y, z, que satisfacen simultáneamente estas ecuaciones:

2x  y  z ! 8  3 x  y  2 z ! 11  2 x  y  2 z ! 3

‡

Del anterior sistema de ecuaciones resulta, la siguiente matriz aumentada:

¨2 © © 3 © 2 ª

1 1 1

1 2 2

¨ 1 1/2 1/2 4 ¸ 8¸ © ¹ ¹@F *(1)   ©3 1 2 11 ¹ 1 11 ¹ 2 ©2 1 2 3¹ ª º ¹ 3º ¨1 1/2 © ©0 1/2 ©0 2 ª 1/2 4¸ ¹ 1/2 1¹ 1 5¹ º

@

3F F   1 2 2F1F3

@F *2  2

¨1 1/2 © ©0 1 ©0 2 ª

1/2 4¸ ¹ 1 2¹ ¹ 1 5º

@ 

(1/ 2)F F   2 1 2F2F3

¨1 0 1 3¸ © ¹ ©0 1 1 2¹ ©0 0 1 1¹ ª º

@

X ¨1 F F 3 2 © F F   ©0 3 1 ©0 ª F *1 3

Y Z 0 0 2¸ ¹ 1 0 3¹ 0 1 1¹ º

Luego la solución de este sistema de ecuaciones es:

x ! 2; y ! 3; z ! 1

Diagrama de Flujo
INICIO

i
i=1,n,1

1

j

j=1,n,1

a11 a12 a21 a22 / / an1 an 2 -

a1n a2 n / ann

f1 f2 / fn

M(j,i)

F(i)

M nxn

fj

1
k
i=1,n,1

2
j

i

j=1,n,1

si
k=i,n,1

i=j

no
k=i,n,1

1 a12 0 1 / 0 / 0 -

a1n a2 n / 1

M(j,k)=M(j,k)/M (j,i)

M(j,k)=M(j,k)M(j,i)*M(i,k)

F(i)=F(i)/M(j,i)

F(j)=F(j)M(j,i)*F(i)

2
i
i=n,1,-1

x1
F(j)=F(j)M(j,i)*F(i)

j=i-1,1,-1

k=i,n,1 M(j,k)=M(j,k)M(j,i)*M(i,k)

x2 1 0 0 1 / 0 -

xn 0

0
/ 1
k

f1 f2 / fn

/ j 0

i=1,n,1

µX¶(i)=F(i)

FIN

Código
‡ Fortran: program gauss_Jordan integer::i,j,n,k real::a real,allocatable::m(:,:) real,allocatable::f(:) read(*,*)n allocate(m(n,n),f(n)) do i=1,n,1 read(*,*)f(i) end do do i=1,n,1 read(*,*)m(i,1:n) end do do i=1,n,1 do j=1,n,1 if(i==j)then a=m(j,i) do k=i,n,1 m(j,k)=(m(j,k))/(a) end do f(i)=(f(i))/(a) else a=m(j,i) do k=i,n,1 m(j,k)=m(j,k)-a*m(i,k) end do f(j)=f(j)-a*f(i) end if end do end do do i=n,1,-1 do j=i-1,1,-1 a=m(j,i) do k=j,n,1 m(j,k)=m(j,k)-a*m(i,k) end do f(j)=f(j)-a*f(i) end do end do do i=1,n,1 write(*,*)¶x¶,(i),¶=µ,f(i) end do write(*,*)'bn' write(*,*)m close(25) end program gauss

‡JAVA:
package javaapplication1; import javax.swing.JOptionPane; import java.util.Scanner; public class Gauss_Jordan { public static void main(String[] args) { int i,j,k,n; double a; double m[][],f[]; Scanner reader=new Scanner(System.in); System.out.println("escriba n"); n=reader.nextInt(); m=new double [n][n]; f=new double [n]; for(i=0;i<n;i++){ f[i]=Double.parseDouble(JOptionPane.showInputDialog("f"+i)); for(j=0;j<n;j++){ m[i][j]=Double.parseDouble(JOptionPane.showInputDialog("M("+i+j+")"));}} for(i=0;i<n;i++){ for(j=0;j<n;j++){ a=m[j][i];

if(i==j){ for(k=i;k<=n;k++){ m[j][k]=(m[j][k]/a);} f[i]=(f[i]/a);} else { for(k=i;k<=n;k++){ m[j][k]=m[j][k]-a*m[i][k];} f[j]=f[j]-a*f[i];}}} for(i=n;i>=0;i--){ for(j=i-1;j>=0;j--){ a=m[j][i]; for(k=j;k<=n;k++){ m[j][k]=m[j][k]-a*m[i][k];} f[j]=f[j]-a*f[i];}} for(i=0;i<n;i++){ System.out.println("x"+i+"="+f[i]);}}}