#include <stdio.h>
#include <math.h>
#define ERROR 0.001 // erro, precissao
#define N 3 // Tamanho da matriz (linhas do sistema linear)
void main (){
int i, j;
// Declara a matriz com os coeficientes e respostas
float A[N][N] = {{3, -0.1, -0.2},
{0.1, 7, -0.3},
{0.3, -0.2, 10}};
// Declara matriz com os resultados
float b[N][1] = {{7.85},
{-19.3},
{71.4},
{15}};
// Declarar o vetor de chute inicial
float x[N][1] = {{0},
{0},
{0},
{0}};
// Declara o vetor do x velho para calcular o erro
float xAntigo[N][1] = {{0},
{0},
{0},
{0}};
// Declara bandeira que indica quando parar
float xError[N][1] = {{0},
{0},
{0},
{0}};
// Erro que vai pra 1 quando todos os esrros forem no minimo menor que o ERROR
int erro = 0;
// Loop do metodo
do {
// Loop para
for (i = 0; i < N; i++) {
float s = 0;
// Calculando o somatorio do conjunto x das iterações
//usando a regra de cramer
for (j = 0; j < N; j++) {
if (j != i)
s = s + A[i][j]*x[j][0];//lop para calcular o Ax
}
// Faz (bi - s) / Aii ser o x
x[i][0] = ((b[i][0] - s)/ A[i][i]);//lop para calcular o B-somatorio / A
}
//criterio da convergencia
for (i = 0; i<N; i++){
xError[i][0] = (fabs((x[i][0]- xAntigo[i][0]) / x[i][0])) * 100;
if (xError[i][0] >= ERROR){
erro = 1;//erro como uma questão de parada
}else{
erro = 0;
}
xAntigo[i][0] = x[i][0];
}
printf("\n");
for (i = 0; i <N; i++){
printf("X%i = %f\t |Er| = %f\n",i+1, x[i][0], xError[i][0]);
}
} while (erro != 0);
}
4 comentários:
Cara, na parte que você declara a matriz dos termos independentes eu não entendi esse "15" que você colocou.
EU também não entedi esse 15, ta dando erro de compilação
Na hora que ele foi colocar os valores nos vetores ele colocou 4 valores mas esta definido N=3, por isso ele não aceita. Além disso o compilador pode reclamar desse void main aí, mas é só colocar int e return 0 no final que compila suave.
Obrigado, ajudou muito!
Postar um comentário