Линейная комбинация матрицы / вектора - PullRequest
5 голосов
/ 03 февраля 2011

B - матрица [1x8], которую также можно рассматривать как две половины следующим образом:

B = -1 -1 0 0   0 0 1 1

Здесь могут быть одна, две, три или четыре -1 в первойполовина, и во втором тайме должно быть равное количество 1.Это должно быть сделано в линейных комбинациях.

Например, если в первой половине есть два -1, они могут быть размещены 4 choose 2 = 6 способами, и для каждого из них будет 6способы размещения двух 1 во второй половине.Таким образом, система имеет в общей сложности 6 * 6 = 36 способов.то есть 36 различных значений для B, если в первой половине есть два -1.

Как я могу это сделать?

Ответы [ 2 ]

5 голосов
/ 03 февраля 2011

Вы можете сначала сгенерировать все возможные перестановки единиц и нулей, а затем выбросить лишние.

%# make permutations using dec2bin (start from 17 since it's the first solution)
allB = str2double(num2cell(dec2bin(17:255)));

%# change sign in the first half, then check that the total is ok
allB(:,1:4) = - allB(:,1:4);
allB = allB(sum(allB,2)==0,:);

Каждая строка allB является возможным значением для B

2 голосов
/ 03 февраля 2011

Вот еще одно решение:

%# generate all possible version of first half
h1 = num2cell(-(dec2bin(1:15)-'0'),2);

%# generate all possible version of second half
h2 = arrayfun(@(i) unique(perms([zeros(1,4-i) ones(1,i)]),'rows'), (1:4)', 'UniformOutput',false);

%'# number of 1s in each row of h1
n = -cellfun(@sum, h1);

%# get final result by combining h1 and h2
B = cellfun(@(a,b) [repmat(a,size(b,1),1) b], h1, h2(n), 'UniformOutput',false);
B = cell2mat(B);

Результат:

B =
     0     0     0    -1     0     0     0     1
     0     0     0    -1     0     0     1     0
     0     0     0    -1     0     1     0     0
     0     0     0    -1     1     0     0     0
     0     0    -1     0     0     0     0     1
     0     0    -1     0     0     0     1     0
     0     0    -1     0     0     1     0     0
     0     0    -1     0     1     0     0     0
     0     0    -1    -1     0     0     1     1
     0     0    -1    -1     0     1     0     1
     0     0    -1    -1     0     1     1     0
     0     0    -1    -1     1     0     0     1
     0     0    -1    -1     1     0     1     0
     0     0    -1    -1     1     1     0     0
     0    -1     0     0     0     0     0     1
     0    -1     0     0     0     0     1     0
     0    -1     0     0     0     1     0     0
     0    -1     0     0     1     0     0     0
     0    -1     0    -1     0     0     1     1
     0    -1     0    -1     0     1     0     1
     0    -1     0    -1     0     1     1     0
     0    -1     0    -1     1     0     0     1
     0    -1     0    -1     1     0     1     0
     0    -1     0    -1     1     1     0     0
     0    -1    -1     0     0     0     1     1
     0    -1    -1     0     0     1     0     1
     0    -1    -1     0     0     1     1     0
     0    -1    -1     0     1     0     0     1
     0    -1    -1     0     1     0     1     0
     0    -1    -1     0     1     1     0     0
     0    -1    -1    -1     0     1     1     1
     0    -1    -1    -1     1     0     1     1
     0    -1    -1    -1     1     1     0     1
     0    -1    -1    -1     1     1     1     0
    -1     0     0     0     0     0     0     1
    -1     0     0     0     0     0     1     0
    -1     0     0     0     0     1     0     0
    -1     0     0     0     1     0     0     0
    -1     0     0    -1     0     0     1     1
    -1     0     0    -1     0     1     0     1
    -1     0     0    -1     0     1     1     0
    -1     0     0    -1     1     0     0     1
    -1     0     0    -1     1     0     1     0
    -1     0     0    -1     1     1     0     0
    -1     0    -1     0     0     0     1     1
    -1     0    -1     0     0     1     0     1
    -1     0    -1     0     0     1     1     0
    -1     0    -1     0     1     0     0     1
    -1     0    -1     0     1     0     1     0
    -1     0    -1     0     1     1     0     0
    -1     0    -1    -1     0     1     1     1
    -1     0    -1    -1     1     0     1     1
    -1     0    -1    -1     1     1     0     1
    -1     0    -1    -1     1     1     1     0
    -1    -1     0     0     0     0     1     1
    -1    -1     0     0     0     1     0     1
    -1    -1     0     0     0     1     1     0
    -1    -1     0     0     1     0     0     1
    -1    -1     0     0     1     0     1     0
    -1    -1     0     0     1     1     0     0
    -1    -1     0    -1     0     1     1     1
    -1    -1     0    -1     1     0     1     1
    -1    -1     0    -1     1     1     0     1
    -1    -1     0    -1     1     1     1     0
    -1    -1    -1     0     0     1     1     1
    -1    -1    -1     0     1     0     1     1
    -1    -1    -1     0     1     1     0     1
    -1    -1    -1     0     1     1     1     0
    -1    -1    -1    -1     1     1     1     1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...