A maior rede de estudos do Brasil

Alguém tem algum código de Eliminação de Gauss com Pivoteamento Parcial?

Trabalho de Cálculo Numérico.


5 resposta(s) - Contém resposta de Especialista

User badge image

RD Resoluções Verified user icon

Há mais de um mês

Para responder essa pergunta devemos colocar em prática nosso conhecimento sobre Cálculo Numérico


Abaixo está programa desenvolvido no compilador Dev-Pascal.

Program Gauss_pivoteamento_parcial; Uses crt;

Var

a : Array[1..100,1..100] Of Real; //se desejar uma matriz maior, basta criar arrays maiores//

x, b : Array[1..100] Of Real;

i, j, n, ji, ii, ipivo, k : Integer; // i's sao variaveis auxiliares//

m, soma, pivo, baux, aux : Real;

resposta : char;

nome : String;

erro : Boolean;

resultado : Text;

Begin

Repeat

repeat

Clrscr;

Textcolor (White);

Writeln ('Resolucao de sistemas de equacoes lineares utilizando o metodo da eliminacao');

Writeln ('de Gauss (triangularizacao) com pivoteamento parcial.');

Writeln;

Write ('Digite a ordem do sistema (n), no maximo n=100: ');

Readln (n);

until n >= 2;

//le os coeficientes da matriz A//

for j:=1 to n do

begin

Repeat

clrscr;

Writeln ('AX = B');

Writeln;

Writeln ('Matriz ampliada do sistema');

Writeln;

Writeln ('Digite os elementos da coluna ',j,' da matriz A (coeficientes de x',j,'):');

Writeln;

for i:=1 to n do

begin

Write('a[',i,'x',j,']= ');

readln(a[i,j]);

end;

writeln;

writeln;

Textcolor (White);

Write ('Confira os valores digitados, estao corretos? (digite s=sim, n=nao): ');

Readln (resposta);

Until (resposta = 'S') Or (resposta = 's');

end;

//le os coeficientes da matriz B//

repeat

clrscr;

Writeln ('AX = B');

Writeln;

Writeln ('Matriz ampliada do sistema');

Writeln;

Writeln ('Digite os elementos da matriz B (termos independentes)');

Writeln;

for i:=1 to n do

begin

Write('b[',i,']= ');

readln(b[i]);

end;

writeln;

writeln;

Write ('Confira os valores digitados, estao corretos? (digite s=sim, n=nao): ');

Readln (resposta);

Until (resposta = 'S') Or (resposta = 's');

//Metodo da eliminacao de Gauss (Triangularizacao)//

k := 1; //Passo//

erro := False; //A variavel erro se tornara True caso haja erros de divisao por zero//

For j:=1 To n Do

Begin

For i:=k+1 To n Do

Begin

pivo := Abs(a[j,k]); //Pivoteamento Parcial//

ipivo := j; //Encontra em qual linha da coluna k esta o maior elemento//

For ii:=j to n Do

Begin

If Abs(a[ii,k]) > pivo Then

Begin

pivo := a[ii,k];

ipivo := ii;

End;

End;

If ipivo <> j Then //Se ipivo = j e porque o maior elemento ja esta na linha do pivo, e a permutacao nao e necessaria//

Begin

For ji:=1 to n Do //Permuta as linhas necessarias para o pivoteamento parcial//

Begin

aux := a[j,ji];

a[j,ji] := a[ipivo,ji];

a[ipivo,ji] := aux;

End;

baux := b[j];

b[j] := b[ipivo];

b[ipivo] := baux;

End;

If a[j,j] <> 0 Then //Evita erros de divisao por zero//

Begin

m := -1*(a[i,j]/a[j,j]);

For ji:=1 To n Do

a[i,ji] := a[i,ji] + (m*(a[j,ji]));

b[i] := b[i] + m*b[j];

End

Else

erro := True;

End;

k := k + 1;

End;

If erro = True Then

Begin

Clrscr;

Writeln ('Erro! Talvez este sistema linear nao tenha solucao (sistema impossivel)');

End

Else

Begin

//Metodo de resolucao de sistemas triangulares (Retrossubstituicao)//

If a[n,n] <> 0 Then

x[n] := b[n] / a[n,n]

Else

x[n] := 0;

For i := n-1 Downto 1 Do

Begin

soma := 0;

For j := i+1 To n Do

soma := soma + a[i,j]*x[j];

If a[i,i] <> 0 Then

x[i] := (1/a[i,i]) * (b[i] - soma)

