随机数

rand(n):生成0到1之间的n阶随机数方阵 rand(m,n):生成0到1之间的m×n的随机数矩阵 (现成的函数)
Matlab随机数生成函数betarnd 贝塔分布的随机数生成器binornd 二项分布的随机数生成器chi2rnd 卡方分布的随机数生成器exprnd 指数分布的随机数生成器frnd f分布的随机数生成器gamrnd 伽玛分布的随机数生成器geornd 几何分布的随机数生成器hygernd 超几何分布的随机数生成器lognrnd 对数正态分布的随机数生成器nbinrnd 负二项分布的随机数生成器ncfrnd 非中心f分布的随机数生成器nctrnd 非中心t分布的随机数生成器ncx2rnd 非中心卡方分布的随机数生成器normrnd 正态(高斯)分布的随机数生成器poissrnd 泊松分布的随机数生成器raylrnd 瑞利分布的随机数生成器trnd 学生氏t分布的随机数生成器unidrnd 离散均匀分布的随机数生成器unifrnd 连续均匀分布的随机数生成器weibrnd 威布尔分布的随机数生成器
matlab中rand这个函数能产生[0,1]之间的随机数,但matlab的这个随机性我似乎理解错了。我打开matlab,输入rand(3,3),产生一个结果;然后我把matlab整个关掉,再重新打开它,再次输入rand(3,3),两次输出的结果居然一样,实验了n次都一样。但是如果不关闭软件直接输入两次rand(3,3),则出来不同的结果。这个随机性到底是怎么回事?注:我使用的matlab6.5
问题补充:有没有真正的产生随机数的办法。
很显然楼主对随机数的生成并没有概念, 一组真正的随机数的生成的计算量已经远大于一个一般的个人电脑所能承受的水平(也有生成几个数的运算量较小的算法,不过生成个数受算法限制),二维随机数则几乎在On时间可返回随机数,高效快速,楼主的问题是如何生成不同的随机个体,那么在程序前加如下一句话无疑最为方便 rand('state',sum(100*clock)) 这样就可以完成楼主所谓的随机了。
matlab随机函数rand使用中应注意的问题
rand产生的是0到1(不包括1)的随机数.
matlab的rand函数生的是伪随机数,即由种子递推出来的,相同的种子,生成相同的随机数.
matlab刚运行起来时,种子都为初始值,因此每次第一次执行rand得到的随机数都是相同的.
1.多次运行,生成相同的随机数方法:
用rand('state',S)设定种子S为35阶向量,最简单的设为0就好
例:
rand('state',0);rand(10)
2. 任何生成相同的随机数方法:
试着产生和时间相关的随机数,种子与当前时间有关.
rand('state',sum(100*clock))
即:
rand('state',sum(100*clock)) ;rand(10)
只要执行rand('state',sum(100*clock)) ;的当前计算机时间不现,生成的随机值就不现.
也就是如果时间相同,生成的随机数还是会相同.
在你计算机速度足够快的情况下,试运行一下:
rand('state',sum(100*clock));A=rand(5,5);rand('state',sum(100*clock));B=rand(5,5);
A和B是相同.
所以建议再增加一个随机变量,变成:
rand('state',sum(100*clock)*rand(1));
%
据说matlab 的rand 函数还存在其它的根本性的问题,似乎是非随机性问题.
没具体研究及讨论,验证过,不感多言.
       
C++中的意思
*转:rand()的用法rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。 这样,如果你要产生0~10的整数,可以表达为:  int N = rand() % 11;这样,N的值就是一个0~10的随机数,如果要产生1~10,则是这样:  int N = 1 + rand() % 10;  总结来说,可以表示为:  a + rand() % n其中的a是起始值,n是整数的范围。  a + rand() % (b-a+1) 就表示 a~b之间的一个随机数若要0~1的小数,则可以先取得0~10的整数,然后均除以10即可得到随机到十分位的10个随机小数,若要得到随机到百分位的随机小数,则需要先得到0~100的10个整数,然后均除以100,其它情况依此类推。
// C++随机函数(VC program)#include <stdio.h>#include <iostream>#include <time.h>using namespace std;#define MAX 100int main(int argc, char* argv[]){srand( (unsigned)time( NULL ) );//srand()函数产生一个以当前时间开始的随机种子   for (int i=0;i<10;i++)   cout<<rand()%MAX<<endl;//MAX为最大值,其随机域为0~MAX-1   return 0;}*
1、求助]关于randn 函数的一个问题
查了下资料
randn函数用于产生均值0。方差为1的随机序列
但是我输入如下语言
y=randn(1,100)
显示出来的随机序列数字,怎么有绝对值大于1的?
请哪位大虾解释下 ,大谢~

是啊 那位高手给指点下啊seed=[12345 54321];rand('state',seed(1));randn('state',seed(2));是什么作用呢!
seed就是做一个随机的种子,以这个种子为起始点进行随机,至于随机的算法有很多,基本的一种是大数求余法从种子这个层面上来说,随机也不是很随机
方差为1,而不是绝对值。产生的这些随机数的方差为1
2、我想生成同一个序列,怎么办?是不是可以赋与一个seed之类的?
这样的话,我先运行一遍程序关了,再重新运行生成的还是一样吗?能给一个简单的演示程序吗?先谢过了
用rand('state',S)设定种子S为35阶向量,最简单的设为0就好你试验一下就知道了,是一样的rand('state',0);rand(10)这条语句什么时候执行输出都一样
给一个seed并不能让输出变成真正的random,seed只是改变了输出序列的开始值。【 在 sjtuyh (net) 的大作中提到: 】: 我一般这样做:: rand('state', sum(100*clock));: 由当前时间来确定初态。: 要不然你每次打开matlab, randn输出的结果一样。: 说白来了是pseudo-random.
设取值区间为[a,b],则要在此区间选取一个随机数,程序为:a=rand()*(b-a)+a若要求随机数是整数,则程序为:a=ceil(rand()*(b-a))+a这样即可!!!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值