You are on page 1of 6

Sistem liniar prin metoda Jacobi

2𝑥1 + 0.5𝑥2 + 0.6𝑥3 = 4.8


{ 0.2𝑥1 + 3𝑥2 − 2𝑥3 = 0.2
−0.3𝑥1 + 𝑥2 + 1.8𝑥3 = 7.1
Algoritm:
Test:
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <math.h>

#define N 7

typedef unsigned char LOGIC;

LOGIC Jacobi(int, float A[][N], float *, float *, float);

int main(void)
{
int i, j;
float er = 0.001;
float A[N][N], B[N], X[N];
int grad;

printf("\nIntroduceti gradul : ");


scanf("%d", &grad);
for (i = 1; i <= grad; i++)
for (j = 1; j <= grad; j++)
{
printf("\nA[%d][%d] = ", i, j);
scanf("%f", &A[i][j]);
}
for (i = 1; i <= grad; i++)
{
printf("\nB[%d] = ", i);
scanf("%f", &B[i]);
X[i] = B[i];
}

if (Jacobi(grad, A, B, X, er))
{
for (i = 1; i <= grad; i++) printf("\nX[%d] = %f", i, X[i]);
}
else printf("\nEroare");

getch();
return 1;
}

LOGIC Jacobi(int n, float A[][N], float *B, float *X, float er)
{
int i, j;
float sum;
float Xn[N], Xn_1[N];
LOGIC sem;
for (i = 1; i <= n; i++) {
sum = 0;
for (j = 1; j <= n; j++) sum = sum + fabs(A[i][j]);
if (sum>2 * fabs(A[i][i])) { return(0); }
}

for (i = 1; i <= n; i++) Xn[i] = X[i];


do {
sem = 1;
for (i = 1; i <= n; i++) Xn_1[i] = Xn[i];
for (i = 1; i <= n; i++)
{
Xn[i] = B[i];
for (j = 1; j <= n; j++) if (j != i) Xn[i] = Xn[i] - A[i][j] *
Xn_1[j];
Xn[i] = Xn[i] / A[i][i];
printf("\nXn[%d] = %f", i, Xn[i]);
}
printf("\n");

for (i = 1; i <= n; i++) if (fabs(Xn[i] - Xn_1[i])>er) sem = 0;


} while (sem == 0);

for (i = 1; i <= n; i++) X[i] = Xn[i];


return(1);
}

You might also like