在 Matlab 中生成组合

generating combinations in Matlab

我有一个由 4 个元素组成的列向量 x,如何生成 x 可以取的值的所有可能组合,使得 x*x' 小于或等于某个值? 请注意,x 的值是正整数。

更清楚一点: 输入是列向量 x 和阈值的元素数,输出是 x 值的不同可能组合,考虑到 x*x' <= threshold 示例:阈值为 4,x 为 4*1 列向量.....输出为 x=[0 0 0 0].[0 0 0 1],[1 1 1 1]......

看看这是否适合你 -

threshold = 4;
A = 0:threshold
A1 = allcomb(A,A,A,A)
%// Or use: A1 = combvec(A,A,A,A).' from Neural Network Toolbox
combs = A1(sum(A1.^2,2)<=threshold,:)

请注意,上面列出的代码使用了 allcomb from MATLAB File-exchange

输出-

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