Buscar

Método de Gauss-Seidel

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

#include <iostream>
using namespace std;
int main(){
/*
PROFESSOR, TENTEI DEFINIR UMA FUNÇÃO PARA FAZER O MÓDULO MAS NÃO FUNCIONOU :/
Se puder dar uma olhada agradeço:
int abs (float a){
 float positivo;
 if(a<0){
 positivo = -1*a;
 }
 else{
 positivo = a;
 }
 return positivo;
}
*/
int n;
cout<<"Insira o valor de N (matriz quadrada)"<<endl;
cin>>n;
n-=1;
float a[n+1][n+1]; // coeficientes da matriz
float b[n+1]; // vetor solução da matriz
float xk[n+1]; // solução anterior
float xk1[n+1]; // solução seguinte
float s=0; // soma dos valores da linha para achar o xk
int k; // iterações
float e; // erro (epson)
float erro[n+1]; // erro de cada solução (pra pegar o maior)
int exn=0; // contador pra ver se o maior erro é menor que epslon
int iter; // numero de iterações que foram necessárias
float maior = 0;
cout<<endl<<"Insira os valores dos coeficientes da matriz"<<endl;
for(int i=0; i<=n; i++){
 for(int j=0; j<=n; j++){
 cin>>a[i][j];
 }
}
cout<<endl<<"Insira os valores do vetor solução"<<endl;
for(int a=0; a<=n; a++){
 cin>>b[a];
}
cout<<endl<<"Insira o valor de K (iterações)"<<endl;
cin>>k;
cout<<endl<<"Insira o valor de Epsolon"<<endl;
cin>>e;
//resultados
cout<<endl<<" Resultados:"<<endl;
// --------- definição dos resultados --------- //
//Primeira intereção com valor 0.
for (int c=0; c < n; c++){ 
 xk[c]=0;
}
//rodar até atingir o numero de iterações definidas ou todos os erros da intereção menor que o erro máximo digitado pelo usuário (epslon)
for(int c2=0; (c2<k) || (maior > e) ; c2++){
 maior = 0;
 //cout<<"iteração "<<c2+1<<endl;
 //definição de todas as soluções e respectivos erros
 for(int i=0; i < n+1; i++){
 float s=0;
 //definição da soma de cada linha
 for (int j=0; j < n+1; j++){ 
 if (i != j){
 s+= (a[i][j]*xk[j]);
 }
 }
 //valor da solução xk1
 xk1[i] = (b[i]- s)/a[i][i];
 //cout<<" xk"<<i+1<<" = "<<xk1[i]<<endl;
 //erro entre xk1 e xk
 float pos;
 if((xk1[i]-xk[i])<0){
 pos = -1*(xk1[i]-xk[i]);
 }
 else{
 pos = xk1[i]-xk[i];
 }
 erro[i] = pos; 
 //cout<<"xk = "<<xk[i]<<"; xk1 = "<<xk1[i]<<endl;
 xk[i]=xk1[i]; 
 //cout<<"xk'= "<<xk[i]<<endl; 
 }
 //definição do maior erro da iteração
 for(int c = 0; c<=n; c++){
 if(erro[c]>maior){
 maior = erro[c];
 }
 } 
 
 //atualizando o valor de xk para o valor da nova solução
 for (int c3=0; c3 <= n; c3++){
 xk[c3] = xk1[c3];
 }
 
 
 iter = c2;
 //cout<<" maior erro = "<<maior<<endl;
 if((iter >= k-1) || (maior <= e)){
 //cout<<endl<<"Fim"<<endl;
 break;
 }
}
//saída
cout<<endl<<"Iterações"<<endl;
cout<<iter+1;
if(iter+1 == k){
 cout<<"(número máximo de iterações atingido)";
}
cout<<endl;
cout<<endl<<"Tolerância"<<endl;
cout<<maior;
if(maior<=e){
 cout<<"(é menor que "<<e<<")";
}
cout<<endl;
cout<<endl<<"Raízes do sistema:"<<endl;
for(int c=0; c<=n;c++){
 cout<<"x"<<c+1<<"= "<<xk[c]<<endl;
}
cout<<endl;
 
return 0;
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando