Está en la página 1de 8

ALGORITMO DE GAUSS CON PIVOTE PARCIAL

Expositores Luis enrique Hernandez Mendez

PLANTEAMIENTO DEL PROBLEMA


ALGORITMO DE GAUSS CON PIVOTE PARCIAL Analice el programa gauss_piv_fic.m y complete las instrucciones que faltan en el Algoritmo 1 dado abajo. Tales instrucciones estn resaltadas con el smbolo Complete! Tambin hay preguntas que requieren un desarrollo particular, las cuales estn formuladas en las lneas No. 12, 20 y 23. Algoritmo de Eliminacin Gaussiana con Pivoteo Parcial Inputs: Matriz de coeficientes y vector lado derecho ANxN; bNx1, respectivamente, no vacos. N es un entero que determina el tamao del sistema de ecuaciones. Outputs: Solucin aproximada XNx1 o un mensaje de fracaso en determinar un pivote no-nulo.

1.

for p = 1 : N - 1 {Recorre las filas pivotes} do

2.
3. 4. 5. 6. 7.

Elegir el rengln pivote i siendo el entero ms pequeo con p i N.


Complete! if Complete! {Pivote igual a cero} then print No encuentra un Pivote 0, PARE end if if i ~= p, intercambia los renglones p i tanto en A como b then

8.
9. 10. 11. 12.

Complete!
end if for k = p + 1 : N do mult = A(k; p)=A(p; p) {Determinar el multiplicador} A(k : p + 1) = A(k : p + 1) - mult * Complete! {Esta instruccin es vectorial o escalar?, la opcin contraria como se programara?}

13.
14. 15. 16. 17. 18. 19. 20. 21. 22. 23.

Complete!
end for end for if A( Complete! ) == Complete! then Complete! end if {Sustitucin regresiva} X=zeros( Complete! ) {Porque se requiere esta instruccin que garantizara que funcione la lnea 23?} X(N)=b(N)/A(N,N) for k= Complete! do X(k) = (b(k)-[A(k,k+1:N)*x(k+1:N)])/A(k,k) {La operacin entre corchetes es vectorial o escalar?, la opcin contraria como se programara?} end for return X {Solucin aproximada X}

24. 25.

SOLUCIN DEL PROBLEMA


Lnea 3: [xmax,i]=max(abs(A(p:N,p))); i=i+p-1; La primera lnea encuentra el nmero mayor entre los nmeros dados y devuelve el mayor el cual es almacenado en xmax, y en i se almacena la posicin del nmero, tnganse en cuenta que la posicin depender de la secuencia en la cual se le ha dado los nmeros a la funcin max. Debido a que i contiene la posicin del nmero mayor con respecto a los nmeros dados a la funcin y a que a partir de la segunda vuelta esta posicin es incongruente con la posicin del valor en la matriz, por ello se incrementa la posicin del mayor numero encontrado para que la posicin se corresponda con la de la matriz.

Lnea 4: if xmax==0 Esta lnea es la encargada de que todos los valores entregados sea diferentes de cero (0) de lo contrario se puede decir que el sistema tiene ms de una solucin. Lnea 8: A([p i],:)=A([i p],:); B([p i])=B([i p]);

Con estas lneas se selecciona todas las filas i y p de la matriz A y del vector B y se intercambian.

Lnea 12: A(k, p+1:N) = A(k, p+1:N) - mult * A(p, p+1:N); Esta es la lnea completa del cdigo, el cual realiza la operacin de modo vectorial. Esta lnea se puede remplazar por las siguientes las cuales realizan la misma operacin pero con escalar: for d=p+1:N A(k,d) = A(k, d) - mult * A(p, d); end Lneas 16 y 17: if A(N,N) == 0 then print No encuentra un Pivote 0, PARE

Esta lnea verifica que el valor de la ltima posicin de la matriz no sea igual a cero (0) de lo contrario se puede decir que el sistema tiene ms de una solucin.

Lnea 20: x=zeros(N,1); Este cdigo crea un vector x de N posiciones llena con ceros (0). Este cdigo es importante debido a que los valores de las variables se guardaran en este vector. Lnea 22: for k=(N-1):-1:1 Este es el cdigo completo. Aqu se puede ver las limitantes del for. Lnea 23: La operacin en el corchete es una operacin netamente vectorial. La lnea 23 se puede remplazar por las siguientes lneas: w=0; for d=k+1:N w=w+A(k,d)*x(d); end x(k)=(b(k)-w)/A(k,k);

CODIGO PARA MATLAB


for p=1:N-1 [xmax,i]=max(abs(A(p:N,p))); i=i+p-1; if xmax==0 disp('No encuentra un Pivote =~0') X=[]; return end if i~=p A([p i],:)=A([i p],:); B([p i])=B([i p]); end for k = p+1:N mult = A(k, p) / A(p, p); A(k, p+1:N) = A(k, p+1:N) - mult * A(p, p+1:N); %for d=p+1:N % A(k,d) = A(k, d) - mult * A(p, d); %end B(k)=B(k)-mult * B(p); end end if A(N, N)==0 disp('No encuentra un Pivote =~0') X=[]; return end x=zeros(N,1); x(N)=B(N)/A(N,N); for k=(N-1):-1:1 x(k)=(B(k)-[A(k,k+1:N)*x(k+1:N)])/A(k,k); %w=0; %for d=k+1:N % w=w+A(k,d)*x(d); %end %x(k)=(b(k)-w)/A(k,k); end return

También podría gustarte