domingo, 22 de julio de 2012

Metodo de Gauss- Jordan

fprintf('\n\n\n\t\t********************************************************************************\n')
fprintf('\t\t*   Este metodo es similar al de la eliminacion gaussiana, pero la             *\n')
fprintf('\t\t*   caracteristica importante de este metodo es que a diferencia de obtener    *\n')
fprintf('\t\t*   el valor de las variables del sistema en forma regresiva, aqui se los      *\n')
fprintf('\t\t*   obtiene directamente de reducir por filas la matriz aumentada A|B          *\n')
fprintf('\t\t********************************************************************************\n\n')


fprintf('\n\t\t********************************************************************************\n')
fprintf('\t\t*    Antes de empezar a ejecutar el algoritmo de Gauss-Jordan en el sistema,   *\n')
fprintf('\t\t*    por favor escoja una opcion de presentacion de datos....                  *\n')
fprintf('\t\t********************************************************************************\n\n\n')

fprintf('\t\t\t\t1. Format short; coma fija con 4 decimales (defecto)\n');
fprintf('\t\t\t\t2. Format long; coma fija con 15 decimales\n');
fprintf('\t\t\t\t3. Format short e;  notación científica con 4 decimales\n');
fprintf('\t\t\t\t4. Format long e;  notación científica con 15 decimales\n');
fprintf('\t\t\t\t5. Format rat;  expresa los números racionales como cocientes de enteros\n');



fprintf('\n\t\tIngrese una opcion por favor;\n');
onn=input('                Opcion #   ');
if (onn~=1&onn~=2&onn~=3&onn~=4&onn~=5)
    fprintf('\n\t\t\t\tIngrese una opcion valida...por favor, \n\n')
    fprintf('\n\t\t\t\tse iniciara con format short(por defecto) \n\n')
end

switch (onn) 
    
        case 1, 
            format short
            fprintf('\n\t\tLa presentacion de datos se va a iniciar segun\n ')
            fprintf('\n\t\tFormat short; coma fija con 4 decimales (defecto)\n')
        case 2, 
            format long
            fprintf('\n\t\tLa presentacion de datos se va a iniciar segun\n ')
            fprintf('\n\t\tFormat long; coma fija con 15 decimales\n')
        case 3, 
            format short e
            fprintf('\n\t\tLa presentacion de datos se va a iniciar segun\n ')
            fprintf('\n\t\tFormat short e;  notación científica con 4 decimales\n')
        case 4,
            format long e
            fprintf('\n\t\tLa presentacion de datos se va a iniciar segun\n ')
            fprintf('\n\t\tFormat long e;  notación científica con 15 decimales\n')
        case 5, 
            format rat
            fprintf('\n\t\tLa presentacion de datos se va a iniciar segun\n ')
            fprintf('\n\t\tFormat rat;  expresa los números racionales como cocientes de enteros\n')
end


fprintf('\n\t\tPresione una tecla para continuar por favor...\n ')
pause
clc
fprintf('\n\t\t\tIngrese la matriz de coeficientes  por favor\n\n')
fprintf('\t\t********************************************************************************\n')
fprintf('\t\t*                       POR EJEMPLO [4 1 2;2 4 -1;1 1 -3]                      *\n')
fprintf('\t\t********************************************************************************\n\n')

aa=input('                      ');

fprintf('\n\t\t\tIngrese matriz columna de terminos independientes  por favor\n\n')
fprintf('\t\t********************************************************************************\n')
fprintf('\t\t*                              POR EJEMPLO [9;-5;-9]                           *\n')
fprintf('\t\t********************************************************************************\n\n')
bb=input('                      ');

A=[aa,bb];
fprintf('\n\t\t\t\t\tLa matriz aumentada A|B del sistema es;\n')
A
fprintf('\n\n\t\t\t\tPresione una tecla para continuar por favor...'), pause
[m,n] = size(A);
i = 1;
j = 1;
k = 0;
tol = max([m,n])*eps*norm(A,'inf'); 
while (i <= m) & (j <= n)
   [p,k] = max(abs(A(i:m,j))); k = k+i-1;
   if (p <= tol)
      fprintf(['\n\n\t\t\t\t  Columna ' int2str(j) ' es insignificante'])
      A(i:m,j) = zeros(m-i+1,1)
      fprintf('\n\n\t\t\t\tPresione una tecla para continuar por favor...\n')
      pause
      j = j + 1;
   else
      if i ~= k
         % Cambiar las i-esimas y las k-esimas filas.
         fprintf(['\n\n\t\t\t\tCambiar filas ' int2str(i) ' y ' int2str(k) blanks(10)])
         fprintf('\n\n')
         A([i k],:) = A([k i],:)
         fprintf('\n\n\t\t\t\tPresione una tecla para continuar por favor...\n')
         pause
      end
      % Normaliza la i-esima fila%
      fprintf('\n\n\t\t\t\tEliminando columna %d\n',j)
      fprintf(['\n\t\t\t\ta partir de la referencia en A(' int2str(i) ',' int2str(j) ')' blanks(10)])
      fprintf('\n\n\t\t\t\tA(%d,%d)/%0.5f\n',i,j,A(i,j))
      A(i,j:n) = A(i,j:n)/A(i,j)
      fprintf('\n\t\t\t\tPresione una tecla para continuar por favor...\n')
      pause
      %Ejecuta la eliminacion de la j-esima columna a partir de la i-esima
      %fila%
      fprintf(['\n\n\t\t\t\tEliminando la columna ' int2str(j) blanks(10)])
      fprintf('\n')
      A
      fprintf('\n\n\t\t\t\tPresione una tecla para continuar por favor...\n')
      pause
      for k = 1:m
         if k ~= i
            fprintf('\n')
            fprintf('\n\n\tFila[%d]=Fila[%d] - (A[%d,%d]/A[%d,%d])*Fila[%d]\n',k,k,k,j,i,j,j)
            pause
            A(k,j:n) = A(k,j:n) - A(k,j)*A(i,j:n)
         end
      end
      fprintf('\n\n\t\t\t\tPresione una tecla para continuar por favor...\n')
      pause
      i = i + 1;
      j = j + 1;
   end
end

   fprintf('\n\n\t\t\t\tEntonces los valores de  las incognitas son;\n')
      for k = 1:m
            fprintf('\n\n\tx(%d)=%d\n',k,A(k,n))
            pause

1 comentario: