如何将多个类似的输出转换为单个输出数组?

时间:2014-05-06 22:49:25

标签: arrays matlab

我有两个我迫切需要帮助的问题,所以我在这里发帖。

我知道这听起来像是一个问题很多的问题,但在我的研究中我没有找到类似的东西。

我正在尝试使用以下代码获取整行结果:

mu = [0 0];
sigma = [1 0.3; 0.3 1];

    for r1 = 1:7;
        r2 = 1;

        xu = [r1+1, r2+1];
        xl = [r1, r2];

        p1 = mvncdf(xl,xu,mu,sigma)
    end

我想说的是,对于r1所取的每个值(1到7之间),r2将采用值1,并且我想为这7个组合生成值。当我运行脚本时,我兴奋地得到了我想要的值,但是以这种形式:

p1 =

    0.0301


p1 =

    0.0062


p1 =

   4.5904e-04


p1 =

   1.2186e-05


p1 =

   1.1389e-07


p1 =

   3.7054e-10


p1 =

   4.1622e-13 

之后,当我进入我的工作区时,我有一个名为p1的变量,但它只等于生成的最后一个值 - 在本例中为4.1622e-13。是否可以生成一个包含所有7个数字的数组?

我的第二个问题与此问题有关。正如你所看到的,我使用r1范围从1到7,r2取值为1.真相是,我想评估它们的所有组合,r2也在1到7之间,但我手动完成,与其他7个相似的代码片段,每个代码片段的值为r2。是否有可能将所有内容组合在一起并以一种基于所有组合生成值矩阵的方式对其进行编码?我知道这可能会更困难,我更关心的是第一个问题。

1 个答案:

答案 0 :(得分:0)

对于您的第一个问题,您想要创建p1值的向量,因此只需修改您的代码:

p1(r1) = mvncdf(xl,xu,mu,sigma)

r1=1第一次循环时,会将结果放入p1的第一个元素中,依此类推。

对于问题的第二部分,您可以嵌套另一个for循环,如下所示:

for r1 = 1:7;
    for r2 = 1:7;
        xu = [r1+1, r2+1];
        xl = [r1, r2];

        p1(r1,r2) = mvncdf(xl,xu,mu,sigma)
    end
end

现在你将有一个矩阵p1,例如,(4,6)位置的条目对应r1=4r2=6

可以压缩它,

r1=1:7;
r2=1:7;
[R1,R2]=meshgrid(r1,r2);
p1=arrayfun(@(r1,r2) mvncdf([r1 r2],[r1+1 r2+1],mu,sigma),R1,R2)

但没有必要这样做。