Метод Зейделя решения СЛУ
Задача заключается в том, чтобы найти приближенное решение с помощью метода Зейделя, но программа выводит нули и не продолжает итерацию. Хотелось бы понять в чем заключается ошибка.
#include <stdio.h>
#include <math.h>
double diff (int n, double x1[n], double x2[n]) {
double s;
int i;
for(i = 0; i < n; i++)
s += fabs((x2[i] - x1[i]) * (x2[i] - x1[i]));
return s;
}
double seidel (int n, double x1[n], double x2[n], double(*a)[n], double f[n]) {
double s = 0;
int i, j;
for(i = 0; i < n; i++) {
s = 0;
for(j = 0; j < i-1; j++) {
s += a[i][j] * x2[j];
}
for(j = i+1; j < n; j++) {
s += a[i][j] * x1[j];
}
x2[i] = (f[i] - s) / a[i][i];
}
}
int main () {
double eps;
int n, j, i;
puts("Add N:");
scanf ("%d", &n);
puts("Add eps:");
scanf ("%lf", &eps);
double a[n][n], f[n], x1[n], x2[n];
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
scanf ("%lf", &a[i][j]);
for(i = 0; i < n; i++)
scanf ("%lf", &f[n]);
for(i = 0; i < n; i++) {
x2[i] = 0;
}
do {
for( i = 0; i < n; i++)
x1[i] = x2[i];
seidel(n, x1, x2, a, f);
} while(diff(n, x1, x2) > eps * eps);
for(i = 0; i < n; i++)
printf ("% .2lf\n", x2[i]);
}