Найдите количество элементов x
, используя numel
.Сгенерируйте все возможные комбинации в базе 10, используя оператор colon
.Преобразуйте их в базовый 2-символьный вектор, используя dec2bin
.Разделите их на отдельные двойные элементы, вычитая '0'
.Теперь sum
над вторым измерением, чтобы получить g
.
g = sum(dec2bin(0:2^numel(x)-1)-'0', 2);
Обратите внимание, что по мере увеличения числа переменных потребуется больше памяти.например, в вашем примере с 30 переменными (30 таких переменных в рабочей области не очень хорошая идея), 8,2 ГБ памяти потребуется для g
, и для обработки потребуется больше памяти.Вы можете сделать что-то вроде этого для такого случая:
g = repmat(uint8(0),1,2^numel(x));
for k = 0:2^numel(x)-1
g(k+1) = sum(dec2bin(k)-'0', 2);
end
Но учтите, что uint8
имеет свои пределы (0-255)