Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda: não consigo fazer Gauss Seidel (c++)


User F

Pergunta

Estou tentando fazer um programa em gauss seidel pra faculdade e não esta funcionando, gostaria que alguém me desse um auxilio...

a matriz A ficaria

A00 A01 A02 x0 B0

A10 A11 A12 * x1 = B1

A20 A21 A22 x2 B2

aí ficaria considerando x0=0 , x1=0 e x2=0 pelo que o usuario definirá ao ser perguntado

com o valor encontrado de x0 encontrado considerando x1=0 e x2 =0, eu iria jogar pra achar x1 da segunda linha, e com o valor encontrado de x0 e x1 eu iria encontrar x 2 da terceira linha e assim sucessivamente por uma quantidade de interações (repetições) até chegar na aproximação destes...

O programa tá dando looping, gostaria de saber qual o problema.

a00 * x0 + a01*x1 + a02*x2 = b0

x0 = ( b0 - a01*x1 - a02*x2 )/ x0

#include<iostream>
#define N 3 // tamanho da matriz
using namespace std;
int main(){
   double A[N][N]; // MAtriz
   double B[N]; // Resultado
   double X[N];  // coluna X
   int max;
   cout<<"\n Entre com os valores da Matriz A \n";
   for(int a=0;a<N;a++){
           for(int b=0;b<N;b++)
           cin >> A[a][b];
   }
   cout <<"\nDigite os valores da Matriz B \n ";
   for(int c=0;c<N;c++)
           cin>>B[c];
           
   cout <<"\n qual o numero de interacoes q você deseja? ";
   cin >> max;
   cout << "\n Digite os valores iniciais de X ";
   cin >> X[N]; //tem que ser iguais a zero

 //parte que calcula numa matriz 3 por 3 e imprime

 /*  for(int k=0;k<max;k++){ //aqui calcula pela matriz 3x3 , mas não se eu mudar o valor de N
            
           X[0]=1/A[0][0] * (B[0]-A[0][1]*X[1]-A[0][2]*X[2]);
           X[1]=1/A[1][1] * (B[1]-A[1][0]*X[0]-A[1][2]*X[2]);
           X[2]=1/A[2][2] * (B[2]-A[2][0]*X[0]-A[2][1]*X[1]); 
         
           cout<<"\n"<<X[0]<<"\t"<<X[1]<<"\t"<<X[2];
           
           }*/
   
  
  
  //parte que deve calcular qualquer tamanho de matriz escolhida:
   
   
   int p=0, w=0, k=0 ,z=0;
   for(int k=0;k<max;k++){
           //vai fazer k iterações até max quantidade
           
   for(int i=0;i<N;i++)
   for(int j=0;j<N;j++){ //varrer a matriz A[i][j] e B[i][j] segundo a operacao
                                                    
                           
           double Soma_e=0,Soma_d=0;      //Soma_e : soma de termos pela esquerda 
                           
                                                           //Soma_d : soma de termos pela direita
                       if(i==j){                                    //somente os a[0][0] , a[1][1] e a[2][2] possuem os X´s interessados
                          
                           do{                        
                           
                           k = k +(j-1);                   //utiliza k e z para não subistiuir i e j...
                           z = z +(i-1);                   //...com os novos valores assumidos na soma
                          
                           Soma_e = Soma_e +  A[i][k]*X[z]; //soma dos valores vao se acumular
                           
                   
                           }while ( 0<k<(N-1) || 0<z<(N-1) );      //o valor de [i] e [j] não podem exceder a matriz...
                                                                   //...como considerar o programa A[-2][-5] dentro da operacao.   
                                                                   //...se N=3, com k=2 vai sair do laço
                           do{ 
                           
                           p = p +(i+1);
                           w = w +(j+1);
                           
                           Soma_d = Soma_d +  A[i][p]*X[w];
                           
                           }while ( 0<p<(N-1) || 0<w<(N-1) );
                           
             
                           
                            X[i] = ( B[i] - Soma_e - Soma_d )/A[i][i];
                            } 
                            else
                            {}             
             cout<<"\n"<<X[0]<<"\t"<<X[1]<<"\t"<<X[2];
             }  
                           
   }
   system("pause>>null");
   return 0;
}

Abraço.

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...