Else

x[i] := (b[i] - soma);

End;

//Imprime na tela o resultado//

clrscr;

Writeln ('AX = B');

Writeln;

Textcolor (Lightcyan);

For i := 1 To n Do

Writeln ('x', i, ' = ', x[i]);

writeln;

//Grava o resultado em um arquivo de texto .txt//

Writeln;

Textcolor (White);

Write ('Deseja salvar os resultados em um arquivo de texto? (digite s=sim, n=nao): ');

Readln (resposta);

If (resposta = 's') Or (resposta = 'S') Then

Begin

Writeln;

Write ('Digite o nome do arquivo a ser salvo: ');

Readln (nome);

nome := (nome + '.txt');

Assign(resultado, nome);

Rewrite (resultado);

Writeln (resultado, 'valores de x (incognitas):');

Writeln (resultado);

For i:=1 To n Do //Escreve X//

Writeln (resultado,'X',i, ' = ',x[i]);

Close (resultado);

Writeln;

Writeln ('O arquivo foi salvo no mesmo diretorio do arquivo executavel!');

End;

End;

Writeln;

Textcolor (White);

Write ('Deseja reiniciar o programa? (digite s=sim, n=nao): ');

Readln (resposta);

Until (resposta <> 'S') And (resposta <> 's');

End

Para responder essa pergunta devemos colocar em prática nosso conhecimento sobre Cálculo Numérico


Abaixo está programa desenvolvido no compilador Dev-Pascal.

Program Gauss_pivoteamento_parcial; Uses crt;

Var

a : Array[1..100,1..100] Of Real; //se desejar uma matriz maior, basta criar arrays maiores//

x, b : Array[1..100] Of Real;

i, j, n, ji, ii, ipivo, k : Integer; // i's sao variaveis auxiliares//

m, soma, pivo, baux, aux : Real;

resposta : char;

nome : String;

erro : Boolean;

resultado : Text;

Begin

Repeat

repeat

Clrscr;

Textcolor (White);

Writeln ('Resolucao de sistemas de equacoes lineares utilizando o metodo da eliminacao');

Writeln ('de Gauss (triangularizacao) com pivoteamento parcial.');

Writeln;

Write ('Digite a ordem do sistema (n), no maximo n=100: ');

Readln (n);

until n >= 2;

//le os coeficientes da matriz A//

for j:=1 to n do

begin

Repeat

clrscr;

Writeln ('AX = B');

Writeln;

Writeln ('Matriz ampliada do sistema');

Writeln;

Writeln ('Digite os elementos da coluna ',j,' da matriz A (coeficientes de x',j,'):');

Writeln;

for i:=1 to n do

begin

Write('a[',i,'x',j,']= ');

readln(a[i,j]);

end;

writeln;

writeln;

Textcolor (White);

Write ('Confira os valores digitados, estao corretos? (digite s=sim, n=nao): ');

Readln (resposta);

Until (resposta = 'S') Or (resposta = 's');

end;

//le os coeficientes da matriz B//

repeat

clrscr;

Writeln ('AX = B');

Writeln;

Writeln ('Matriz ampliada do sistema');

Writeln;

Writeln ('Digite os elementos da matriz B (termos independentes)');

Writeln;

for i:=1 to n do

begin

Write('b[',i,']= ');

readln(b[i]);

end;

writeln;

writeln;

Write ('Confira os valores digitados, estao corretos? (digite s=sim, n=nao): ');

Readln (resposta);

Until (resposta = 'S') Or (resposta = 's');

//Metodo da eliminacao de Gauss (Triangularizacao)//

k := 1; //Passo//

erro := False; //A variavel erro se tornara True caso haja erros de divisao por zero//

For j:=1 To n Do

Begin

For i:=k+1 To n Do

Begin

pivo := Abs(a[j,k]); //Pivoteamento Parcial//

ipivo := j; //Encontra em qual linha da coluna k esta o maior elemento//

For ii:=j to n Do

Begin

If Abs(a[ii,k]) > pivo Then

Begin

pivo := a[ii,k];

ipivo := ii;

End;

End;

If ipivo <> j Then //Se ipivo = j e porque o maior elemento ja esta na linha do pivo, e a permutacao nao e necessaria//

Begin

For ji:=1 to n Do //Permuta as linhas necessarias para o pivoteamento parcial//

Begin

aux := a[j,ji];

a[j,ji] := a[ipivo,ji];

a[ipivo,ji] := aux;

End;

baux := b[j];

