A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

GAUSS COM PIVOTEAMENTO

Apresentações semelhantes


Apresentação em tema: "GAUSS COM PIVOTEAMENTO"— Transcrição da apresentação:

1 GAUSS COM PIVOTEAMENTO

2 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 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 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 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 ” begin inicio do laço “ i ” for j:=1 to n do laço para as colunas begin inicio 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;

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 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 k:=j; while(k<=n) do // troca-se a linha inteira 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;

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ô 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; i:=i+1; j:=j+1;

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 write(A[i,j],' '); end; writeln(''); for i:=1 to n do // imprime o vetor b depois do processo terminado writeln(b[i]);

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 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 blinha:=blinha-(A[j,c]*x[c]); end; if(blinha=0)then //se blinha é zero comp:=1; // sistema compativel e indeterminado end else comp:=2; // senão incompativel

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 i:=n; x[j]:=b[j]; while(i>j) do 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 blinha:=blinha-(A[j,c]*x[c]); end; if(blinha=0)then comp:=1; end else comp:=2; j:=j-1;

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 writeln(x[i]); end; end else if(comp=1)then writeln('Sistema compativel e indeterminado. '); end else writeln('Sistema incompativel.'); readln(q); end.


Carregar ppt "GAUSS COM PIVOTEAMENTO"

Apresentações semelhantes


Anúncios Google