Chcę rozwiązać układ równań (3x3) metodą Gaussa-Seidla. Wzorując się na tych stronach: strona1 strona2 strona3 napisałem taki kod:
#include <iostream>
#include <cmath>
#define epsilon 0.001
int main()
{
long double a[3][3], b[3], x[3], xo[3];
a[0][0] = 3; a[0][1] = -6.5; a[0][2] = 3.33; b[0] = 7;
a[1][0] = 4.7; a[1][1] = 8; a[1][2] = -17; b[1] = 5;
a[2][0] = 6; a[2][1] = 2; a[2][2] = 8; b[2] = -5.2;
//OBLICZONE KALKULATOREM: x=0,5063353908 y=-1,215147148 z=-0,725964756
int n = 3;
for (int i = 0; i < n; i++)
{
x[i] = b[i] / a[i][i];
}
do
{
for (int i = 0; i < n; i++)
{
xo[i] = x[i];
for (int j = 0; j < n; j++)
{
if (i != j) x[i] -= (a[i][j] * x[j]) / a[i][i];
}
}
} while (fabs(x[0] - xo[0]) < epsilon &&
fabs(x[1] - xo[1]) < epsilon &&
fabs(x[2] - xo[2]) < epsilon);
std::cout << "x = " << x[0] << std::endl;
std::cout << "y = " << x[1] << std::endl;
std::cout << "z = " << x[2] << std::endl;
return 0;
}
Wyniki się nie zgadzają z tymi obliczonymi przez kalkulator, ponad to nie wiem czemu (używam Visual'a) w linii 7 (przy deklaracji b[3]) pojawia się błąd "oczekiwano wyrażenia" (pomimo, że kilka linii później większość zmiennych jest inicjalizowana). Widzi ktoś błąd w tym kodzie? Dlaczego "kalkulator układów" nie działa prawidłowo?