b[j] := b[ipivo];

b[ipivo] := baux;

End;

If a[j,j] <> 0 Then //Evita erros de divisao por zero//

Begin

m := -1*(a[i,j]/a[j,j]);

For ji:=1 To n Do

a[i,ji] := a[i,ji] + (m*(a[j,ji]));

b[i] := b[i] + m*b[j];

End

Else

erro := True;

End;

k := k + 1;

End;

If erro = True Then

Begin

Clrscr;

Writeln ('Erro! Talvez este sistema linear nao tenha solucao (sistema impossivel)');

End

Else

Begin

//Metodo de resolucao de sistemas triangulares (Retrossubstituicao)//

If a[n,n] <> 0 Then

x[n] := b[n] / a[n,n]

Else

x[n] := 0;

For i := n-1 Downto 1 Do

Begin

soma := 0;

For j := i+1 To n Do

soma := soma + a[i,j]*x[j];

If a[i,i] <> 0 Then

x[i] := (1/a[i,i]) * (b[i] - soma)

Else

x[i] := (b[i] - soma);

End;

//Imprime na tela o resultado//

clrscr;

Writeln ('AX = B');

Writeln;

Textcolor (Lightcyan);

For i := 1 To n Do

Writeln ('x', i, ' = ', x[i]);

writeln;

//Grava o resultado em um arquivo de texto .txt//

Writeln;

Textcolor (White);

Write ('Deseja salvar os resultados em um arquivo de texto? (digite s=sim, n=nao): ');

Readln (resposta);

If (resposta = 's') Or (resposta = 'S') Then

Begin

Writeln;

Write ('Digite o nome do arquivo a ser salvo: ');

Readln (nome);

nome := (nome + '.txt');

Assign(resultado, nome);

Rewrite (resultado);

Writeln (resultado, 'valores de x (incognitas):');

Writeln (resultado);

For i:=1 To n Do //Escreve X//

Writeln (resultado,'X',i, ' = ',x[i]);

Close (resultado);

Writeln;

Writeln ('O arquivo foi salvo no mesmo diretorio do arquivo executavel!');

End;

End;

Writeln;

Textcolor (White);

Write ('Deseja reiniciar o programa? (digite s=sim, n=nao): ');

Readln (resposta);

Until (resposta <> 'S') And (resposta <> 's');

End

User badge image

RD Resoluções Verified user icon

Há mais de um mês

Para responder essa pergunta devemos colocar em prática nosso conhecimento sobre Cálculo Numérico


Abaixo está programa desenvolvido no compilador Dev-Pascal.

Código:

Program Gauss_pivoteamento_parcial; Uses crt;

Var

a : Array[1..100,1..100] Of Real; //se desejar uma matriz maior, basta criar arrays maiores//

x, b : Array[1..100] Of Real;

i, j, n, ji, ii, ipivo, k : Integer; // i's sao variaveis auxiliares//

m, soma, pivo, baux, aux : Real;

resposta : char;

nome : String;

erro : Boolean;

resultado : Text;

Begin

Repeat

repeat

Clrscr;

Textcolor (White);

Writeln ('Resolucao de sistemas de equacoes lineares utilizando o metodo da eliminacao');

Writeln ('de Gauss (triangularizacao) com pivoteamento parcial.');

Writeln;

Write ('Digite a ordem do sistema (n), no maximo n=100: ');

Readln (n);

until n >= 2;

//le os coeficientes da matriz A//

for j:=1 to n do

begin

Repeat

clrscr;

Writeln ('AX = B');

Writeln;

Writeln ('Matriz ampliada do sistema');

Writeln;

Writeln ('Digite os elementos da coluna ',j,' da matriz A (coeficientes de x',j,'):');

Writeln;

for i:=1 to n do

begin

Write('a[',i,'x',j,']= ');

readln(a[i,j]);

end;

writeln;

writeln;

Textcolor (White);

Write ('Confira os valores digitados, estao corretos? (digite s=sim, n=nao): ');

Readln (resposta);

Until (resposta = 'S') Or (resposta = 's');

end;

//le os coeficientes da matriz B//

repeat

clrscr;

Writeln ('AX = B');

Writeln;

Writeln ('Matriz ampliada do sistema');

Writeln;

Writeln ('Digite os elementos da matriz B (termos independentes)');

Writeln;

for i:=1 to n do

begin

Write('b[',i,']= ');

readln(b[i]);

end;

writeln;

writeln;

Write ('Confira os valores digitados, estao corretos? (digite s=sim, n=nao): ');

