Ir ao conteúdo
  • Cadastre-se

Gabriel Felipe Vieira

Membro Júnior
  • Posts

    4
  • Cadastrado em

  • Última visita

Reputação

3
  1. 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 obrigado pela ajuda!!!!
  2. #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 testar com 1 interação, so que nao consigo chegar no resultado esperado q é esse esse foi so um exemplo, pois preciso desse codigo para matriz nxn
  3. ja consegui resolver!!!! obrigado!!! adicionado 3 minutos depois eu estou com um outro caso com problema, tenho que resolver por gauss-jacobi... poderia me ajudar?? caso possa este é o link
  4. #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!!!!

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