Matlab 使用normrnd和给定的MU和SIGMA创建一个循环

Matlab 使用normrnd和给定的MU和SIGMA创建一个循环,matlab,for-loop,random,Matlab,For Loop,Random,这是一个很容易回答的问题,但到目前为止我还没有弄明白。我想使用给定的mus和sigmas,按照正态分布生成随机数,然后对这些数进行取整,并消除负数。最后,将创建的向量存储在一个名为sim的矩阵中。以下是给定的MU和SIGMA: m1=22.06; s1=16.06; m2=23.84; s2=72.39; m3=3.79; s3=3.4; m4=148.306; s4=125.81; m5=36.82; s5=15.64; 到目前为止,我有下一个代码: for i = 1: 5 R(i) =

这是一个很容易回答的问题,但到目前为止我还没有弄明白。我想使用给定的mus和sigmas,按照正态分布生成随机数,然后对这些数进行取整,并消除负数。最后,将创建的向量存储在一个名为sim的矩阵中。以下是给定的MU和SIGMA:

m1=22.06;
s1=16.06;
m2=23.84;
s2=72.39;
m3=3.79;
s3=3.4;
m4=148.306;
s4=125.81;
m5=36.82;
s5=15.64;
到目前为止,我有下一个代码:

for i = 1: 5 
R(i) = normrnd(m(i),s(i),[m,n]);%generate random number ND
R(i) = round(R(i));
[badrows,c]=find(R(i)<0);%find negatives ones
newR(i) = R(setdiff(1:size(R(i),1),badrows),:);%eliminate them
sim(:;i)= newR(i);
end
i=1:5时的

R(i)=normrnd(m(i),s(i),[m,n]);%生成随机数ND
R(i)=圆形(R(i));

[badrows,c]=找到(R(i)需要考虑的一些事情:

  • 您当前使用
    m
    作为R矩阵的平均值和第一维度的长度。-->我已将您的平均值重命名为
    mu
  • 对于后续迭代,
    newR
    的大小很可能会有所不同,因为您将删除R I为其制作的
    sim
    单元格的不同数量的条目
  • newR是二维的,在消除R的值时会引起问题,我把它限制在向量的情况下
  • 我不明白您是如何消除负值的-->我使用了更直接的方法

    mu = [22.06, 23.84, 3.79, 148.306, 36.82];
    s = [16.06,72.39,3.4,125.81,15.64];
    
    m = 20;
    
    for i = 1: 5 
        R = normrnd(mu(i),s(i),[1,m]);
        R = round(R);
        R(R<0) = [];
        sim{i}= num2cell(R);
    end
    
    mu=[22.06,23.84,3.79,148.306,36.82];
    s=[16.06,72.39,3.4125.81,15.64];
    m=20;
    对于i=1:5
    R=normrnd(mu(i),s(i),[1,m]);
    R=圆形(R);
    
    R(RIt做的正是我想要的。我意识到我在两个不同的事情上使用了相同的名称,这是我的第一个错误。我还知道newR将改变其大小,因为消除了负数。但是,我认为无论长度如何,它可以像列一样存储,而不是像行一样存储。我的疑问是:在ro中是否严格需要分配ws-form?您可以将它们存储为列,但可能会遇到相同的问题。要将它们存储为列,请尝试以下操作:
    R=normrnd(mu(i),s(i),[m,1]);
    感谢您的帮助!