Метод Гаусса на C#
Пытаюсь реализовать на Windows Form метод Гаусса. Для этого пишу функцию Гаусса. Вроде бы все условия алгоритма выполнил - а в ответ мне выдают весь вектор Х равен 0 ? В чём причина ? Код:
private void GAUSS(double[,] A, double[] B, int N, double[] X)
{
for (int i = 0; i < (N - 1); i++)
{
k = i;
R = Math.Abs(A[i, i]);
for (int j = i + 1; j < N; j++)
{
if (Math.Abs(A[j, i]) >= R)
{
k = j;
R = Math.Abs(A[j, i]);
}
if (R <= eps)
{
MessageBox.Show("Система вироджена");
return;
}
}
if (k != i)
{
for (int j = i; j < N; j++)
{
R = A[k, j];
A[k, j] = A[i, j];
A[i, j] = R;
}
R = B[k];
B[k] = B[i];
B[i] = R;
}
R = A[i, i];
B[i] = B[i] / R;
for (int j = 1; j < N; j++)
{
A[i, j] = A[i, j] / R;
}
for (int k = i + 1; k < N; k++)
{
R = A[k, i];
B[k] = B[k] - R * B[i];
A[k, i] = 0;
for (j = i + 1; j < N; j++)
{
A[k, j] = A[k, j] - R * A[i, j];
}
}
if (Math.Abs(A[N, N]) <= eps)
{
MessageBox.Show("Система вироджена");
return;
}
}
X[N-1] = B[N-1] / A[N-1, N-1];
for (int i = N - 1; 0 <= i; i--)
{
R = B[i];
for (int j = i + 1; j < N; j++)
{
R = R - A[i, j] * X[j];
}
X[i] = R;
}
}