Метод Гаусса ошибка в коде C#

Сразу к делу. У меня есть список битовых массивов, где каждый битовый массив в списке - это показатели степеней простых из факторной базы в разложении определённого числа, взятые по модулю 2. Мне нужно найти линейную зависимость между этими векторами (битовыми массивами). Число простых - P, число векторов - P + 1. В интернете нашёл реализацию метода Гаусса, но там на вход должна поступать матрица не в том формате, в котором у меня всё хранится, приходится её транспонировать. Ну и дополнять столбцом свободных членов. Делаю это так.

var A = new List<BitArray>(P + 1);
        for (int i = 0; i < P; i++)
        {
            A.Add(new BitArray(P + 1));
            for (int j = 0; j < P + 1; j++)
            {
                A[i][j] = e[j][i];
            }
        }

Далее эту матрицу подаю в реализацию метода Гаусса.

BitArray Gauss(List<BitArray> matrix)
        {
            BitArray result = new BitArray(matrix[0].Count);
            int[] where = new int[matrix[0].Count];
            for (int i = 0; i < where.Length; i++)
            {
                where[i] = -1;
            }
            for (int col = 0, row = 0; col < matrix[0].Length && row < matrix.Count; ++col)
            {
                for (int i = row; i < matrix.Count; ++i)
                    if (matrix[i][col])
                    {
                        var c = matrix[i];
                        matrix[i] = matrix[row];
                        matrix[row] = c;
                        break;
                    }
                if (!matrix[row][col])
                    continue;
                where[col] = row;

                for (int i = 0; i < matrix.Count; ++i)
                    if (i != row && matrix[i][col])
                        matrix[i] = matrix[i].Xor(matrix[row]);
                ++row;
            }
            for (int i = 0; i < matrix[0].Length; ++i)
                if (where[i] != -1)
                    result[i] = matrix[where[i]][matrix[0].Length - 1] ^ matrix[where[i]][i];
            return result;
        }

Где у меня ошибки в коде и как их исправить?


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