Ir ao conteúdo
  • Cadastre-se

C Implementação de Gauss Jacobi em c


Posts recomendados

	#include<stdio.h>
	#include<math.h>
	#include <stdlib.h>

	void SolucaoGaussJacobi(int ordem, float matriz[ordem][ordem], float vetIndependente[ordem], float erro, float vetInicial[ordem], float resultado[ordem], int interacoes);


int main(){
    int i, j, ordem, vMenu, k, interacoes;
    printf("Digite a dimensao do Sistema linear (sem o termo independente): ");
    scanf("%i", &ordem);
    float matriz[ordem][ordem], vetIndependente[ordem], resultado[ordem], c, vetInicial[ordem], resultadoGaussJacobi[ordem];
    float determinante, erro, resultadoFinalGaussJacobi[ordem];

    //----------------LEITURA DO SISTEMA LINEAR----------------
    while(ordem <= 0){
        printf("Valor invalido!");
        printf("Por favor, digite novamente a dimensao do Sistema linear (sem o termo independente): ");
        scanf("%i", &ordem);
    }
    for(i = 0; i < ordem; i++){
        printf("\n");
        for(j = 0; j < ordem; j++){
            printf("Digite o valor do Sistema Linear na posicao [%i] [%i]:", i, j);
            scanf("%f", &matriz[i][j]);
        }
        printf("Digite o termo independente da %ia equacao: ", i+1);
        scanf("%f", &vetIndependente[i]);
    }
    //---------------------------------------------------------

    printf("\t\t ###### A MATRIZ Eh: ###### \n");
    for(i = 0; i < ordem; i++){
        for(j = 0; j < ordem; j++){
            printf(" %.2f", matriz[i][j]);
        }
        printf(" = %.2f", vetIndependente[i]);
        printf("\n");
    }
    printf("\t #####Muito bem, voce escolheu o metodo Interativo Gauss-Jacobi ##### \n");
    printf("Entre com a solucao inicial: ");
    for(k = 0; k < ordem; k++)
      scanf("%f", &vetInicial[k]);
    printf("\n Entre com a margem de erro: ");
    scanf("%f", &erro);
    printf("\n Entre com maximo de interacoes desejada: ");
    scanf("%i", &interacoes);
    SolucaoGaussJacobi(ordem, matriz, vetIndependente, erro, vetInicial, resultadoGaussJacobi, interacoes);
    printf("O conjunto solucao eh: S:{ ");
    for (i = 0; i < ordem; i++)
      printf("%.2f ", resultadoFinalGaussJacobi[i]);
    printf("}");
    printf("\n\n");


	return 0;
}
void SolucaoGaussJacobi(int ordem, float matriz[ordem][ordem], float vetIndependente[ordem], float e, float vetInicial[ordem], float resultado[ordem], int interacoes){
    int i, j, cont = 0, k;
    float soma, erro = 1, auxR[ordem];
    for(k = 0; k <ordem; k++)
        resultado[k] = vetInicial[k];
    while (erro > e  && cont < interacoes) {
        for(k = 0; k <ordem; k++)
            auxR[k] = resultado[k];
        for (i = 0; i < ordem; i++) {
            soma = 0;
            for (j = 0; j < ordem; j++) {
                if (i != j)
                    soma += matriz[i][j] * resultado[j];
            }
            resultado[i] = (vetIndependente[i] - soma) / matriz[i][i];
        }
        erro = abs(resultado - auxR) / abs(resultado);
        cont ++;
    }
}

O resultado esta dando 0.

o exemplo que usei foi esse para testarimage.png.d99ecfc02a00c5851f92a8d98f4ef02e.png com 1 interação, so que nao consigo chegar no resultado esperado q é esseimage.png.b41b5182092bed15515d4ed3df8d59eb.png esse foi so um exemplo, pois preciso desse codigo para matriz nxn

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Esses alfas não são o resultado esperado, são os coeficientes do critério das linhas...

 

Como todos os alfas são menos que 1, o Gauss-Seidel vai convergir

 

Está dando errado porque você passou os valores das variáveis. Se você quer mudar o valor de uma variável em uma função, você tem que utilizar ponteiros

Link para o comentário
Compartilhar em outros sites

5 minutos atrás, Daquisu disse:

Esses alfas não são o resultado esperado, são os coeficientes do critério das linhas...

 

Como todos os alfas são menos que 1, o Gauss-Seidel vai convergir

 

Está dando errado porque você passou os valores das variáveis. Se você quer mudar o valor de uma variável em uma função, você tem que utilizar ponteiros

eu me toquei nisso faz uns 15 minutos atras, voltei e corrigi um erro que deu aqui também, e testei o deu os valores corretos que  achei foi -2.2, 5.2 e 7,1 pode haver um errinho de aproximação mas nao passa de 0.2

adicionado 4 minutos depois
7 minutos atrás, Daquisu disse:

Esses alfas não são o resultado esperado, são os coeficientes do critério das linhas...

 

Como todos os alfas são menos que 1, o Gauss-Seidel vai convergir

 

Está dando errado porque você passou os valores das variáveis. Se você quer mudar o valor de uma variável em uma função, você tem que utilizar ponteiros

obrigado pela ajuda!!!!

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...