Matlab随机函数rand使用的几点技巧

1 第一篇文章

matlab的rand产生的是0到1(不包括1)的随机数. 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 函数还存在其它的根本性的问题,似乎是非随机性问题.

没具体研究及讨论,验证过,不感多言.

有兴趣的可以查阅:

<<A strong nonrandom pattern in Matlab default random number generator>>

 

Petr Savicky
Institute of Computer Science
Academy of Sciences of CR
Czech Republic
savicky@cs.cas.cz
September 16, 2006
Abstract
The default random number generator in Matlab versions between 5 and at least
7.3 (R2006b) has a strong dependence between the numbers zi+1, zi+16, zi+28 in the
generated sequence. In particular, there is no index i such that the inequalities
zi+1 < 1/4, 1/4 zi+16 < 1/2, and 1/2 zi+28 are satisfied simultaneously. This
fact is proved as a consequence of the recurrence relation defining the generator. A
random sequence satisfies the inequalities with probability 1/32. Another example
demonstrating the dependence is a simple function f with values −1 and 1, such that
the correlation between f(zi+1, zi+16) and sign(zi+28 − 1/2) is at least 0.416, while it
should be zero.
A simple distribution on three variables that closely approximates the joint
distribution of zi+1, zi+16, zi+28 is described. The region of zero density in the
approximating distribution has volume 4/21 in the three dimensional unit cube. For
every integer 1 k 10, there is a parallelepiped with edges 1/2k+1, 1/2k and 1/2k+1,
where the density of the distribution is 2k. Numerical simulation confirms that the
distribution of the original generator matches the approximation within small random
error corresponding to the sample size.

 

2 第二篇

用过Matlab的朋友,很难不跟随机数函数打交道的。Matlab的随机数是伪随机数,但在一定的信度之下是可以看作真正的随机数的。

我最近编了个算法,用到了Rand函数。算法的结果却有些怪异,通过分析发现是我对随机数产生方式不很了解造成的。Rand函数产生的随机数并不是真的现场算出来的,而是从一个随机数序列中取出来的。而每次启动Matlab时,Rand的状态都被重置(相当于把序列的指针移到了随机数序列的开始),官方文档是这么说的:
Because MATLAB resets the rand state at startup, rand generates thesame sequence of numbers in each session unless you change thevalue of the state input.
换句话说,第一次启动Matlab调用的第n次Rand函数与下一次启动调用的第n个Rand函数产生相同的数值。

如果想打乱这种状态,可以指定一个初始状态,而不是用默认状态,如下面这样:
rand('state',sum(100*clock));

.................................................................................................................................................................

PS: 设定随机种子的初始值可以用rng,这样每次启动matlab就不会导致同一个初始值了。

 

### 回答1: Matlab可以使用rand函数生成随机数。具体用法如下: 1. 生成一个0到1之间的随机数: ``` rand ``` 2. 生成一个m×n的随机矩阵: ``` rand(m,n) ``` 3. 生成一个a到b之间的随机数: ``` a + (b-a)*rand ``` 4. 生成一个m×n的a到b之间的随机矩阵: ``` a + (b-a)*rand(m,n) ``` 5. 生成一个符合正态分布的随机数: ``` randn ``` 6. 生成一个符合正态分布的m×n的随机矩阵: ``` randn(m,n) ``` 以上就是Matlab生成随机函数的几种用法,希望对你有所帮助。 ### 回答2: 在Matlab,我们可以使用rand函数来生成随机函数。该函数可以返回一个由0到1之间的均匀分布的随机数构成的矩阵或向量。 下面是一些使用rand函数生成随机函数的例子: 1. 生成一个1x10的矩阵,元素为0到1之间的随机数: RAND_NUM = rand(1, 10); 2. 生成一个5x5的矩阵,元素为0到1之间的随机数: RAND_NUM = rand(5, 5); 3. 生成一个包含10个元素的向量,元素为0到1之间的随机数: RAND_NUM = rand(1, 10); 我们还可以使用其他函数来生成不同分布的随机数。例如,使用randn函数可以生成符合标准正态分布的随机数;使用randi函数可以生成指定范围内的随机整数。 希望以上信息能对您有所帮助! ### 回答3: 在MATLAB,可以使用rand函数来生成随机函数rand函数可以生成0到1之间的随机数。如果想要生成范围为a到b之间的随机数,可以通过以下公式来实现:rand * (b-a) + a。这样,利用rand函数就可以生成所需的随机函数。 首先,需要确定随机函数的定义域和值域。然后,使用rand函数生成满足要求的随机数。接着,可以通过插值方法将生成的随机数构建成随机函数。例如,可以使用样条插值、线性插值或多项式插值等方法。 下面通过一个简单的例子来说明如何在MATLAB生成一个随机函数。假设我们要生成一个定义域为[0,10],值域为[-1,1]的随机函数。首先,确定定义域和值域: x = linspace(0,10,100); % 定义函数的定义域为[0,10],将其分成100个点 y = rand(size(x)) * 2 - 1; % 生成100个位于[-1,1]之间的随机数 接着,利用样条插值方法生成随机函数: xx = linspace(0,10,1000); % 定义插值后的函数的定义域为[0,10],将其分成1000个点 yy = spline(x, y,xx); % 进行样条插值 最后,我们可以通过绘图函数plot来可视化生成的随机函数: plot(xx, yy); xlabel('x'); ylabel('y'); title('随机函数'); grid on; 通过上述代码,我们就成功生成了一个定义域为[0,10],值域为[-1,1]的随机函数,并通过绘图函数将其可视化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值