输出不同的变化变量

时间:2016-12-29 12:42:19

标签: matlab variables numbers

我有4个变量a,b,c,d。 a可以变化1,2即a = 1,2,b = 1,2,3,c = 1,2,3,4,d = 1,2,3,4,5所以通过改变我想要的每个元素输出值即

a b c d      output
1 1 1 1        1
1 1 1 2        2
1 1 1 3        3
1 1 1 4        4
1 1 1 5        5

现在改变c为1值,d为所有值,即

a b c d      output
1 1 2 1        6
1 1 2 2        7
1 1 2 3        8
1 1 2 4        9
1 1 2 5        10

现在将c更改为3并执行上述操作,以便输出为11,12,13,14,15。当c达到最大变化极限然后改变b,即

a b c d      output
1 2 1 1        16
1 2 1 2        17
1 2 1 3        18
1 2 1 4        19
1 2 1 5        20

然后

a b c d      output
1 2 2 1        21
1 2 2 2        22
1 2 2 3        23
1 2 2 4        24
1 2 2 5        25

所以这样我想继续并想要输出a,b,c,d的所有条件。所以如何做到这一点或任何方程式在matlab中做到这一点。在上面的a,b,c,d变化2,3,4,5,即按升序排列,但在一般情况下,它们可以在不增加顺序的情况下变化,例如, a,b,c,d可以变化7,4,9,13。

1 个答案:

答案 0 :(得分:1)

一种可能的算法可能是逐列构建组合,考虑从数组d

开始重写eache值的次数

定义:

  • len_a数组的长度a
  • len_b数组的长度b
  • len_c数组的长度c
  • len_d数组的长度d

您需要复制d数组len_a * len_b * len_c次。

数组c需要被复制len_c * len_d次以覆盖“右侧”组合,这组数据必须被复制len_a * len_b次以解释“左” “来”。

类似的方法适用于数组ab的定义。

以“随机”序列获得组合集就足够了 使用randperm函数。

% Define the input arrays
a=1:2;
len_a=length(a);
b=1:3;
len_b=length(b);
c=1:4;
len_c=length(c);
d=1:5;
len_d=length(d);
% Generate the fourth column of the table
% 
d1=repmat(d',len_a*len_b*len_c,1)
% 
% Generate the third column of the table
c1=repmat(reshape(bsxfun(@plus,zeros(len_d,1),[1:len_c]),len_c*len_d,1),len_a*len_b,1)
% 
% Generate the second column of the table
b1=repmat(reshape(bsxfun(@plus,zeros(len_c*len_d,1),[1:len_b]),len_b*len_c*len_d,1),len_a,1)
% 
% Generate the first column of the table
a1=reshape(bsxfun(@plus,zeros(len_b*len_c*len_d,1),[1:len_a]),len_a*len_b*len_c*len_d,1)
% 
% Merge the colums and add the counter in the fifth column
combination_set_1=[a1 b1 c1 d1 (1:len_a*len_b*len_c*len_d)']
% Randomize the rows
combination_set_2=combination_set_1(randperm(len_a*len_b*len_c*len_d),:)

输出:

  1   1   1   1         1 
  1   1   1   2         2 
  1   1   1   3         3 
  1   1   1   4         4 
  1   1   1   5         5 

  1   1   2   1         6 
  1   1   2   2         7 
  1   1   2   3         8 
  1   1   2   4         9 
  1   1   2   5        10 

  1   1   3   1        11 
  1   1   3   2        12 
  1   1   3   3        13 
  1   1   3   4        14 
  1   1   3   5        15 

  1   1   4   1        16 
  1   1   4   2        17 
  1   1   4   3        18 
  1   1   4   4        19 
  1   1   4   5        20 

  1   2   1   1        21 
  1   2   1   2        22 
  1   2   1   3        23 
  1   2   1   4        24 
  1   2   1   5        25 

  1   2   2   1        26 
  1   2   2   2        27 
  1   2   2   3        28 
  1   2   2   4        29 
  1   2   2   5        30 

  1   2   3   1        31 
  1   2   3   2        32 
  1   2   3   3        33 
  1   2   3   4        34 
  1   2   3   5        35 

  1   2   4   1        36 
  1   2   4   2        37 
  1   2   4   3        38 
  1   2   4   4        39 
  1   2   4   5        40 

  1   3   1   1        41 
  1   3   1   2        42 
  1   3   1   3        43 
  1   3   1   4        44 
  1   3   1   5        45 

  1   3   2   1        46 
  1   3   2   2        47 
  1   3   2   3        48 
  1   3   2   4        49 
  1   3   2   5        50 

  1   3   3   1        51 
  1   3   3   2        52 
  1   3   3   3        53 
  1   3   3   4        54 
  1   3   3   5        55 

  1   3   4   1        56 
  1   3   4   2        57 
  1   3   4   3        58 
  1   3   4   4        59 
  1   3   4   5        60 

  2   1   1   1        61 
  2   1   1   2        62 
  2   1   1   3        63 
  2   1   1   4        64 
  2   1   1   5        65 

  2   1   2   1        66 
  2   1   2   2        67 
  2   1   2   3        68 
  2   1   2   4        69 
  2   1   2   5        70 

  2   1   3   1        71 
  2   1   3   2        72 
  2   1   3   3        73 
  2   1   3   4        74 
  2   1   3   5        75 

  2   1   4   1        76 
  2   1   4   2        77 
  2   1   4   3        78 
  2   1   4   4        79 
  2   1   4   5        80 

  2   2   1   1        81 
  2   2   1   2        82 
  2   2   1   3        83 
  2   2   1   4        84 
  2   2   1   5        85 

  2   2   2   1        86 
  2   2   2   2        87 
  2   2   2   3        88 
  2   2   2   4        89 
  2   2   2   5        90 

  2   2   3   1        91 
  2   2   3   2        92 
  2   2   3   3        93 
  2   2   3   4        94 
  2   2   3   5        95 

  2   2   4   1        96 
  2   2   4   2        97 
  2   2   4   3        98 
  2   2   4   4        99 
  2   2   4   5       100 

  2   3   1   1       101 
  2   3   1   2       102 
  2   3   1   3       103 
  2   3   1   4       104 
  2   3   1   5       105 

  2   3   2   1       106 
  2   3   2   2       107 
  2   3   2   3       108 
  2   3   2   4       109 
  2   3   2   5       110 

  2   3   3   1       111 
  2   3   3   2       112 
  2   3   3   3       113 
  2   3   3   4       114 
  2   3   3   5       115 

  2   3   4   1       116 
  2   3   4   2       117 
  2   3   4   3       118 
  2   3   4   4       119 
  2   3   4   5       120 

希望这有帮助。

Qapla'