rand系列函数

rand系列函数
rand系列函数

1,rand生成均匀分布的伪随机数。分布在(0~1)之间

主要语法:rand(m,n)生成m行n列的均匀分布的伪随机数

rand(m,n,'double')生成指定精度的均匀分布的伪随机数,参数还可以是'single'

rand(RandStream,m,n)利用指定的RandStream(我理解为随机种子)生成伪随机数rand(n):生成0到1之间的n阶随机数方阵

rand(m,n):生成0到1之间的m×n的随机数矩阵

2,randn生成标准正态分布的伪随机数(均值为0,方差为1)

主要语法:和上面一样

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

主要语法:randi(iMax)在闭区间[1,iMax]生成均匀分布的伪随机整数

randi(iMax,m,n)在闭区间[1,iMax]生成mXn型随机矩阵

randi([iMin,iMax],m,n)在闭区间[iMin,iMax]生成mXn型随机矩阵

4,randperm随机打乱一个数字序列

randperm(n):产生一个1到n的随机顺序。

>> randperm(10)

ans =

6 4 8 9 3 5

7 10 2 1

p = randperm(n,k) 返回一行从1到n的整数中的k个,而且这k个数也是不相同的。randperm完成的是不重复的重排采样(k-permutations),如果结果中的数需要重复多次出现的情况,则可以用:randi(n,1,k)。

5,randerr函数

randerr(20,7)产生什么矩阵?

产生一个20×7的矩阵,矩阵每一行随机有一个元素为1,其余的为0

out2 = randerr(8,7,[0 2; .25 .75])

每行出现零个错误的概率是25%

出现2个错误的概率是75%(值为1表示出现错误)

(1)产生随机矩阵,并返回制定范围内的元素

>a = randi([-50 50], 1, 100);

>b = find(a > 20 & a < 40)2

(2)产生一个元素为0和1,size为100×5的随机矩阵,返回元素全为1的行。

>a = randi([0, 1], 100, 5)

>b=find(all(a,2))3

(3)随机产生10个12位的0、1二进制序列,要求每个序列中包含7个1和5个0的形式。%程序如下

>N =10;

>data = randerr(N, 12, 7)';

>data = data( : )';

>str1 = dec2bin(data);

>str2 = reshape(str1, 12, N);

>seque = str2'

6,randint函数

randint(n,m)产生的是一个n*m维的矩阵,矩阵的元素或者是0或者是1,是随机的。如果想产生一个范围的数,可以设置一个区间,如randint(2,3,[1 6]),就是产生一个2*3随机矩阵,这个矩阵的元素是区间[1 6]的随机数。

还有这种情况,用一个数字来表示区间,比如,matlab中randint(num,N,3) 表示生产一个num*N的矩阵,矩阵中元素取值范围为[0,(3-1)]

若那个数值为负,比如matlab中randint(num,N,-3),则表示区间为[-3+1,0]

7,randsrc

randsrc

无参数形式,随机输出-1或1;

randsrc(m,n);

randsrc(m);

输出m*n阶或m*m阶矩阵,元素为随机出现的-1或1,概率为1/2;

EXCEL中的随机函数

在EXCEL中设一个公式:=INT(RAND()(33-1)+1), 浏览次数:26次悬赏分:0 |解决时间:2011-7-15 23:48 |提问者:592379518 最佳答案 公式错误,乘号不能省. =INT(RAND()*(33-1)+1) 意思为:产生1~32的随机数,若要产生1~33的随机数,公式可改成: =1+ROUND(RAND()*(33-1),) 或者 =1+INT(RAND()*33) 用Excel随即函数=INT(33*RAND()+1)产生了随机函数,但是怎么让它一直固定某个数字不改变呢? 浏览次数:308次悬赏分:0 |解决时间:2011-4-20 17:35 |提问者:炒牛奶 比如我在A1输入:=INT(33*RAND()+1) 然后A1显示了一个随机数字,比如9 但是如果我在A2里面也输入:=INT(33*RAND()+1) 然后A2里面也出现了一个随机数字24,但是同时A1里面的随机数字再次随机了一下,变了 怎么样让A1第一次随机显示出9后,永远就是9,无论我后面在其他单元格再次输入随机函数,A1还是显示9不变 最佳答案 这个很简单呀,点菜单中的“工具”.点“选项”,点“重新计算”,“手动重算”那里打勾,确认就可以了.

