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;
}
Pergunta
User F
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
Abraço.
Editado por kuroiAdicionar tag CODE
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
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.