1 / 11

GAUSS COM PIVOTEAMENTO

GAUSS COM PIVOTEAMENTO. CÓDIGO EM PASCAL. Program GaussPivoteamento ; {$APPTYPE CONSOLE} Uses {Esta sessão pertence ao Delphi} SysUtils ; var //declaração de variáveis i, j, k, z, n, cont , comp , c: integer ; // n é a ordem da matriz quadrada A

mab
Télécharger la présentation

GAUSS COM PIVOTEAMENTO

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. GAUSS COM PIVOTEAMENTO

  2. CÓDIGO EM PASCAL ProgramGaussPivoteamento; {$APPTYPE CONSOLE} Uses {Esta sessão pertence ao Delphi} SysUtils; var //declaração de variáveis i, j, k, z, n, cont, comp, c: integer; // n é a ordem da matriz quadrada A A: array[1..50, 1..50] of real; // matriz A a ser usada no método de Gauss com pivoteamento parcial b, x: array[1..50] of real; // vetor b do sistema linear (Ax=b) aux, pivo, primeiro, q, blinha: real;

  3. CÓDIGO EM PASCAL Begin {inicia-se aqui o bloco de programação} writeln('Entre com a ordem da matriz A: ');{este comando escreve uma mensagem na tela} readln(n); // armazena em n a ordem da matriz quadrada A{este comando lê uma entrada do teclado} for i:=1 to n do // percorre as linhas de i até n que foi dada acima este é o o primeiro laço begin for j:=1 to n do //percorre as colunas de j até n este é o segundo laço e deve ser terminado primeiro begin writeln('Entre com A', i, j, ': '); escreve a posição i e j e espera que ela seja dada por uma entrada de teclado readln(A[i,j]); // lê um elemento por vez end;fim do laço dentro de j end;fim do laço dentro de i for i:=1 to n do // percorre as linhas do vetor b begin writeln('Entre com B', i, ': '); readln(b[i]); // lê um elemento por vez end;

  4. CÓDIGO EM PASCAL for i:=1 to n do // imprime a matriz A antes do processo para que se possa visualizar as posições de cada termo na forma de matriz este é o laço de impressão das linhas “ i ” begininicio do laço “ i ” for j:=1 to n do laço para as colunas begininicio do laço write(A[i,j],' '); escreve a matriz A na forma de entrada end; fim do laço de j writeln(''); salta uma linha end; fim do laço de i writeln(''); for i:=1 to n do // imprime o vetor b antes do processo begin writeln(b[i]); escreve o vetor b end; writeln(''); writeln('');

  5. CÓDIGO EM PASCAL j:=1; começam aqui as analises while(j<n) do enquanto j for menor que n faça begin i:=1; while(i<=(n-j)) do begin if( abs(A[j+i,j])>abs(A[j,j]) )then// [j,j] é a posição onde ficará o pivô, se o elemento da mesma coluna e de uma linha abaixo for maior em módulo então begin k:=j; while(k<=n) do // troca-se a linha inteira begin aux:=A[j+i,k]; // aux: variável para auxiliar a troca dos valores posição por posição A[j+i,k]:=A[j,k]; A[j,k]:=aux; k:=k+1; // incrementa k, k percorre as colunas de A nas linhas envolvidas no processo de troca end; aux:=b[j+i]; // troca as linhas correspondentes no vetor b b[j+i]:=b[j]; b[j]:=aux; end;

  6. CÓDIGO EM PASCAL pivo:=A[j,j]; // depois da troca temos o pivô (maior elemento) no local correto [j,j] (diagonal) primeiro:=A[j+i,j]; // primeiro elemento da coluna do pivô (j) e da linha i+j if(pivo<>0) then// se o pivo for diferente de zero begin b[j+i]:=b[j+i] - (primeiro/pivo)*b[j]; // subtrai (fator)*b[j] do elemento de b na posição i+j z:=j; while(z<=n) do // produz zeros abaixo do pivô begin A[j+i,z]:=A[j+i,z]-(primeiro/pivo)*A[j,z]; // quando z=j, A[j,j] é o pivô e então A[j+i,j]=A[j+i,j]-A[j+i,j]=0 z:=z+1; end; end; i:=i+1; end; j:=j+1; end;

  7. CÓDIGO EM PASCAL for i:=1 to n do // imprime a matriz A depois do processo terminado begin for j:=1 to n do begin write(A[i,j],' '); end; writeln(''); end; writeln(''); for i:=1 to n do // imprime o vetor b depois do processo terminado begin writeln(b[i]); end;

  8. CÓDIGO EM PASCAL //calcula o vetor solução x do sistema linear Ax=b cont:=0; // contará o numero de elementos (na posição pivô) nulos j:=n; if(A[j,j]<>0) then// verifica se o ultimo pivô não é nulo begin x[j]:=b[j]/A[j,j]; // calcula o ultimo elemento do vetor solução end else begin cont:=cont+1; // conta um pivô nulo blinha:=b[j]; // blinha é o b[j] da linha correspondente ao pivô nulo for c:=1 to (n-1) do begin blinha:=blinha-(A[j,c]*x[c]); end; if(blinha=0)then //se blinha é zero begin comp:=1; // sistema compativel e indeterminado endelsecomp:=2; // senão incompativel end;

  9. CÓDIGO EM PASCAL j:=j-1; while(j>=1) do // faz o mesmo para os pivôs das outras linhas begin if(A[j,j]<>0) then begin i:=n; x[j]:=b[j]; while(i>j) do begin x[j]:=x[j]-(x[i]*A[j,i]); i:=i-1; end; x[j]:=x[j]/A[j,j]; end

  10. CÓDIGO EM PASCAL else begin cont:=cont+1; blinha:=b[j]; for c:=1 to (n-1) do begin blinha:=blinha-(A[j,c]*x[c]); end; if(blinha=0)then begin comp:=1; endelsecomp:=2; end; j:=j-1; end;

  11. CÓDIGO EM PASCAL if(cont=0) then begin writeln(''); writeln('X:'); for i:=1 to n do // imprime o vetor solução x begin writeln(x[i]); end; end elseif(comp=1)then begin writeln('Sistema compativel e indeterminado. '); endelse begin writeln('Sistema incompativel.'); end; readln(q); end.

More Related