Ir ao conteúdo
  • Cadastre-se

C Programa para Solução de Sistema Linear


Posts recomendados

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//#include "guass_jacob.h"

void gaussSolver(int n, double A[n][n], double b[n], double X[n]);
int main() {
    int  i = 0, j = 0, n = 0, k, m, l;;
    int ordem;
    printf("Digite a ordem do sistema: ");
    scanf("%i", &ordem);
    double matriz [ordem][ordem];
    double vetMatriz [ordem];
    double vetSolucao[ordem];
    //vetSolucao[ordem] = 0;

    for(i = 0; i < ordem; i++)
        for(j = 0; j < ordem; j++){
            printf("Digite o valor da linha [%i] coluna [%i]: ", i, j);
            scanf("%f", &matriz[i][j]);
        }
    for(n = 0; n < ordem; n++) {
        printf("Digite o termo independente: ");
        scanf("%f", &vetMatriz[n]);
    }

    gaussSolver(ordem, matriz, vetMatriz, vetSolucao);
    return 0;
}

void gaussSolver(int n, double A[n][n], double b[n], double X[n]){
    int i, j, k, l, m;
    //ETAPA DE ESCALONAMENTO
    for (k = 0; k < n - 1; k++) {
        double max = fabs(A[k][k]);
        int maxIndex = k;
        //procura o maior k-ésimo coeficiente em módulo
        for (i = k + 1; i < n; i++) {
            if (max < fabs(A[i][k])) {
                max = fabs(A[i][k]);
                maxIndex = i;
            }
        }
        if (maxIndex != k) {
            /*
             troca a equação k pela equação com o
             maior k-ésimo coeficiente em módulo
             */
            for (j = 0; j < n; j++) {
                double temp = A[k][j];
                A[k][j] = A[maxIndex][j];
                A[maxIndex][j] = temp;
            }
            double temp = b[k];
            b[k] = b[maxIndex];
            b[maxIndex] = temp;
        }
        //Se A[k][k] é zero, então a matriz dos coeficiente é singular
        //det A = 0
        if (A[k][k] == 0) {
            printf("A matriz dos coeficientes é singular\n");
            return;
        } else {
            //realiza o escalonamento
            for (m = k + 1; m < n; m++) {
                double F = -A[m][k] / A[k][k];
                A[m][k] = 0; //evita uma iteração
                b[m] = b[m] + F * b[k];
                for (l = k + 1; l < n; l++) {
                    A[m][l] = A[m][l] + F * A[k][l];
                }
            }
        }
    }
    //ETAPA DE RESOLUÇÃO DO SISTEMA
    for (i = n - 1; i >= 0; i--) {
        X[i] = b[i];
        for (j = i + 1; j < n; j++) {
            X[i] = X[i] - X[j] * A[i][j];
        }
        X[i] = X[i] / A[i][i];
    }
}

Não estou conseguindo chegar no resultado correto... alguem poderia me dar uma luz?? não manjo muito de matriz!!!!

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

19 horas atrás, Daquisu disse:

Testei dois exemplos aqui e deu certo. Um com ordem = 2 e outro com ordem = 3

 

Qual é o caso onde não funciona?

ja consegui resolver!!!! obrigado!!!

adicionado 3 minutos depois
19 horas atrás, Daquisu disse:

Testei dois exemplos aqui e deu certo. Um com ordem = 2 e outro com ordem = 3

 

Qual é o caso onde não funciona?

eu estou com um outro caso com problema, tenho que resolver por gauss-jacobi... poderia me ajudar?? caso possa este é o link 

 

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

  • 2 meses depois...

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!