Matlab 如何组织数组中的参数值以输入函数?

Matlab 如何组织数组中的参数值以输入函数?,matlab,parameters,combinations,permutation,Matlab,Parameters,Combinations,Permutation,希望我能清楚地表达我的问题:我有一个概率密度函数,它是两个分布的卷积。我的函数要求为每个分布提供一个均值和方差对。我试图组织所有我想要评估的均值和方差对的不同组合 我要做的第一件事就是用以下代码形成一对: mm=linspace(.1, 1, 2); % mean values vv=linspace(.1, 2, 2); % variance values N=length(mm); n=length(vv); for i = 1:N for j = 1:n p{(i

希望我能清楚地表达我的问题:我有一个概率密度函数,它是两个分布的卷积。我的函数要求为每个分布提供一个均值和方差对。我试图组织所有我想要评估的均值和方差对的不同组合

我要做的第一件事就是用以下代码形成一对:

mm=linspace(.1, 1, 2); % mean values
vv=linspace(.1, 2, 2); % variance values
N=length(mm);
n=length(vv);

for i = 1:N
    for j = 1:n
        p{(i-1)*N+j} = [mm(i), vv(j)];
    end
end
所以我的配对是,
p{1}=[.1,1],p{2}=[.1,2],p{3}=[1.,.1],p{4}=[1,2.]
。现在,我坚持形成这些对的所有可能的组合,要求我没有任何“重复”-我所说的重复是指我的PDF不关心我是否输入
[p{1},p{2}]
[p{2},p{1}]
-它将计算相同的值(基本上,我的PDF是退出时间的分布,我只关心总时间,这就是顺序不重要的原因)

基本上,我想要一个如下所示的数组:

P(1) = [p{1}, p{1}], P(2) = [p{1}, p{2}],
P(3) = [p{1}, p{3}], P(4) = [p{1}, p{4}],
P(5) = [p{2}, p{2}], P(6) = [p{2}, p{3}],
P(7) = [p{2}, p{4}], P(8) = [p{3}, p{3}],
P(9) = [p{3}, p{4}], P(10) = [p{4}, p{4}]
我正试图这样做,但在索引上遇到了困难

for i = 1:N*n
    for j = i:N*n
        P = [p{i},p{j}];
    end
end

因此,一旦我解决了这个问题,我就可以将这十种组合输入我的PDF进行评估。这就引出了另一个问题——我的PDF是以这样的方式编写的:它包含4个参数
function Y=myPDF(m1,v1,m2,v2)
。例如,我如何将
[p{1},p{2}]
分开,以便
p{1}的均值和方差
将被分配到
m1、v1
等等。

一种索引方法使用,和:

然后,您可以使用这些索引引用您的数据:

P = cell(length(idx), 1);
for ii = 1:length(idx)
    P{ii} = {p(idx(ii, 1)), p(idx(ii, 2))};
end
也许有更好的方法可以做到这一点,但这是一个起点

编辑:对于问题的第二部分,您可以使用以下漂亮的代码行将所有内容转储到一个双数组中:

test = [reshape([p{idx(:,1)}], 2, [])', reshape([p{idx(:,2)}], 2, [])'];
返回:

test =

    0.1000    0.1000    0.1000    0.1000
    0.1000    0.1000    0.1000    2.0000
    0.1000    0.1000    1.0000    0.1000
    0.1000    0.1000    1.0000    2.0000
    0.1000    2.0000    0.1000    2.0000
    0.1000    2.0000    1.0000    0.1000
    0.1000    2.0000    1.0000    2.0000
    1.0000    0.1000    1.0000    0.1000
    1.0000    0.1000    1.0000    2.0000
    1.0000    2.0000    1.0000    2.0000

为什么在声明
mm
vv
时从2变为4。我每个值只有两个。我误解了这个问题。我更新了我的答案。我的问题不太清楚-我希望P不是一个单元格。与其做重塑来帮助解决我问题的第二部分,你看到一个pro了吗仅仅这样做的问题:
P=0(长度(idx,4);对于ii=1:length(idx)P(ii,:)=[P{idx(ii,1)},P{idx(ii,2)}]结束
P
与上面的
测试
相同。当然。如果您正在寻找
测试
,则不需要中间的
P
步骤;它只依赖于
P
idx
中的唯一排列(无需循环).我把它包括在内是因为这是你问题的一个步骤。
test =

    0.1000    0.1000    0.1000    0.1000
    0.1000    0.1000    0.1000    2.0000
    0.1000    0.1000    1.0000    0.1000
    0.1000    0.1000    1.0000    2.0000
    0.1000    2.0000    0.1000    2.0000
    0.1000    2.0000    1.0000    0.1000
    0.1000    2.0000    1.0000    2.0000
    1.0000    0.1000    1.0000    0.1000
    1.0000    0.1000    1.0000    2.0000
    1.0000    2.0000    1.0000    2.0000