【问题标题】:generating combinations in Matlab在 Matlab 中生成组合
【发布时间】:2015-03-07 14:01:28
【问题描述】:

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

为了更清楚: 输入是列向量 x 和阈值的元素数,输出是 x 值的不同可能组合,其中 x*x'

【问题讨论】:

    标签: matlab combinations


    【解决方案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
    

    【讨论】:

    • 错误使用 ==> double 从单元格转换为 double 是不可能的。
    • 如何概括这段代码?我的意思是如果阈值是一个随机值并且 x 的大小可能会改变?
    • @AmiraAkra 看看这是否会引发任何错误 - threshold = 4;A = repmat({0:threshold},1,threshold)?您使用的是哪个版本的 MATLAB?我之前基于单元格的方法是一个通用代码,但我怀疑您使用的是某些旧版本的 MATLAB,这会导致您之前看到的错误。
    • 我正在使用 7.10.0(R2010a)....并且没有错误是由 -A1 = combvec(A,A,A,A) 生成的。' -
    • @AmiraAkra threshold = 4;A = repmat({0:threshold},1,threshold) 有任何错误吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 2015-04-01
    • 2014-12-12
    • 2015-05-03
    • 2011-03-11
    • 2012-03-14
    • 1970-01-01
    相关资源
    最近更新 更多