我的Matlab代码需要你的帮助......
我想在循环中设置一个随机数(介于0和1之间):
for i=1:20
m1(i)= rand;
并且应该设置第二个随机数(n1(i),具体取决于第一个最大值0.2更大/更小但是至少0.1个更大/小于m1(i)而没有负值。
所以最后我想要两个数字介于0和1之间的向量,但是m1中的元素1和n1中的元素1不应该太大,但也不能太接近另一个...
非常感谢你的提示,我不明白......
答案 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);
答案 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