Wednesday, September 21, 2005

Eliminacion Gaussiana sin pivoteo

Saludos, aquí quería compartir con aquellos de ustedes que se interesan por el algebra lineal, un código que escribí en Matlab ver.7 que resuelve sistemas lineales de la forma Ax = b, donde A es una matriz cudrada con coeficientes en R.


Implementación de funcion sumatoria

function [suma] = Sumatoria(from,to, A, x, i)

suma = 0;

for k=from:to
suma = suma + A(i,k)*x(k,1);
end

return
*********************************************

Implementación de “Backward substitution”

function [flag,x] = solve_UTS(A,b)
[x_rows,x_cols] = size(b);
[A_rows,A_cols] = size(A);
flag =0; %Inica que no ha ocurrido ningun error
x = zeros(x_rows,x_cols);

for i=x_rows:-1:1
if abs(A(i,i)) flag = 1; %Indica que el sistema no tiene solucion mediante este metodo
break;
end
x(i,1) = (b(i,1)-Sumatoria(i+1,A_cols,A,x,i))/A(i,i);
end
return

******************************************************
Implementación de un solucionador de sistemas lineales de la forma Ax = b utilizando el método de eliminación Gaussiana sin pivoteo.

function [flag,x] = GE(A,b)

%Para trabajar con la matriz aumentada
A(:,end+1) = b(:,1);
flag =0; %Indica que no ha ocurrido ningun error
col=1; %Columna en que se comenzara
row=1; %fila en la que se comenzara
deltaRow=1; %Distancia entre filas
[b_rowCant,b_colCant] = size(b); %tamano de b
[A_rowCant,A_colCant] = size(A); %tamano de A
nextRow = row+deltaRow;

tic;
for col=1:(A_colCant-1)
for rowIndex=1:(A_rowCant-row)
if abs(A(row,col)) flag = 1; %Indica que el sistema no puede ser resuelto por este metodo
return;
end
A(nextRow,:) = A(row,:)*(-A(nextRow,col)/A(row,col))+A(nextRow,:);
nextRow = nextRow + 1;
end
row = row+1;
col = col+1;
nextRow = row+deltaRow;
end

%Para regresar al sistema original
b = A(:,end);
A(:,end) = [];
[UTS_flag,x] = solve_UTS(A,b);
toc;
return


Listo, interesante verdad pero muy ineficiente, este metodo el costo de llevar a cabo este metodo esta en el orden de n cubo.

0 Comments:

Post a Comment

<< Home




MP3 Player Turtorial