Vous êtes sur la page 1sur 5

ELIMINACIN GAUSSIANA CON PIVOTEO TOTAL

function [ret] = Eliminacion_Gaussiana_P_T(A,b)

disp('ELIMINACION GAUSSIANA CON PIVOTEO TOTAL: ');


%Muestra
mayor ecxatitud y muestra la matriz aumentada

una

respuesta
Tamao

de

con

[n,m]=size(A);
matriz A

la

Ab=[A b];
[Ab].

% Matriz aumentada

fprintf('La Matriz aumentada es:\n ');


disp(Ab)
aumentada

% Muestra la matriz

if n==m
cuadrada

si

la

matriz

es

for i=1:n
marca(i)=i;
posiciones de las variables x en cada cambio

%Almacena

end
for k=1:(n-1)
fprintf('\n ETAPA %g= ',k)
mayor=0;
fila igual a cero

%Hace el mayor de la

filam=k;
numero mayor

%La fila k contiene el

columnam=k;
%Hace
columna k como la que tiene el numero mayor de toda la matriz
for p=k:n

la

for r=k:n
if mayor<abs(Ab(p,r))
mayor por toda la matriz

%Se busca el numero

mayor=abs(Ab(p,r));
mayor el numero encontrado

%Hace

filam=p;
numero mayor

%cambio de fila del

columnam=r;
del numero mayor

%cambio de columna

como

el

end
end
end
if mayor ==0
fprintf(' El sistema tiene infinitas soluciones ')
break
programa con la instruccion break, ya que

%se
%si

interrumpe
mayor=0,

el
mas

adelante se obtiene una division por cero.


else
if filam ~= k

%si el mayor no esta en la fila k

for j=1:(n+1)
aux=Ab(k,j);
variable auxiliar para intercambio de fila

%Se

utiliza

Ab(k,j)=Ab(filam,j);
Ab(filam,j)=aux;
end
end
if columnam ~= k

%si el mayor no esta en la columna k

una

for i=1:n
aux=Ab(i,k);
variable auxiliar para intercambio de columna

%Se

utiliza

una

%Se

utiliza

una

%Formula

para

Ab(i,k)=Ab(i,columnam);
Ab(i,columnam)=aux;
end
aux = marca(k);
variable auxiliar para intercambio de variables
marca(k)= marca(columnam);
marca(columnam)=aux;
end
end
fprintf('Matriz correspondiente a la etapa:\n');

disp(Ab)
fprintf('\nMultiplicadores:\n');
for i=(k+1):n
mult(i,k)=Ab(i,k)/Ab(k,k);
%Multiplicadores de cada etapa
fprintf('mult(%g,%g)=',i,k)
disp(mult(i,k));
for j=k:(n+1)
Ab(i,j)= Ab(i,j) - mult(i,k)*Ab(k,j);
convertir fila
end
end
fprintf('\nLa matriz correspondiente a esta etapa es:\n ')
disp(Ab)

end
fprintf('\nVector final de marcas:\n ')
marca(columnam)=aux
%Sustitucion regresiva
for i=n:-1:1
suma=0;
for p=(i+1):n
suma = suma + Ab(i,p)*X(p);
end
X(i)=(Ab(i,n+1)-suma)/Ab(i,i);

end
%la siguiente parte del programa ordena las varibles, tomando en
%cuenta la marca final y los retoma con su coeficiente a la marca
%inicial
for i=1:n
for j=1:n
if marca(j)==i
k=j;
end
end
aux=X(k);
%para
intercambiar las variables, se utiliza una variable auxiliar.

poder

X(k)=X(i);
X(i)=aux;
aux=marca(k);
%para
intercambiar las variables, se utiliza una variable auxiliar.

poder

marca(k)=marca(i);
marca(i)=aux;
end
else
matriz no sea cuadrada

%En caso de que la

fprintf('No se puede realizar debido a que la matriz no es cuadrada ');


end
fprintf(' SOLUCION: ');
fprintf('\nLa matriz final es:\n ');
Ab
fprintf('\nLa solucion del sistema es:\n ');

%Muestra los resultados


for i=1:n
Xi=X(1,i);
fprintf('\n X%g= ',i)
disp(Xi);
end