matlab rng函数的理解和使用

2024.8.20 总因为不理解rng函数导致误用吃尽苦头,故写一个博客详细解释下这一函数,希望自己以后不要再踩雷了(●'◡'●)。

【杂七杂八】理解MATLAB中的`rng`函数及其在循环中的使用

    • 一、尝试理解
    • [二、代码辅助理解: 循环函数中的rng](#二、代码辅助理解: 循环函数中的rng)

一、尝试理解

在MATLAB中,rng(1)命令用于设置随机数生成器的种子为1。这样做的目的是为了确保每次运行代码时,生成的随机数序列都是相同的,从而保证结果的可重复性。

可以将其理解为,rng(1)实际上是让MATLAB预先生成一个固定的随机数序列。设定种子为1后,MATLAB将根据这个序列来生成随机数,无论你运行多少次这个命令,得到的随机数都是相同的。这对于需要重复实验或调试代码的场合非常有用,因为它确保了每次执行的结果都可以重现。

进一步扩展来说,rng(1)相当于指定了一个"起点",从这个起点开始,MATLAB会按照预先确定的顺序生成"随机"数,因此这些"随机"数在不同的运行中会保持一致。这在开发、测试以及对比算法性能时,尤为重要。

二、代码辅助理解: 循环函数中的rng

以下是一个MATLAB代码示例,演示rng(1)在不同的for循环中的含义和效果:

matlab 复制代码
% 设置种子并在for循环中生成随机数

% 第一组实验:在循环外设置种子
disp('第一组实验:在循环外设置种子');
rng(1);
for i = 1:3
    random_number = rand;
    fprintf('第%d次生成的随机数: %f\n', i, random_number);
end

fprintf('\n');

% 第二组实验:在循环内每次迭代都设置种子
disp('第二组实验:在循环内每次迭代都设置种子');
for i = 1:3
    rng(1);
    random_number = rand;
    fprintf('第%d次生成的随机数: %f\n', i, random_number);
end
复制代码
第一组实验:在循环外设置种子
第1次生成的随机数: 0.417022
第2次生成的随机数: 0.720324
第3次生成的随机数: 0.000114

第二组实验:在循环内每次迭代都设置种子
第1次生成的随机数: 0.417022
第2次生成的随机数: 0.417022
第3次生成的随机数: 0.417022

总结:
rng相当于给出了一串固定的随机数序列。当你在MATLAB中使用rng(1)时,实际上是为随机数生成器设定了一个固定的起点,使得后续生成的随机数按照这个固定序列产生。

  • rng(1)放在循环内:表示每次进入循环时都会重新设定相同的种子。这导致每次循环生成的随机数都是相同的,因为每次循环都会从相同的固定序列起点开始。

  • rng(1)放在循环外:表示在进入循环前,设定了一次随机数生成器的种子。在这种情况下,循环中的每次迭代会从固定的随机数序列中依次取出不同的随机数,因此每次循环产生的随机数是序列中的不同元素。

这种方法的好处在于,你可以控制随机数的生成方式,以便在调试或重复实验时保持一致性,同时也能根据需要调整随机数的产生行为。

相关推荐
星星.72237 分钟前
C++算法竞赛|二分查找与二分答案:边界模板、浮点二分、STL
数据结构·c++·算法
sel_938 分钟前
【OPD论文导读(二)】OPD(On-Policy Distillation)全景调研:十篇论文讲透“在自己生成的内容上学习“这件事
人工智能·python·深度学习·学习·算法·语言模型
金幄科技2 小时前
RAG第四篇:重排序 Rerank——粗召回之后,为什么还需要一次精排
人工智能·算法·ai·ai编程
M78佐菲2 小时前
Linux学习笔记:文件IO
linux·笔记·学习·算法
吃好睡好便好2 小时前
转换函数的使用
学习·matlab·生活·转换函数
lhldsg3 小时前
课程排课系统实战指南:从数据库设计到算法调优全流程解析
java·数据库·算法·小程序
BSD_HY3 小时前
薄膜开关矩阵扫描电路设计中的防鬼键措施
人工智能·算法·矩阵·人机交互·薄膜开关·源头工厂·深圳工厂
linux-hzh3 小时前
百日算法修炼 · Day 17
数据结构·算法
XUEYUAN52123 小时前
代理日志分析与监控:代理池健康状态巡检与分级告警体系搭建(运维实战)
运维·网络·网络协议·tcp/ip·算法·架构
sel_93 小时前
【多轮对话论文导读(七)】多轮对话论文阅读笔记:从数据生成、用户模拟到上下文重构与长期记忆
论文阅读·人工智能·笔记·深度学习·算法·语言模型·自然语言处理