Baixe o app para aproveitar ainda mais
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; }
Compartilhar