2014-04-29 3 views
0

есть простая команда, чтобы сделать это:генерирует матрицу со всеми возможностями в MATLAB

M = 0 0 0 
    0 0 1 
    0 1 0 
    0 1 1 
    1 0 0 
    1 0 1 
    1 1 0 
    1 1 1 

я нашел http://www.mathworks.co.kr/matlabcentral/fileexchange/7147-combn--4-3-, но это еще не вещь в MATLAB

пытался M = combn([0 1],3) бо я получил Undefined function 'combn' for input arguments of type 'double'. in return

ответ

2

Простой подход заключается в генерации всех чисел от 0 до 2^n-1, где n является количество строк, и преобразовать их в бинарный код:

n = 3; 
result = dec2bin(0:2^n-1)-'0'; 

Или конкретизируем this Q&A к вашему делу.

+0

Умный, мне это нравится. – Raab70

+0

Простой и эффективный – TheGuyWithStreetCred

+0

Как я могу удалить векторы (1) в линию и сохранить остальные? – TheGuyWithStreetCred

2

Вы ищете функцию Matlab perms().

v0=[0 0 0]; 
v1=[1 0 0]; 
v2=[1 1 0]; 
v3=[1 1 1]; 
p1=perms(v1); 
p2=perms(v2); 
combs = cat(1,v0,p1,p2,v3); 

Это, конечно, дает все перестановки, означающие, что порядок имеет значение (даже для нулей) так, чтобы получить только уникальные комбинации вы могли бы использовать:

combs=unique(combs,'rows'); 

Что дает:

combs = 
    0  0  0 
    0  0  1 
    0  1  0 
    0  1  1 
    1  0  0 
    1  0  1 
    1  1  0 
    1  1  1 

В качестве примечания, если вы загрузили файл из обмена файлами, убедитесь, что он находится на вашем пути matlab или в вашем текущем каталоге, и это позволит избежать неизвестной ошибки функции. Вы можете прочитать о том, как путь от Matlab работает here

+0

Почему это было приостановлено? Прокомментируйте, как я могу улучшить ответ. – Raab70