Matlab:随机数取决于另一个

时间:2017-05-16 17:25:56

标签: matlab random dependencies intervals

我的Matlab代码需要你的帮助......

我想在循环中设置一个随机数(介于0和1之间):

 for i=1:20
m1(i)= rand;

并且应该设置第二个随机数(n1(i),具体取决于第一个最大值0.2更大/更小但是至少0.1个更大/小于m1(i)而没有负值。

所以最后我想要两个数字介于0和1之间的向量,但是m1中的元素1和n1中的元素1不应该太大,但也不能太接近另一个...

非常感谢你的提示,我不明白......

4 个答案:

答案 0 :(得分:0)

这应该有效

for i=1:20
    m1(i)=rand;
    a=.2;% desired range
    n1(i) = (m1(i)-a).*rand(1,1) + m1(i)/2; % creating the second random vector 
  end

答案 1 :(得分:0)

N = 100;
m = rand(N,1); %random numbers in [0 1]
n1 = rand(N,1); %random numbers in [0 1]
%now we want to change the range of n from [0 1] to [m+0.1 m+0.2]
n1 = n1*0.1; %random numbers in [0 0.1]
n1 = n1+m+0.1; %random numbers in [m+0.1 m+0.2]

%to get a range [m-0.2 m-0.1]
n2 = rand(N,1); %random numbers in [0 1]
n2 = n2*0.1; %random numbers in [0 0.1]
n2 = n2-0.2+m; 

%but if n2 is negative we should have n1
n2(n2<0) = n1(n2<0);

%random put half the indexes as n1
[~,idx] = sort(rand(N,1));
n2(idx(1:floor(N/2)))=n1(idx(1:floor(N/2)));

n2是你的载体。

答案 2 :(得分:0)

尝试了几个解决方案,这是我提出的第一个完整的解决方案。适合所有以下约束

  • .1 < |m-n| < .2
  • 0 < m < 1
  • 0 < n < 1

我的while循环不是有效的,它比n [i]乘以[0,1]更简洁,更容易实现;它还保持随机分布。您知道,0 < n < 1约束会将n偏向相对于m的.5

ub = .2;
lb = .1;

for i = 1:1000
  m(i) = rand;


  n(i) = -1;
  % Determine n with [0,1] constraints
  while(n(i)<0 || n(i)>1)    
    n(i) = 2*(ub-lb)*rand + m(i)-(ub-lb);     % Determine the upper bound shell
    n(i) = n(i) + sign(n(i)-m(i))*lb;      % Add the lower bound
  end
  y(i) = m(i) - n(i);                    % Check the difference

end


figure;
hist(y,100);

m-n

答案 3 :(得分:0)

这是一个线性化的解决方案:

len = 10000;                  %length of your vector
m1  = rand(len,1);            %input vector
g = (randi([0,1],len,1)*2-1); %random [-1 or 1] generator
a = 0.1.*m1.*g+m1;            %use a = 0.1.*g+m1 for an absolute [0.1,0.2] interval
b = 0.2.*m1.*g+m1;            %use b = 0.2.*g+m1 for an absolute [0.1,0.2] interval
n1 = a + (b-a).*rand(len,1);  %output vector