matlab中用rng替换rand('seed',sd)、randn('seed',sd)和rand('state',sd)的通俗解释
matlab中用rng替换rand('seed',sd)、randn('seed',sd)和rand('state',sd)的通俗解释
1. rand('seed',sd)、randn('seed',sd)和rand('state',sd)中各参数的含义
我们知道,rand和randn都是用来产生伪随机数的,但是产生伪随机数的generator(发生器)有多种,而seed、state、twister等就是用来指定不同类型的伪随机数发生器的,其中seed 指“v4 generator”,state指“v5 generator”,twister指"Mersenne Twister generator"。第二个参数“sd”是“seed”的缩写,表示发生器的种子点,这个值将作为generator的输入,用于产生伪随机数。这里有必要先解释一下随机数和伪随机数的本质区别:随机数是在某次产生过程中,按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,不可重复的;而伪随机数则是按照一定算法模拟产生的,其结果是确定的,可重复的。当然这里的确定和可重复是指给定相同的初始值,算法模拟将产生相同的输出。
2. 为什么要用rand('seed',sd)、randn('seed',sd)和rand('state',sd)
在实际应用中,比如检查程序问题时,为了重现错误,我们可能希望产生相同的伪随机数,这个时候就需要用这些表达式了。正如前面所说的,如果选用相同的generator并设置相同的初始值sd,那么你就可以得到同样伪随机数。
举个例子:
rand('seed',0); %选定generator并设定初始值
a=rand(3,3);
rand('seed',0);%设定同样的generator和相同的初始值
b=rand(3,3);
a
b
输出:
a =
0.218959186328090 0.679296405836612 0.519416372067955
0.047044616214486 0.934692895940828 0.830965346112366
0.678864716868319 0.383502077489859 0.034572110527461
b =
0.218959186328090 0.679296405836612 0.519416372067955
0.047044616214486 0.934692895940828 0.830965346112366
0.678864716868319 0.383502077489859 0.034572110527461
对比后你会发现a和b相等。
3. 为什么要用rng替换rand('seed',sd)、randn('seed',sd)和rand('state',sd)
MATLAB官方给出的理由如下:
1)“seed”和“state”等词对于所对应的generator来说是一种误导;
2)除了“twister”以外,其他的generator都有问题;
3)这些表达式对于rand和randn采用了不同的generator,没必要。
所以在新版的MATLAB中已经不推荐这种方法了。
4. 替换的具体方法
下图是MATLAB给的一个替换的方式,最右边的才是它推荐的方法。
实际应用中举例如下(这里只以seed为例,其他的类似):
randn('seed',0);%rng(0);
a=randn(4,3);
randn('seed',0);%rng(0);
b=randn(4,3);
a
b
MATLAB推荐用注释掉的语句替换对应行的语句。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
2015-07-12 如何进行研究工作
2015-07-12 《中国作者英文科学写作中的常见语法问题(一)》