Metodo de Gauss
Metodo de Gauss
Metodo de Gauss
Pgina 1 de 9
Primeiros Passos
Crie uma pasta dentro da pasta que voc reservou para a disciplina e chame-a de
EliminacaoGauss. Dentro dela crie um novo projeto do tipo console application e
tambm chame esse projeto de EliminacaoGauss. O Dev C++ vai criar para voc um
arquivo main.cpp, com uma funo main bsica dentro. Salve esse arquivo junto do
arquivo do projeto.
Vamos agora construir passo a passo o que necessrio para implementar o algoritmo
do mtodo da eliminao de Gauss para resolver o sistema visto como exemplo na
Aula 4:
+3
+4
=5
=3
= 1
Tutorial 6, Rev. 1
Data: 4/9/2012
Pgina 2 de 9
Parte A: Eliminao
FAA k=1,n-1
FAA i=k+1,n
fator = a(i,k)/a(k,k)
FAA j=k+1,n
a(i,j) = a(i,j) fator a(k,j)
FIM FAA
b(i) = b(i)- fator b(k)
a(i,k) = 0.0
FIM FAA
Algoritmo 1
FIM FAA
Parte B: Substituio retrgrada
x(n)=b(n)/a(n,n)
FAA i=n-1,1
sum = 0,0
FAA j=i+1,n
sum = sum + a(i,j) x(j)
FIM FAA
x(i) = (b(i) - sum)/a(i,i)
FIM FAA
Mo na Massa!
Vamos construir o cdigo pouco a pouco, explicando as partes.
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int i, j, k, n;
int o, p;
double fator, sum;
//Declarando e inicializando a matriz do problema a ser resolvido
// | 2.0 3.0 -1.0 |
| x1 |
| 5.0 |
// | 4.0 4.0 -3.0 | x | x2 | = | 3.0 |
Pgina 3 de 9
1.0 |
| x3 |
| -1.0 |
//
//
//
//
//
//
//
Tutorial 6, Rev. 1
Data: 4/9/2012
Pgina 4 de 9
{
// transformando "A"
a[i][j] = a[i][j] - (fator * a[k][j]);
}
// transformando "b" (matriz aumentada)
b[i] = b[i] - (fator * b[k]);
//zerando antes da diagonal para formar um triang. sup.
a[i][k] = 0.0f;
}
for 1, comeamos na linha 2 e assim por diante) e vai at o fim das linhas da matriz.
Finalmente, para cada linha, h o lao das colunas, j, que vai tambm de k+1 at n-1
(da coluna seguinte at o fim da matriz).
Essa talvez seja a parte mais complexa do cdigo. Precisamos de um lao mais
externo, o k, porque queremos zerar os elementos abaixo do piv (queremos uma
matriz triangular superior). Ento esse lao mais externo, em k, d o ponto de partida
Tutorial 6, Rev. 1
Data: 4/9/2012
Pgina 5 de 9
abaixo da diagonal.
Note o complemento para fazer isso em a[i][k] = 0.0f, onde foramos que seja
zerado o elemento da coluna abaixo do piv, pois o lao comea depois dele.
A parte abaixo, no fim do bloco da eliminao, apenas imprime na tela cada passada
da transformao da matriz aumentada original em um sistema equivalente que vai
ser tratado no bloco seguinte: a substituio retroativa.
// Esse bloco imprime na tela as matrizes aumentadas ---------// intermediarias a cada passo das transformacoes lineares
for(o=0; o<=n-1; o++) // varre todas as linhas
{
printf("|");
for(p=0; p<=n-1; p++) // varre todas as colunas
{
printf(" %+g ",a[o][p]) ;
}
printf ("%+g | \n", b[o]);
}
printf("\n");
//------------------------------------------------------------}
//
//
//
//
Tutorial 6, Rev. 1
Data: 4/9/2012
Pgina 6 de 9
}
// passando para o outro lado e achando x(i)
x[i] = (b[i] - sum)/a[i][i];
}
for(i=0; i<=n-1; i++) // imprimindo na tela os resultados
{
printf("x(%i) = %+g \n", i, x[i]);
}
system("PAUSE");
return EXIT_SUCCESS;
}
Nessa parte, resolvemos primeiro o ltimo valor de x fora do lao. Esse valor nosso
ponto de partida para, da por diante, calcular todos os demais, do fim para o comeo.
Dentro do lao, estamos fazendo a operao que quando feita mo, chamamos de
isolar o valor de x ou mesmo o popular colocar o resto para o outro lado.
Dentro desse bloco, na ltima parte, imprimimos na tela os valores de x. Observe bem
como ficou a funo printf.
Veja agora o cdigo completo;
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int i, j, k, n;
int o, p;
double fator, sum;
//Declarando e inicializando a matriz do problema a ser resolvido
// | 2.0 3.0 -1.0 |
| x1 |
| 5.0 |
// | 4.0 4.0 -3.0 | x | x2 | = | 3.0 |
// | 2.0 -3.0 1.0 |
| x3 |
| -1.0 |
double
{2.0,
double
double
Tutorial 6, Rev. 1
Data: 4/9/2012
//
//
//
//
//
//
//
Pgina 7 de 9
//
//
//
//
Pgina 8 de 9
Quando esse cdigo completo compilado e executado, o resultado deve ser igual ao
mostrado na Figura 1.
Exerccios
Agora teste a resoluo do sistema
3
4
2
2
1
2
3
Tutorial 6, Rev. 1
Data: 4/9/2012
Pgina 9 de 9
Preste muita ateno aos sinais da matriz dos coeficientes na hora de trocar.