Readln (resposta);

Until (resposta = 'S') Or (resposta = 's');

//Metodo da eliminacao de Gauss (Triangularizacao)//

k := 1; //Passo//

erro := False; //A variavel erro se tornara True caso haja erros de divisao por zero//

For j:=1 To n Do

Begin

For i:=k+1 To n Do

Begin

pivo := Abs(a[j,k]); //Pivoteamento Parcial//

ipivo := j; //Encontra em qual linha da coluna k esta o maior elemento//

For ii:=j to n Do

Begin

If Abs(a[ii,k]) > pivo Then

Begin

pivo := a[ii,k];

ipivo := ii;

End;

End;

If ipivo <> j Then //Se ipivo = j e porque o maior elemento ja esta na linha do pivo, e a permutacao nao e necessaria//

Begin

For ji:=1 to n Do //Permuta as linhas necessarias para o pivoteamento parcial//

Begin

aux := a[j,ji];

a[j,ji] := a[ipivo,ji];

a[ipivo,ji] := aux;

End;

baux := b[j];

b[j] := b[ipivo];

b[ipivo] := baux;

End;

If a[j,j] <> 0 Then //Evita erros de divisao por zero//

Begin

m := -1*(a[i,j]/a[j,j]);

For ji:=1 To n Do

a[i,ji] := a[i,ji] + (m*(a[j,ji]));

b[i] := b[i] + m*b[j];

End

Else

erro := True;

End;

k := k + 1;

End;

If erro = True Then

Begin

Clrscr;

Writeln ('Erro! Talvez este sistema linear nao tenha solucao (sistema impossivel)');

End

Else

Begin

//Metodo de resolucao de sistemas triangulares (Retrossubstituicao)//

If a[n,n] <> 0 Then

x[n] := b[n] / a[n,n]

Else

x[n] := 0;

For i := n-1 Downto 1 Do

Begin

soma := 0;

For j := i+1 To n Do

soma := soma + a[i,j]*x[j];

If a[i,i] <> 0 Then

x[i] := (1/a[i,i]) * (b[i] - soma)

Else

x[i] := (b[i] - soma);

End;

//Imprime na tela o resultado//

clrscr;

Writeln ('AX = B');

Writeln;

Textcolor (Lightcyan);

For i := 1 To n Do

Writeln ('x', i, ' = ', x[i]);

writeln;

//Grava o resultado em um arquivo de texto .txt//

Writeln;

Textcolor (White);

Write ('Deseja salvar os resultados em um arquivo de texto? (digite s=sim, n=nao): ');

Readln (resposta);

If (resposta = 's') Or (resposta = 'S') Then

Begin

Writeln;

Write ('Digite o nome do arquivo a ser salvo: ');

Readln (nome);

nome := (nome + '.txt');

Assign(resultado, nome);

Rewrite (resultado);

Writeln (resultado, 'valores de x (incognitas):');

Writeln (resultado);

For i:=1 To n Do //Escreve X//

Writeln (resultado,'X',i, ' = ',x[i]);

Close (resultado);

Writeln;

Writeln ('O arquivo foi salvo no mesmo diretorio do arquivo executavel!');

End;

End;

Writeln;

Textcolor (White);

Write ('Deseja reiniciar o programa? (digite s=sim, n=nao): ');

Readln (resposta);

Until (resposta <> 'S') And (resposta <> 's');

End


Portanto, a baixo está o código em Pascal.

Código:

Program Gauss_pivoteamento_parcial; Uses crt;

Var

a : Array[1..100,1..100] Of Real; //se desejar uma matriz maior, basta criar arrays maiores//

x, b : Array[1..100] Of Real;

i, j, n, ji, ii, ipivo, k : Integer; // i's sao variaveis auxiliares//

m, soma, pivo, baux, aux : Real;

resposta : char;

nome : String;

erro : Boolean;

resultado : Text;

Begin

Repeat

repeat

Clrscr;

Textcolor (White);

Writeln ('Resolucao de sistemas de equacoes lineares utilizando o metodo da eliminacao');

Writeln ('de Gauss (triangularizacao) com pivoteamento parcial.');

Writeln;

Write ('Digite a ordem do sistema (n), no maximo n=100: ');

Readln (n);

until n >= 2;

//le os coeficientes da matriz A//

for j:=1 to n do

begin

Repeat

clrscr;

Writeln ('AX = B');

Writeln;

Writeln ('Matriz ampliada do sistema');

Writeln;

