Каков хороший способ реализации исключения Гаусса, когда операторы являются пользовательскими, а не стандартными арифметическими?
Вот операторы:
Дополнительно:
0 + 0 = 0
0 + 1 = 1
1 + 1 = 0
Вычитание
0 - 0 = 0
0 - 1 = 1
1 - 1 = 0
Умножение:
0 * 0 = 0
0 * 1 = 0
1 * 1 = 1
Отдел:
0 / 0 = illegal
0 / 1 = 0
1 / 1 = 1
Вот примерный набор уравнений в виде расширенной матрицы с RHS в крайнем правом столбце:
1, 1, 0, 1, 0, 0, 0, 0, 0, 1
0, 1, 0, 1, 1, 0, 0, 0, 0, 1
0, 1, 1, 0, 0, 1, 0, 0, 0, 1
1, 0, 0, 1, 0, 0, 0, 0, 0, 1
0, 1, 0, 1, 1, 0, 0, 0, 0, 1
0, 0, 0, 0, 0, 1, 0, 0, 0, 1
0, 0, 0, 1, 0, 0, 1, 0, 0, 1
0, 0, 0, 1, 1, 0, 1, 1, 0, 1
0, 0, 0, 0, 0, 1, 0, 0, 1, 1
Решение для этого набора:
x1 = 1
x2 = 0
x3 = 0
x4 = 0
x5 = 1
x6 = 1
x7 = 1
x8 = 1
x9 = 0
Устранение Гаусса не удалось для меня, так как я попробовал его на этом наборе.
Уравнения будут иметь 9, 16, 25 или 36 членов. Было бы здорово, если бы алгоритм легко расширялся до больших квадратов, до 100.
Я ищу алгоритм, желательно в псевдокоде или JavaScript.