Метод Зейделя решения СЛУ

Задача заключается в том, чтобы найти приближенное решение с помощью метода Зейделя, но программа выводит нули и не продолжает итерацию. Хотелось бы понять в чем заключается ошибка.

#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]);
}

Ответы (0 шт):