Решаване на набор от линейни уравнения върху двоично поле

Трябва да реша набор от линейни уравнения върху двоичното поле, а именно, имам матрица M и трябва да намеря вектор v, така че M.v=0 (mod 2), където всички елементи на матрица M и вектор v са 0 или 1 и от дясната страна е вектор, чиито всички компоненти са четни числа. Има ли някакъв добър начин да го програмирате в Mathematica или Matlab?


person Mr. Gentleman    schedule 11.08.2014    source източник
comment
Това беше зададено [преди] [1] в stackoverflow, потърсете линейни конгруенции: [1]: stackoverflow.com/questions/13339989/   -  person Bram    schedule 11.08.2014
comment
Какъв размер е v? Възможен ли е подход с груба сила?   -  person Luis Mendo    schedule 11.08.2014
comment
@Bram, благодаря ти, но този алгоритъм не се прилага за случай с множество променливи   -  person Mr. Gentleman    schedule 11.08.2014
comment
В Mathematica NullSpace[m, Modulus->2] ще направи това.   -  person Daniel Lichtblau    schedule 13.08.2014
comment
@DanielLichtblau: Благодаря ви много!   -  person Mr. Gentleman    schedule 13.08.2014


Отговори (1)


Ако броят на колоните на M не е твърде голям, може да се използва подход с груба сила:

M = [0 1 0 1; 1 0 0 1; 1 1 1 0]; %// example matrix M
V = (dec2bin(0:2^size(M,2)-1)-'0').'; %// all possible vectors v, as columns of V
ind = all(mod(M*V, 2)==0); %// index of solution vectors
solutions = V(:,ind); %// each column is a solution vector

В този пример,

solutions =
     0     1
     0     1
     0     0
     0     1
person Luis Mendo    schedule 11.08.2014
comment
Благодаря ви много, но M и v обикновено имат няколкостотин записа... - person Mr. Gentleman; 11.08.2014
comment
Модифицирането на RHS може да направи необходима груба сила. - person Yvon; 11.08.2014