Matlab创建实验列表的设计

时间:2014-11-26 21:26:45

标签: matlab matrix

我想要通过Matlab代码运行一系列条件

Var1 = {'A1', 'B1'};
Var2 = {'A2', 'B2', 'C2', 'D2'};
Var3 = {2.5, 3, 3.5, 4, 4.5};
Var4 = {2E-6, 5E-6, 10E-6, 0.25E-3, 0.5E-3, 1E-3, 2E-3};
Var5 = {5, 10, 15, 20, 25, 30, 40, 50, 60, 70, 80, 90, 100, 125, 150, 200};

有没有一种简单的方法可以创建一个具有所有2 * 4 * 5 * 7 * 16组合的矩阵(或单元阵列)?

1 个答案:

答案 0 :(得分:1)

结果需要是一个单元格数组,因为矩阵不能同时包含数字和字符串。

这个question and its answers实现了你想要的功能,但是使用矢量输入(而不是单元阵列输入)。所以你可以

  1. 将每个输入变量转换为数字向量,以用作索引;
  2. 生成所有组合;
  3. 通过索引转换回来。
  4. 代码:

    %// Step 1:
    vectors = {1:numel(Var1), 1:numel(Var2), 1:numel(Var3), 1:numel(Var4), 1:numel(Var5)};
    %// Step 2:
    n = numel(vectors);
    combs = cell(1,n);
    [combs{end:-1:1}] = ndgrid(vectors{end:-1:1});
    combs = cat(n+1, combs{:});
    combs = reshape(combs,[],n);
    %// Step 3:
    result = [Var1(combs(:,1)).' Var2(combs(:,2)).' Var3(combs(:,3)).' ...
        Var4(combs(:,4)).' Var5(combs(:,5)).'];
    

    在您的示例中,这会生成以下4480x5单元格数组:

    result = 
        'A1'    'A2'    [2.5000]    [2.0000e-006]    [  5]
        'A1'    'A2'    [2.5000]    [2.0000e-006]    [ 10]
        'A1'    'A2'    [2.5000]    [2.0000e-006]    [ 15]
            ...
        'B1'    'D2'    [4.5000]    [     0.0020]    [150]
        'B1'    'D2'    [4.5000]    [     0.0020]    [200]