要用EXCEL中的随机函数rand函数返回1-33之间的6个整数,该如何编程?如果在SPSS的环境里呢? 浏览次数:809次悬赏分:0 |解决时间:2010-5-15 06:45 |提问者:ibeauty_ftes 最佳答案 =INT(RAND()*(33-1+1)) 向下拖六行 要用EXCEL中的随机函数rand函数返回0-36之间的随机数,该如何做?试编辑一个公式达到该目的 浏览次数:1675次悬赏分:5 |解决时间:2007-9-3 14:30 |提问者:monkey2004574 最佳答案 =RAND()*36 EXCEL随机函数RAND() 浏览次数:1635次悬赏分:10 |解决时间:2008-3-30 11:16 |提问者:lizhidan1120 我想在0、5、10 中间随机生成一个数可以么? 该怎么做!!望高人指点!!谢谢!!!! 最佳答案 =IF(RAND()>0.3,IF(RAND()>0.6,10,5),0) 其他回答共1条十三级 =INT(RAND()*3)*5 已向网友提问等?

matlab中常见函数功用

⊙在matlab中clear,clc,clf,hold作用介绍 clear是清变量, clc只清屏, clf清除图形窗口上的旧图形, hold on是为了显示多幅图像时,防止新的窗口替代旧的窗口。 ①format:设置输出格式 对浮点性变量,缺省为format short. format并不影响matlab如何计算和存储变量的值。对浮点型变量的计算,即单精度或双精度,按合适的浮点精度进行,而不论变量是如何显示的。对整型变量采用整型数据。整型变量总是根据不同的类(class)以合适的数据位显示,例如,3位数字显示显示int8范围-128:127。 format short, long不影响整型变量的显示。 format long 显示15位双精度,7为单精度(scaled fixed point) format short 显示5位(scaled fixed point format with 5 digits) format short eng 至少5位加3位指数 format long eng 16位加至少3位指数 format hex 十六进制 format bank 2个十进制位 format + 正、负或零 format rat 有理数近似 format short 缺省显示 format long g 对双精度,显示15位定点或浮点格式,对单精度,显示7位定点或浮点格式。 format short g 5位定点或浮点格式 format short e 5位浮点格式 format long e 双精度为15位浮点格式,单精度为7为浮点格式 ②plot函数 基本形式 >> y=[0 0.58 0.70 0.95 0.83 0.25]; >> plot(y) 生成的图形是以序号为横坐标、数组y的数值为纵坐标画出的折线。 >> x=linspace(0,2*pi,30); % 生成一组线性等距的数值 >> y=sin(x); >> plot(x,y) 生成的图形是上30个点连成的光滑的正弦曲线。 多重线 在同一个画面上可以画许多条曲线,只需多给出几个数组,例如 >> x=0:pi/15:2*pi; >> y=sin(x); >> w=cos(x);

matlab随机信号分析常用函数

随机信号分析常用函数及示例 1、熟悉练习使用下列MATLAB函数,给出各个函数的功能说明和内部参数的意 义,并给出至少一个使用例子和运行结果。 rand(): 函数功能:生成均匀分布的伪随机数 使用方法: r = rand(n) 生成n*n的包含标准均匀分布的随机矩阵,其元素在(0,1)内。 rand(m,n)或rand([m,n]) 生成的m*n随机矩阵。 rand(m,n,p,...)或rand([m,n,p,...]) 生成的m*n*p随机矩数组。 rand () 产生一个随机数。 rand(size(A)) 生成与数组A大小相同的随机数组。 r = rand(..., 'double')或r = rand(..., 'single') 返回指定类型的标准随机数,其中double指随机数为双精度浮点数,single 指随机数为单精度浮点数。 例:r=rand(3,4); 运行结果: r= 0.4235 0.4329 0.7604 0.2091 0.5155 0.2259 0.5298 0.3798 0.3340 0.5798 0.6405 0.7833 randn(): 函数功能:生成正态分布伪随机数 使用方法: r = randn(n) 生成n*n的包含标准正态分布的随机矩阵。 randn(m,n)或randn([m,n]) 生成的m*n随机矩阵。 randn(m,n,p,...)或randn([m,n,p,...]) 生成的m*n*p随机矩数组。 randn () 产生一个随机数。 randn(size(A)) 生成与数组A大小相同的随机数组。 r = randn(..., 'double')或r = randn(..., 'single') 返回指定类型的标准随机数,其中double指随机数为双精度浮点数,single 指随机数为单精度浮点数。 例:

用c语言产生随机数rand()

