首页 > 编程知识 正文

matlab随机数组,随机数产生函数

时间:2023-05-04 05:01:33 阅读:119842 作者:2345

要说matlab的随机函数,首先要说伪随机数。 但是,我也只能从MATLAB APP的角度,从使用时的概念的角度来整理自己粗浅的理解。 关于数学上的东西,我没有认真看过。 真随机数必须由现实世界中随机发生的物理事件产生,如放射性物质随机数发生器根据某一放射性物质释放的粒子数得到随机数,或从电路产生高频噪声得到随机数等。 但是,该硬件随机数发生器的价格比较高,例如使用比较广泛的ComScire的随机数发生器的价格为895美元,约在6000元以上。 但是,很多软件、PC都需要使用随机数,这样昂贵的价格对于一般的APP应用来说,不能为每个PC购买硬件随机数发生器。 基于这种原因,出现了利用软件方法产生随机数的算法。 通过软件方法生成的随机数都不是真随机数,所以是伪随机数。 伪随机数是指找到符合一定概率分布的庞大数量的组。 然后,该小组可以通过适当的随机性测试。 这样,我们就可以用这个组“顶替”真随机数来应用。 但是,其本质只是用规定的数量来近似真随机数表示的相关性质,所以有时会不能满足应用的要求,或者“随机性质不够”。 像目前应用最广泛的伪随机数生成算法一样,线性联合算法不能满足蒙特卡罗模拟对随机性的要求。 matlab默认使用的随机数生成算法Mersennetwister是目前优秀的伪随机数生成算法,可以应用于蒙特卡罗模拟等各种场合。 满足不同分布的所有伪随机数可通过对均匀分布的伪随机数进行数学变换来获得。 均匀分布伪随机数的生成算法是伪随机数生成算法的基础。 前面的线性联合算法,Mersennetwister算法,是均匀分布的伪随机数的生成算法。 伪随机数的生成一般是首先选择种子,根据该种子根据具体的生成算法计算得到伪随机数,利用该伪随机数根据生成算法递归地计算下一个伪随机数,直到计算出所有不重复的伪随机数为止。 这个伪随机数序列是我们接下来要使用的伪随机数序列。 上面的计算过程可以一次计算,也可以使用一次递归计算。 每次生成的伪随机数是这个伪随机数序列中的一个。 但是,无论如何,只要种子确定,生成算法确定,该列就确定。 种子是指伪随机数计算的初始值。 既然是固定的,用某种算法计算得出伪随机数,下一次计算时出现的数也就是固定的,既然是固定的,可能会被问到有什么随机性。 这就是伪随机数的“伪”。 伪随机数的“随机”是指该出现模式和整个伪随机数序列都能通过大部分随机性测试实验,尽管在下次计算中出现的数量是确定的。 这表明,对于随机性测试实验来说,伪随机数的表达接近真随机数。 因此,在不太苛刻的应用场合,我们可以使用这样的伪随机数来近似使用时的外在表示和真随机数。 现在我们来讨论一下matlab的随机函数,matlab的随机函数生成的所有随机数都是基于伪随机数序列获取的。 v7.7和更高版本包括以下伪随机数发生器: Mersennetwister,multiplicativecongruentialgenerator (ultiplicativelaggedfibonaccigenerator,combinedmultiplerecursivegegenerer 可以在shift-registergeneratorsummedwithlinearcongrueserator,Ift-registergenerator相关命令中选择其他生成器。

默认情况下,matlab在启动时始终将每个生成器的种子设置为0。 这样,每次生成的包含随机函数的程序的执行结果都是一定的。 要更改这种情况,请将系统时间设置为种子。 (rand stream.set default stream (rand stream ) ' mt19937AR )、) )。 从7.7版开始,随机序列的生成通过RandStream对象实现,与7.7版和更早版本不同。 RandStream对象的使用简要说明如下:生成随机数首先需要通过设置种子和生成算法确定的伪随机数序列,而RandStream的构造函数或RandStream.create方法然后,必须使用RandStream.setDefaultStream函数将指定的序列对象设置为当前matlab中使用的序列。 而且,可以以rand等函数使用该序列生成随机数。 当然,您可以使用rand函数指定从哪个序列生成随机数,而不用将其设置为缺省序列。 流=rand stream (' mrg 32k 3a ' ); 使用rand(stream,1,5 ) RandStream.create函数,例如[s1,s2,s3]=randstream.create(mrg32k3a ',' NumStreams ) R2=rand (S2,100000,1 ); R3=rand (S3,100000,1 ); corrcoef([r1,r2,r3]表示为了使前后2次生成的随机数相同,递归计算的随机数

程中的伪随机数状态记录下来,然后下一次计算总是基于这个记录下来的伪随机数状态来进行,这样每次计算得到的随机数就总是相同的: defaultStream = RandStream.getDefaultStream; savedState = defaultStream.State; u1 = rand(1,5) defaultStream.State = savedState; u2 = rand(1,5) 各个指令具体的使用方法可以通过helpdesk命令,搜索RandStream来查看。v7.7以上版本为了与旧版本保持兼容,保留了原来如 rand('state',0)这种伪随机序列设置方法,称之为legacy mode,有关legacy mode的内容也可以在RandStream项中找到。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。