作业帮 > 综合 > 作业

matlab如何产生不重复的随机数啊?

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/05/02 06:21:50
matlab如何产生不重复的随机数啊?
比如我想实现产生8个1-----100的随机数,而且不要重复,我自己另外写了一个函数,但是感觉写得不好,有没有现成可用的函数啊?
matlab如何产生不重复的随机数啊?
猜测楼主想要的是随机生成不重复的整数吧?如果是浮点数,直接用rand就行,重复的概率极低.
 
楼上的两个回答,一个生成的是浮点数,另一个不能保证抽样的均匀性(从结果可以看到,数据集中在10-30之间).
 
生成不重复整数的问题其实是一个不放回随机抽样的问题,可以使用下面的这个函数:
function s = sampling(R, n)
% 选择抽样,R为记录集合,n为抽取的样本数
% 算法参考:D. E. Knuth, TAOCP, vol.2, pp142,稍有改动
 
% 编写函数时用的测试数据
if ~nargin
    R = 1 : 8;
    n = 4;
end
 
N = length(R);
t = 0;   % 处理过的记录总数
m = 0;   % 已选得的记录数
 
while 1
    U  = rand;
    if (N-t)*U < n-m
        m = m + 1;
        s(m) = R(t+1);
        % 若已抽取到足够的记录,则算法终止
        if m >= n, break, end
    end
    t = t + 1;
end
 
调用实例:
>> sampling(1:100,8)
ans =
     8    21    24    31    42    85    91    92