用c语言产生随机数rand() 在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。 可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C标准,所以说,random函数不能在gcc,vc等编译器下编译通过。 rand()会返回一随机数值,范围在0至RAND_MAX 间。返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,(其值至少为32767)我运算的结果是一个不定的数,要看你定义的变量类型,int整形的话就是32767。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。一般用for语句来设置种子的个数。具体见下面的例子。

一如何产生不可预见的随机序列呢 利用srand((unsigned int)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的。 在C语言里所提供的随机数发生器的用法:现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下: 1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535; 2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间) 3) 根据需要多次调用rand(),从而不间断地得到新的随机数; 4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。 下面是0~32767之间的随机数程序: #include #include #include //使用当前时钟做种子 void main( void ) {int i; srand( (unsigned)time( NULL ) ); //初始化随机数 for( i = 0; i < 10;i++ ) //打印出10个随机数

C语言随机函数

编程时有时需要随机输入一些数,这是调用随机函数可以完成此相命令. # include “stdio.h” # include “stdlib.h” # include “time.h” /*需引用的头文件*/ srand((unsigned)time(NULL)); /*随机种子*/ n=rand()%(Y-X+1)+X; /*n为X~Y之间的随机数*/ int rand(void) 函数int rand( void );返回的是一个界于0~32767(0x7FFF)之间的伪随机数,包括0和32767。C预先生成一组随机数,每次调用随机函数时从指针所指向的位置开始取值,因此使用rand()重复运行程序产生的随机数都是相同的,可以通过srand()函数来改变指针位置。 void srand( unsigned int seed ) 改变随机数表的指针位置(用seed变量控制)。一般配合time(NULL)使用,因为时间每时每刻都在改变,产生的seed值都不同。 一直被这个东西弄得模糊不清,终于又去整理了一下.弥补一些细节 主要是对rand()函数的使用//#include 原型int rand(void); 例如:void myrand(int imax) { assert(imax>0); int num = rand(); if(num<=imax) { return num; } else { return (num%imax); }

} 功能产生0到RAND_MAX之间的随机整数.至于RAND_MAX有多大,可以自己编程的时候输出.这是库里自带的宏定义. 像这样的一个函数,就产生了一个0到imax的随机整数.但是,当你多次运行你会发现,每一次产生的值都是一样的.并不是说没有随机,而是随机数发生器(程序产生的随机数是依靠时钟钟断来产生的.因此并不是真正意义上的随机.但对于我们来说,已经够用了)没有被重置.导致结果相同.那下面就看一下几种初始化随机数发生器的办法. srand()函数: 原型: void srand(unsigned seed) 功能: 产生随机数的起始发生数据,和rand函数配合使用 头文件: stdlib.h time.h 例: #include #include #include int main(void) { int i; time_t t;

Matlab中的randperm和randsample函数用法对比

Matlab中的randperm和randsample函数用法对比 构建替代数据的时候,一种常见的思路是打乱原数据的排列次序,通过随机置换原数据的排列次序从而产生和原数据系列统计特征(如均值、方差、分布)一致的随机数据。具体到Matlab中,此思路的实现会涉及到两个命令:randperm和randsample p.s. 相关的重新排序命令还包括: 1 2 3 4 5 6 7 8 9 Reordering Algorithms amd Approximate minimum degree permutation colamd Column approximate minimum degree permutation colperm Sparse column permutation based on nonzero count dmperm Dulmage-Mendelsohn decomposition ldl Block LDL' factorization for Hermitian indefinite matrices randperm Random permutation symamd Symmetric approximate minimum degree permutation symrcm Sparse reverse Cuthill-McKee ordering 1、RANDPERM 根据Matlab文档,randperm最常用的用法是是返回一个从1-n的包含n个数的随机排列(每个数字只出现一次)——以行向量的形式 1 p = randperm(n) returns a row vector containing a random permutation of the integers from 1 to n inclusive 如果希望从1-n的数字序列里面随机返回k个数,则可以使用 1 p = randperm(n,k) 其中,这k个数之间彼此也是不相同的。可见,randperm能够产生不重复的随机排列,结合原数据, 可写成类似下面的形式: 1 new = old( randperm( size(old,1) ) , : ); 这样新数组中的各行就被重排了。如果各列也需要重排,则可以嵌套使用。 Matlab文档中还说,randperm完成的是不重复的重排采样(k-permutations),如果结果中的数需要 重复多次出现的情况,则可以用: 1 randi(n,1,k) randperm和rand、randi、randn一样,其随机数的生成是收到rng命令控制的,因此,可通过该命令影响随机数据流rand stream的情况。 2、RANDSAMPLE randsample的命令组合比randperm要复杂,事实上这个命令内部也有对randperm的调用。因此,在适当的情况下,使用randperm的速度理论上比randsample快。(事实上也快很多) randsample的命令格式: 1 2 3 4 5 6 y = randsample(n,k) y = randsample(population,k) y = randsample(n,k,replacement) y = randsample(population,k,replacement) y = randsample(n,k,true,w) y = randsample(population,k,true,w)