Writeln ('Digite os elementos da coluna ',j,' da matriz A (coeficientes de x',j,'):');

Writeln;

for i:=1 to n do

begin

Write('a[',i,'x',j,']= ');

readln(a[i,j]);

end;

writeln;

writeln;

Textcolor (White);

Write ('Confira os valores digitados, estao corretos? (digite s=sim, n=nao): ');

Readln (resposta);

Until (resposta = 'S') Or (resposta = 's');

end;

//le os coeficientes da matriz B//

repeat

clrscr;

Writeln ('AX = B');

Writeln;

Writeln ('Matriz ampliada do sistema');

Writeln;

Writeln ('Digite os elementos da matriz B (termos independentes)');

Writeln;

for i:=1 to n do

begin

Write('b[',i,']= ');

readln(b[i]);

end;

writeln;

writeln;

Write ('Confira os valores digitados, estao corretos? (digite s=sim, n=nao): ');

Readln (resposta);

Until (resposta = 'S') Or (resposta = 's');

//Metodo da eliminacao de Gauss (Triangularizacao)//

k := 1; //Passo//

erro := False; //A variavel erro se tornara True caso haja erros de divisao por zero//

For j:=1 To n Do

Begin

For i:=k+1 To n Do

Begin

pivo := Abs(a[j,k]); //Pivoteamento Parcial//

ipivo := j; //Encontra em qual linha da coluna k esta o maior elemento//

For ii:=j to n Do

Begin

If Abs(a[ii,k]) > pivo Then

Begin

pivo := a[ii,k];

ipivo := ii;

End;

End;

If ipivo <> j Then //Se ipivo = j e porque o maior elemento ja esta na linha do pivo, e a permutacao nao e necessaria//

Begin

For ji:=1 to n Do //Permuta as linhas necessarias para o pivoteamento parcial//

Begin

aux := a[j,ji];

a[j,ji] := a[ipivo,ji];

a[ipivo,ji] := aux;

End;

baux := b[j];

b[j] := b[ipivo];

b[ipivo] := baux;

End;

If a[j,j] <> 0 Then //Evita erros de divisao por zero//

Begin

m := -1*(a[i,j]/a[j,j]);

For ji:=1 To n Do

a[i,ji] := a[i,ji] + (m*(a[j,ji]));

b[i] := b[i] + m*b[j];

End

Else

erro := True;

End;

k := k + 1;

End;

If erro = True Then

Begin

Clrscr;

Writeln ('Erro! Talvez este sistema linear nao tenha solucao (sistema impossivel)');

End

Else

Begin

//Metodo de resolucao de sistemas triangulares (Retrossubstituicao)//

If a[n,n] <> 0 Then

x[n] := b[n] / a[n,n]

Else

x[n] := 0;

For i := n-1 Downto 1 Do

Begin

soma := 0;

For j := i+1 To n Do

soma := soma + a[i,j]*x[j];

If a[i,i] <> 0 Then

x[i] := (1/a[i,i]) * (b[i] - soma)

Else

x[i] := (b[i] - soma);

End;

//Imprime na tela o resultado//

clrscr;

Writeln ('AX = B');

Writeln;

Textcolor (Lightcyan);

For i := 1 To n Do

Writeln ('x', i, ' = ', x[i]);

writeln;

//Grava o resultado em um arquivo de texto .txt//

Writeln;

Textcolor (White);

Write ('Deseja salvar os resultados em um arquivo de texto? (digite s=sim, n=nao): ');

Readln (resposta);

If (resposta = 's') Or (resposta = 'S') Then

Begin

Writeln;

Write ('Digite o nome do arquivo a ser salvo: ');

Readln (nome);

nome := (nome + '.txt');

Assign(resultado, nome);

Rewrite (resultado);

Writeln (resultado, 'valores de x (incognitas):');

Writeln (resultado);

For i:=1 To n Do //Escreve X//

Writeln (resultado,'X',i, ' = ',x[i]);

Close (resultado);

Writeln;

Writeln ('O arquivo foi salvo no mesmo diretorio do arquivo executavel!');

End;

End;

Writeln;

Textcolor (White);

Write ('Deseja reiniciar o programa? (digite s=sim, n=nao): ');

Readln (resposta);

Until (resposta <> 'S') And (resposta <> 's');

End

User badge image

Amanda

Há mais de um mês

Voce conseguiu o codigo? pode me passar? amandasantoro@poli.ufrj.br

Essa pergunta já foi respondida por um dos nossos especialistas