Está en la página 1de 3

ELIMINACIÓN GAUSSIANA CON PIVOTEO PARCIAL

function [ret] = Pivoteo_Parcial1(A,b)

disp('Metodo de Eliminacion Gaussiana con Pivoteo Parcial');

%A=input('Ingrese la matriz A en []: ');

%b=input('Ingrese el vector b en []: ');

Ab = 0;

Ab = [A b]; %Matriz aumentada

[m,n]=size(Ab);

for c=1:m-1

p=c; %se hace la fila c como la fila donde esta el mas grande de la columna

big=abs(Ab(c,c)); %se hace el elemento de la diagonal como el mas grande de la columna

fprintf(' \nEtapa %g \n',c)

for f=c+1:m % se compara el elemento de la diag con los otros de la columna

aux=abs(Ab(f,c)); %se almacena en una variable auxiliar el valor absoluto


de las demas filas

if aux>big %si auxiliar es mayor que el elemento de la diagonal


entonces este es el mas grande

big=aux;

p=f; %se almacena la fila del auxil

end

end

if p~=c % se mira si el mayor esta en la diagonal

for h=c:m+1

aux=Ab(c,h); % se mueve toda la fila a la fila de la diagonal


Ab(c,h)=Ab(p,h);

Ab(p,h)=aux;

end

end

for f=c+1:m % se va a llevar la matriz a triang superior

if Ab(c,c)~=0

mult=Ab(f,c)/Ab(c,c);

else

disp('No se puede continuar debido a Division por cero')

end

for j=c:m+1

Ab(f,j)=Ab(f,j)-mult*Ab(c,j);

end

Ab

end

end

fprintf('\nMatriz triangular superior:\n\n')

disp(Ab)

%Sustitucion regresiva

for j=m:-1:1 % Un for j desde el tamaño de la matriz (m) con incremento


de -1 hasta 1 (PARA UNA SUSTITUCION REGRESIVA).

sum=0; % Contador de suma


for i=j+1:1:m

sum=sum+Ab(j,i)*X(i,1);

end

if Ab(j,j)~=0; % Controla si existe una division por cero

X(j,1)=(Ab(j,m+1)-sum)/Ab(j,j); % Calcula los valores de las (x) por medio de una sustitucion
regresiva (SOLUCION DEL SISTEMA)

else

disp('Division por cero')

end

end

disp('El vector solucion x es: ')

disp(X)

También podría gustarte