Как решить линейное прямоугольное матричное уравнение по модулю 2?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как решить линейное прямоугольное матричное уравнение по модулю 2?

Сообщение Anonymous »

Я пытаюсь решить линейное матричное уравнение AX = B с помощью Python, где A,B,X — двоичные матрицы, т.е. над GF(2):

Код: Выделить всё

A = np.array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1],
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0],
[1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0]])
Я знаю, что A имеет ранг 11 и форму (11,12). т. е. A — широкая прямоугольная матрица с большим количеством переменных, чем уравнений. Таким образом, скорее всего, существует свободная переменная и параметризованное решение.
RHS, B в уравнении имеет вид:

Код: Выделить всё

B = np.array([[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1]])
Который, как я также могу вычислить, имеет ранг 11.
Я хочу найти линейные комбинации строк в A, которые дают B. В идеале включены замены строк .
  • Обычные методы Python (

    Код: Выделить всё

    np.linalg.solve(A,B)
    ) нельзя использовать напрямую, поскольку A и B не являются квадратными матрицами.
  • Следующим я попробовал решатель numpy в Галуа . Поскольку это конечные матрицы полей, я использую первый вариант Галуа, чтобы обернуть их в объекты mod 2,

    Код: Выделить всё

    import galois     GF = galois.GF(2)    A1 = GF(A)
  • Но проблема с неквадратной матрицей остается: заполнение избыточными строками делает матрицу сингулярной, а линейную систему неразрешимой с помощью np.linalg.solve или scipy.linalg.solve.
  • Далее я получил эшелон с сокращенным количеством строк форма, рассчитанная с помощью A1.row_reduce() для объекта Галуа

Код: Выделить всё

A1.row_reduce() = GF([[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1]], order=2)
(Из вышеизложенного легко увидеть сумму последовательных строк, чтобы получить RHS, т.е. строка 1 + строка 2 с сокращением строк дает B), но функция galois rref не помогает мне прийти в X или последовательности явных операций для преобразования A в B. Я знаю, что решение существует из-за равенства рангов и сокращенной формы строк, я просто не знаю, как найти X.
tldr; как решить широкую прямоугольную (т.е. неквадратную) систему уравнений с матрицами по модулю 2, используя Python?

Подробнее здесь: https://stackoverflow.com/questions/787 ... over-mod-2
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Решите двоичное матричное уравнение, обратимое в большем векторном пространстве, но не в ограниченном пространстве.
    Anonymous » » в форуме Python
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Gekko, использующий APOPT, не оптимизирует ни одно линейное уравнение, представленное в виде PWL.
    Anonymous » » в форуме Python
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Gekko, использующий APOPT, не оптимизирует ни одно линейное уравнение, представленное в виде PWL.
    Anonymous » » в форуме Python
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Кривая не линейное уравнение
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Кривая не линейное уравнение
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»