MATLAB各种随机函数生成器

2009年03月20日星期五 03:25 P.M. 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 威布尔分布的随机数生成器 (From:/question/30033707.html) matlab生成随机数据 matlab本身提供很多的函数来生成各种各样的随机数据: normrnd 可以生成一定均值和标准差的正态分布 gamrnd 可以生成gamma分布的伪随机数矩阵 chi2rnd 可以生成卡方分布的伪随机数矩阵 trnd 可以生成t分布的伪随机数矩阵 frnd 可以生成f分布的伪随机数矩阵 raylrnd 可以生成rayleigh分布的伪随机数矩阵

rand系列函数

1,rand生成均匀分布的伪随机数。分布在(0~1)之间 主要语法:rand(m,n)生成m行n列的均匀分布的伪随机数 rand(m,n,'double')生成指定精度的均匀分布的伪随机数,参数还可以是'single' rand(RandStream,m,n)利用指定的RandStream(我理解为随机种子)生成伪随机数rand(n):生成0到1之间的n阶随机数方阵 rand(m,n):生成0到1之间的m×n的随机数矩阵 2,randn生成标准正态分布的伪随机数(均值为0,方差为1) 主要语法:和上面一样 3, randi生成均匀分布的伪随机整数 主要语法:randi(iMax)在闭区间[1,iMax]生成均匀分布的伪随机整数 randi(iMax,m,n)在闭区间[1,iMax]生成mXn型随机矩阵 randi([iMin,iMax],m,n)在闭区间[iMin,iMax]生成mXn型随机矩阵 4,randperm随机打乱一个数字序列 randperm(n):产生一个1到n的随机顺序。 >> randperm(10) ans = 6 4 8 9 3 5 7 10 2 1 p = randperm(n,k) 返回一行从1到n的整数中的k个,而且这k个数也是不相同的。randperm完成的是不重复的重排采样(k-permutations),如果结果中的数需要重复多次出现的情况,则可以用:randi(n,1,k)。 5,randerr函数 randerr(20,7)产生什么矩阵? 产生一个20×7的矩阵,矩阵每一行随机有一个元素为1,其余的为0 out2 = randerr(8,7,[0 2; .25 .75]) 每行出现零个错误的概率是25% 出现2个错误的概率是75%(值为1表示出现错误) (1)产生随机矩阵,并返回制定范围内的元素 >a = randi([-50 50], 1, 100); >b = find(a > 20 & a < 40)2 (2)产生一个元素为0和1,size为100×5的随机矩阵,返回元素全为1的行。 >a = randi([0, 1], 100, 5) >b=find(all(a,2))3 (3)随机产生10个12位的0、1二进制序列,要求每个序列中包含7个1和5个0的形式。%程序如下 >N =10; >data = randerr(N, 12, 7)'; >data = data( : )'; >str1 = dec2bin(data); >str2 = reshape(str1, 12, N); >seque = str2'

Excel的随机数函数

