我是靠谱客的博主 无私人生,最近开发中收集的这篇文章主要介绍matlab的RandStream和伪随机数的重复生成,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

matlab的随机数生成函数

rand 生成均匀分布的伪随机数,分布在0~1之间
randn 生成标准正态分布的伪随机数,均值为0,方差为1

  • rand(m,n)生成m行n列的均匀分布的伪随机数
  • rand(RandStream,m,n)利用指定的RandStream(可认为是随机种子)控制伪随机数

randi 生成均匀分布的伪随机整数

  • randi([iMin,iMax],m,n)在(iMin,iMax)生成mxn随机矩阵

伪随机数的重复生成,关于随机种子

matlab的rand虽然生成的是伪随机数,但每次生成结果也是不同的,
想要做重复性实验,matlab文档的Managing the Default Stream(管理默认流)章节讲到,

rand, randn, and randi draw random numbers from anunderlying random number stream, called the default stream. The @RandStream class allows you to get a handle to the default streamand control random number generation.

也就是说,rand,randn和randi从一个基础的随机数流中得到随机数,称作默认流。

①通过RandStream类得到默认流的句柄从而控制随机数的生成。

% 得到默认流句柄
defaultStream = RandStream.getDefaultStream;
% state属性是发生器的内部状态,用来保存默认流状态
myState = defaultStream.State;
% 利用myState恢复默认流状态重复前面的结果
A = rand(1,100);
defaultStream.State = myState;
B = rand(1,100);
% B==A

②直接使用RandStream类的reset静态方法重置种子状态来获取相同的随机数

% 获取默认的随机种子
stream = RandStream.getDefaultStream;
reset(stream); % 重置
A = rand(stream,1,3);
reset(stream); % 重置
B = rand(stream,1,3);
% B==A

最后

以上就是无私人生为你收集整理的matlab的RandStream和伪随机数的重复生成的全部内容,希望文章能够帮你解决matlab的RandStream和伪随机数的重复生成所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部