近期在完成一项项目时,遇到一个问题,就是生成0-1之间的随机数,且要求不同区间之间的权重不同,如0-0.8权重为0.3,0.8-1权重为0.7。由此背景,基于MATLAB的rand函数写了一个分区间不同权重随机数生成函数。
%%
%权重区间随机数生成函数
function [SX]=SS(sn,w,smax) %sn生成随机数的个数,w大区间所在的概率,smax大区间起始位置
SX=zeros(sn,1);
for i=1:sn
t=rand(1,1);
if t<w
SX(i,1)=rand(1,1)*(1-smax)+smax;
else
SX(i,1)=rand(1,1)*smax;
end
end
end
其中sn,为要生成随机数的个数,生成的随机数构成一个列向量。w为大区间的概率,如0.8-1我们期望概率为0.7,则设定w=0.7;smax为大区间的其实位置,0.8-1,则设定smax=0.8.
clc;
clear all;
t=SS(100,0.7,0.8);
function [SX]=SS(sn,w,smax) %sn生成随机数的个数,w大区间所在的概率,smax大区间起始位置
SX=zeros(sn,1);
for i=1:sn
t=rand(1,1);
if t<w
SX(i,1)=rand(1,1)*(1-smax)+smax;
else
SX(i,1)=rand(1,1)*smax;
end
end
end