Excel的随机数函数 1、生成随机数字(1)生成随机数比较简单,=rand()即可生成0-1之间的随机数;(2)如果要是整数,就用=int(rand())*10,表示0至9的整数,以此类推;(3)如果要生成a与b 之间的随机实数,就用=rand()*(b-a)+a,如果是要整数就用=int(rand()*(b-a))+a;稍微扩充一下,就能产生固定位数的整数了。注意:如果要使用函数rand()生成一随机数,并且使之不随单元格计算而改变,可以在编辑栏中输入“=rand()”,保持编辑状态,然后按F9,将公式永久性地改为随机数。不过,这样只能一个一个的永久性更改,如果数字比较多,也可以全部选择之后,另外选择一个合适的位置粘贴,粘贴的方法是点击右键,选择“选择性粘贴”,然后选择“数值”,即可将之前复制的随机数公式产生的数值(而不是公式)复制下来! 2、产生随机字母随机小写字母:=CHAR(INT(RAND()*26)+97) 随机大写字母:=CHAR(I NT(RAND()*26)+65) 随机大小写混合字母:=CHAR(INT(RAND()*26)+if(INT(RAND()*2) =0,65,97)) 3、随机不重复数字序列的生成方法 (1)在A1-A52间填入"=INT(RAND()*52)+1",产生1-52间的随机数,注意这里是有重复的 (2)在B1-B52间填入1-52 (3)在C54-BB54填入1-52 (4)在C1填入"=IF(ROW()=C$54,I NDEX(B$1:B$52,INDEX($A$1:$A$52,C$54)),IF(ROW()=INDEX($A$1:$A$52,C$54),INDEX (B$1:B$52,C$54),B1))"。分项解释: a:ROW()=C$54,如果当前行等于当前交换所排的序号 b:INDEX(B$1:B$52,INDEX($A$1:$A$52,C$54)),返回在B1到B52中选择A1:A 52中的第C54个值 c:IF(ROW()=INDEX($A$1:$A$52,C$54),否则的话,如果当前行等于A1:A52中第C54个值,则: d:INDEX(B$1:B$52,C$54),返回B1:B52中的第C54个值 e:若以上条件都不满足,则返回B1 (5)将C1复制到C1:BA52这个区域里面,在BA1: BA52中,我们就得到了一个不重复的随机序列,

EXCEL随机函数实例

EXCEL随机函数实例 excel中如何随机选择不重复的数: excel中带有一个随机函数rand(),但rand()只选取0~1之间的随机数,而且两个数不保证不重复。因此就用到了函数rank。 1、假设要在1~100中随机抽取5个不重复的数。 2、在A1~A100中输入=rand()。 ;也就是在A1~A100中随机抽取了100个0~1之间的随机数。 3、在C1中输入=RANK(A1,A:A);C2中输入=RANK(A2,A:A);C3中输入=RANK(A3,A:A)……以此类推。 ;目标单元格C1~C5。 ;其实,C1~C5中显示的是A1~A5在100个随机数中的排序。 4、已成功抽取1~100中的5个随机数。按ctrl+r刷新。 1、生成随机数字 (1)生成随机数比较简单,=rand()即可生成0-1之间的随机数; (2)如果要是整数,就用=int(rand()*10),表示0至9的整数,以此类推; (3)如果要生成a与b之间的随机实数,就用=rand()*(b-a)+a,如果是要整数就用=int(rand()*(b-a))+a;稍微扩充一下,就能产生固定位数的整数了。 注意:如果要使用函数rand()生成一随机数,并且使之不随单元格计算而改变,可以在编辑栏中输入“=rand()”,保持编辑状态,然后按F9,将公式永久性地改为随机数。不过,这样只能一个一个的永久性更改,如果数字比较多,也可以全部选择之后,另外选择一个合适的位置粘贴,粘贴的方法是点击右键,选择“选择性粘贴”,然后选择“数值”,即可将之前复制的随机数公式产生的数值(而不是公式)复制下来! 2、产生随机字母 随机小写字母:=CHAR(INT(RAND()*26)+97) 随机大写字母:=CHAR(INT(RAND()*26)+65) 随机大小写混合字母:=CHAR(INT(RAND()*26)+if(INT(RAND()*2)=0,65,97)) 3、产生随机的六位数的字母和数字混合 =CONCA TENATE(IF(INT(RAND()*2)=0,CHAR(INT(RAND()*9+48)),IF(INT(RAND()*2)=0, CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*25+97)))),IF(INT(RAND()*2)=0,CHAR(IN T(RAND()*9+48)),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*2

(完整版)matlab函数大全最完整版

MATLAB函数大全 Matlab有没有求矩阵行数/列数/维数的函数? ndims(A)返回A的维数 size(A)返回A各个维的最大元素个数 length(A)返回max(size(A)) [m,n]=size(A)如果A是二维数组,返回行数和列数nnz(A)返回A中非0元素的个数 MATLAB的取整函数:fix(x), floor(x) :,ceil(x) , round(x) (1)fix(x) : 截尾取整. >> fix( [3.12 -3.12]) ans = 3 -3 (2)floor(x):不超过x 的最大整数.(高斯取整) >> floor( [3.12 -3.12]) ans =

3 -4 (3)ceil(x) : 大于x 的最小整数>> ceil( [3.12 -3.12]) ans = 4 -3 (4)四舍五入取整 >> round(3.12 -3.12) ans = >> round([3.12 -3.12]) ans =

3 -3 >> 如何用matlab生成随机数函数 rand(1) rand(n):生成0到1之间的n阶随机数方阵rand(m,n):生成0到1之间的m×n的随机数矩阵(现成的函数) 另外: Matlab随机数生成函数 betarnd 贝塔分布的随机数生成器 binornd 二项分布的随机数生成器 chi2rnd 卡方分布的随机数生成器 exprnd 指数分布的随机数生成器 frnd f分布的随机数生成器 gamrnd 伽玛分布的随机数生成器 geornd 几何分布的随机数生成器 hygernd 超几何分布的随机数生成器

标准库rand()函数的缺陷以及Blitz++随机数生成的简介

标准库rand()函数的缺陷以及Blitz++随机数生成的简介 (newsuppy,转载请注明出处) 当我们需要在某个任务中使用随机数,通常我们习惯于使用标准库的rand函数。像这样:srand(time(0)); //时间种子 rand() % MAX_RAND; 标准库的rand函数使用线性同余算法,是生成速度相当快的一种随机数生成算法。在多数情况下也确实能满足我们的要求,但是对于一些特殊目的应用这个算法生成的随机数是不行的,比如某些加密算法,蒙特卡罗积分等(在.NET中创建随机密码的加密安全随机数就不能使用Random类的线性同余随机数,而要使用System.Security.Cryptography命名空间中的相关随机数生成类)。 这个线性同余算法的实现可以在很多书籍中找到。下面我给出一个The C Programming Langurage 2nd中的一个实现,这也是普遍使用的标准库随机数算法的实现: unsigned long int next =1; /* rand: return pseudo-random integer on 0..32767 */ int rand(void) { next = next *1103515245+12345; return(unsigned int)(next/65536)%32768; } /* srand: set seed for rand() */ void srand(unsignedint seed) { next = seed; } 这个实现的问题在于rand函数return行中的那个32768,在标准库中这个数字定义为RAND_MAX宏,在VisualC++和Mingw32编译器的stdlib.h头文件(或者cstdlib)中你都可以发现RAND_MAX的值为32768。也就是说这个算法的随机数分布在0--RAND_MAX中,而在一般编译器中就是0--32768。假设你的算法需要的是300000多个的随机数,那么使用rand函数会产生重负次数近30次的随机数!

Matlab中常用的函数集

sort (排序) xlsread ( exl文件导入) load (txt 文件,mat文件等导入) 附录Ⅰ工具箱函数汇总 Ⅰ.1 统计工具箱函数 表Ⅰ-1 概率密度函数 函数名对应分布的概率密度函数 betapdf 贝塔分布的概率密度函数 binopdf 二项分布的概率密度函数 chi2pdf 卡方分布的概率密度函数 exppdf 指数分布的概率密度函数 fpdf f分布的概率密度函数 gampdf 伽玛分布的概率密度函数 geopdf 几何分布的概率密度函数 hygepdf 超几何分布的概率密度函数normpdf 正态(高斯)分布的概率密度函数lognpdf 对数正态分布的概率密度函数nbinpdf 负二项分布的概率密度函数 ncfpdf 非中心f分布的概率密度函数nctpdf 非中心t分布的概率密度函数 ncx2pdf 非中心卡方分布的概率密度函数poisspdf 泊松分布的概率密度函数 raylpdf 雷利分布的概率密度函数 tpdf 学生氏t分布的概率密度函数unidpdf 离散均匀分布的概率密度函数unifpdf 连续均匀分布的概率密度函数weibpdf 威布尔分布的概率密度函数 表Ⅰ-2 累加分布函数 函数名对应分布的累加函数 betacdf 贝塔分布的累加函数 binocdf 二项分布的累加函数 chi2cdf 卡方分布的累加函数 expcdf 指数分布的累加函数 fcdf f分布的累加函数 gamcdf 伽玛分布的累加函数 geocdf 几何分布的累加函数 hygecdf 超几何分布的累加函数

logncdf 对数正态分布的累加函数 nbincdf 负二项分布的累加函数 ncfcdf 非中心f分布的累加函数 nctcdf 非中心t分布的累加函数 ncx2cdf 非中心卡方分布的累加函数 normcdf 正态(高斯)分布的累加函数 poisscdf 泊松分布的累加函数 raylcdf 雷利分布的累加函数 tcdf 学生氏t分布的累加函数 unidcdf 离散均匀分布的累加函数 unifcdf 连续均匀分布的累加函数 weibcdf 威布尔分布的累加函数 表Ⅰ-3 累加分布函数的逆函数 函数名对应分布的累加分布函数逆函数 betainv 贝塔分布的累加分布函数逆函数 binoinv 二项分布的累加分布函数逆函数 chi2inv 卡方分布的累加分布函数逆函数 expinv 指数分布的累加分布函数逆函数 finv f分布的累加分布函数逆函数 gaminv 伽玛分布的累加分布函数逆函数 geoinv 几何分布的累加分布函数逆函数hygeinv 超几何分布的累加分布函数逆函数logninv 对数正态分布的累加分布函数逆函数nbininv 负二项分布的累加分布函数逆函数ncfinv 非中心f分布的累加分布函数逆函数nctinv 非中心t分布的累加分布函数逆函数 ncx2inv 非中心卡方分布的累加分布函数逆函数icdf norminv 正态(高斯)分布的累加分布函数逆函数poissinv 泊松分布的累加分布函数逆函数 raylinv 雷利分布的累加分布函数逆函数 tinv 学生氏t分布的累加分布函数逆函数unidinv 离散均匀分布的累加分布函数逆函数unifinv 连续均匀分布的累加分布函数逆函数weibinv 威布尔分布的累加分布函数逆函数 表Ⅰ-4 随机数生成器函数

Matlab中Rand()函数用法

Matlab中Rand()函数用法: 一、理论准备 matlab函数randn:产生均值为0,方差σ^2 = 1,标准差σ = 1的正态分布的随机数或矩阵的函数。 用法:Y = randn(n),返回一个n*n的随机项的矩阵。如果n不是个数量,将返回错误信息。 Y = randn(m,n) 或Y = randn([m n]),返回一个m*n的随机项矩阵。 Y = randn(m,n,p,...) 或Y = randn([m n p...]),产生随机数组(感觉就是三维数组,请看如下例子)。 1: >> rand(1,2,3) 2: ans(:,:,1) = 3: 0.445586********* 0.646313********* 4: ans(:,:,2) = 5: 0.709364830858073 0.754686681982361 6: ans(:,:,3) = 7: 0.276025076998578 0.679702676853675 Y = randn(size(A)),返回一个和A有同样维数大小的随机数组。 randn s = randn('state'),估计和C++里初始化随机种子一个意思,随便了。 二、举例分析 产生一个随机分布的指定均值和方差的矩阵:将randn产生的结果乘以标准差,然后加上期望均值即可。例如,产生均值为0.6,方差为0.1的一个5*5的随机数方式如下:1: x = .6 + sqrt(0.1) * randn(5) 其他类似函数:rand, randperm, sprand, sprandn 三、拓展 用matlab随机产生60个1到365之间的正数1+fix(365*rand(1,60)),fix就是取整函数。 用rand函数随机取100个从-1到2的数x1,x2,...,x = rand(1,100) * 2 - 1。 逗号表示行,分号表示列。

matlab随机函数rand使用中应注意的问题

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 函数还存在其它的根本性的问题,似乎是非随机性问题. 没具体研究及讨论,验证过,不感多言. 有兴趣的可以查阅: Petr Savicky Institute of Computer Science Academy of Sciences of CR Czech Republic savicky@cs.cas.cz September 16, 2006 Abstract

rand、srand函数用法

rand、srand函数用法 写程序2010-02-28 16:18:34 阅读358 评论0 字号:大中小订阅 srand(设置随机数种子) 相关函数 rand 表头文件 #include 定义函数 void srand (unsigned int seed); 函数说明 srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed 都设相同值,rand()所产生的随机数值每次就会一样。 返回值 范例 #include #include main() { int i,j; srand((int)time(0)); for(i=0;i<10;i++) { j=1+(int)(10.0*rand()/(RAND_MAX+1.0)); printf(" %d ",j); } } 执行 5 8 8 8 10 2 10 8 9 9 2 9 7 4 10 3 2 10 8 7 rand(产生随机数) 相关函数 srand 表头文件 #include 定义函数 int rand(void)

rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。关于随机数种子请参考srand()。 返回值 返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,其值为2147483647。 范例 #include main() { int i,j; for(i=0;i<10;i++) { j=1+(int)(10.0*rand()/(RAND_MAX+1.0)); printf("%d ",j); } } 执行 9 4 8 8 10 2 4 8 3 6 9 4 8 8 10 2 4 8 3 6 1、rand返回0-RAND_MAX之间均匀分布的伪随机整数。RAND_MAX必须至少为32767。rand()函数不接受参数,默认以1为种子(即起始值)。随机数生成器总是以相同的种子开始,所以形成的伪随机数列也相同,失去了随机意义。(但这样便于程序调试) 2、C++中另一函数srand(),可以指定不同的数(无符号整数变元)为种子。但是如果种子相同,伪随机数列也相同。一个办法是让用户输入种子,但是仍然不理想。 3、比较理想的是用变化的数,比如时间来作为随机数生成器的种子。time的值每时每刻都不同。所以种子不同,所以,产生的随机数也不同。 // C++随机函数(VC program) #include #include #include using namespace std; #define MAX 100 int main(int argc, char* argv[]) { srand( (unsigned)time( NULL ) );//srand()函数产生一个以当前时间开始的随机种子 for (int i=0;i<10;i++) cout<

C语言中srand(), rand(), time()函数

C语言中srand(), rand(), time()函数 srand函数 srand函数是随机数发生器的初始化函数。 原型:void srand(unsigned seed); 用法:它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子,后面的rand() 函数会出现一样的随机数。如: srand(1); 直接使用1来初始化种子。不过为了防止随机数每次重复常常使用系统时间来初始化,即使用time函数来获得系统时间,它的返回值为从00:00:00 GMT, January 1, 1970 到现在所持续的秒数(即从1970年1月1日的00:00:00到当前你所处的时间所经过的秒数),然后将time_t型数据转化为(unsigned)型再传给srand函数,即: srand((unsigned) time(&t)); 还有一个经常用法,不需要定义time_t型t变量,即: srand((unsigned)time(NULL)); 直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的t数据。srand((int)getpid()); 使用程序的ID(getpid())来作为初始化种子,在同一个程序中这个种子是固定的。 例1(C语言) 随机输出十个0-100之间的整数 程序例1: #include /*用到了srand函数,所以要有这个头文件*/ #include #include /*用到了time函数,所以要有这个头文件*/ #define MAX 10 int main( void) { int number[MAX] = {0}; int i; unsigned int seed; scanf("%d",&seed);/*手动输入种子*/ srand(seed); for(i = 0; i < MAX; i++) { number[i] = rand() % 100; /*产生100以内的随机整数*/ printf("%d ", number[i]); } printf("\n"); return 0; }

随机函数

excel中如何随机选择不重复的数: excel中带有一个随机函数rand(),但rand()只选取0~1之间的随机数,而且两个数不保证不重复。因此就用到了函数rank。 1、假设要在1~100中随机抽取5个不重复的数。 2、在A1~A100中输入=rand()。 ;也就是在A1~A100中随机抽取了100个0~1之间的随机数。 3、在C1中输入=RANK(A1,A:A);C2中输入=RANK(A2,A:A);C3中输入=RANK(A3,A:A)……以此类推。 ;目标单元格C1~C5。 ;其实,C1~C5中显示的是A1~A5在100个随机数中的排序。 4、已成功抽取1~100中的5个随机数。按ctrl+r刷新。 1、生成随机数字 (1)生成随机数比较简单,=rand()即可生成0-1之间的随机数; (2)如果要是整数,就用=int(rand())*10,表示0至9的整数,以此类推; (3)如果要生成a与b之间的随机实数,就用=rand()*(b-a)+a,如果是要整数就用=int(rand()*(b-a))+a;稍微扩充一下,就能产生固定位数的整数了。 注意:如果要使用函数rand()生成一随机数,并且使之不随单元格计算而改变,可以在编辑栏中输入“=rand()”,保持编辑状态,然后按F9,将公式永久性地改为随机数。不过,这样只能一个一个的永久性更改,如果数字比较多,也可以全部选择之后,另外选择一个合适的位置粘贴,粘贴的方法是点击右键,选择“选择性粘贴”,然后选择“数值”,即可将之前复制的随机数公式产生的数值(而不是公式)复制下来! 2、产生随机字母 随机小写字母:=CHAR(INT(RAND()*26)+97) 随机大写字母:=CHAR(INT(RAND()*26)+65) 随机大小写混合字母:=CHAR(INT(RAND()*26)+if(INT(RAND()*2)=0,65,97)) 3、产生随机的六位数的字母和数字混合 =CONCATENATE(IF(INT(RAND()*2)=0,CHAR(INT(RAND()*9+48)),IF(INT(RAND()*2)=0, CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*25+97)))),IF(INT(RAND()*2)=0,CHAR(I NT(RAND()*9+48)),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*25+65)),CHAR(INT(RAND() *25+97)))),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*9+48)),IF(INT(RAND()*2)=0,CHAR(I NT(RAND()*25+65)),CHAR(INT(RAND()*25+97)))),IF(INT(RAND()*2)=0,CHAR(INT(RAN D()*9+48)),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*25+97)

相关文档
最新文档