matlab使用教程(11)—创建随机数

news2025/1/13 10:21:40
        MATLAB 使用算法来生成伪随机数和伪独立数。这些数在数学意义上并非严格随机和独立的,但它们能够通过各种随机和独立统计测试,并且其计算可以重复,方便用于测试或诊断目的。
rand randi randn randperm 函数是创建随机数数组的主要函数。 rng 函数允许您控制生成随机数的种子和算法。

1.随机数函数

        有四种基本随机数函数:rand randi randn randperm rand 函数返回在 0 和 1 之间均匀分布的浮点数。例如:
rng('default')
r1 = rand(1000,1);
        r1 是一个含有均匀分布浮点实数的 1000 x 1 的列向量。 r1 中的所有值均处于开区间 (0, 1) 内。这些值的直方图大致上是扁平形状,这表明采样数相当均匀。
        randi 函数返回离散均匀分布中的 double 整数值。例如,
r2 = randi(10,1000,1);
        r2 是一个包含范围在闭区间 [1, 10] 的离散均匀分布整数值的 1000×1 列向量。这些值的直方图大致上是扁平形状,这表明从 1 到 10 之间采样数相当均匀。
        randn 函数返回标准正态分布中的浮点实数数组。例如:
r3 = randn(1000,1);
        r3 是一个含有标准正态分布数的 1000 x1 的列向量。 r3 的直方图看似大致上均值为 0 且标准差为 1 的正态分布。
        可以使用 randperm 函数创建一个由没有重复值的随机整数值组成的 double 数组。例如,
r4 = randperm(15,5);
        r4 是 1×5 数组,包含从范围 [1, 15] 中随机选择的整数。与可返回包含重复值的数组的 randi 不同,randperm 返回的数组没有重复值。接连调用上述任一函数均可返回不同的结果。这种特性适合用于创建几个不同的随机值数组。

2.随机数生成器

        MATLAB 提供几个生成器算法选项,下表对其进行了总结。
        使用 rng 函数可设置 rand randi randn randperm 函数使用的种子和生成器。例如,
rng(0,'twister') 将生成器重置为其默认状态。

3.随机数的数据类型

        rand randn 函数默认情况下会生成双精度类型的值。
rng('default')
A = rand(1,5);
class(A)
ans = 'double'
        要将类显式指定为双精度类型:
rng('default')
B = rand(1,5,'double');
class(B)
ans = 'double'
isequal(A,B)
ans =
1
        rand randn 也可以生成单精度类型的值。
rng('default')
A = rand(1,5,'single');
class(A)
ans = 'single'
        这些值与转换前一示例中的双精度值相同。无论返回哪种类的值,这些函数获取的随机流都会以相同方式增加。
A,B
A =
0.8147 0.9058 0.1270 0.9134 0.6324
B =
0.8147 0.9058 0.1270 0.9134 0.6324
        randi 既支持整数类型,又支持单精度或双精度类型。
A = randi([1 10],1,5,'double');
class(A)
ans = 'double'
B = randi([1 10],1,5,'uint8');
class(B)
ans = 'uint8'

4.特定范围内的随机数

        本示例显示如何基于开区间 (50, 100) 内的均匀分布创建随机浮点数组。在默认情况下,rand 返回均匀分布的归一化值(0 和 1 之间)。要改变分布的范围(a、b),应将各值乘以新范围的宽度(b – a),然后用 a 替换各值。首先,初始化随机数生成器,以使本示例中的结果具备可重复性。
rng(0,'twister');
创建一个 1000 个随机值的向量。使用 rand 函数从开区间 (50,100) 抽取均匀分布的值。
a = 50;
b = 100;
r = (b-a).*rand(1000,1) + a;
验证 r 中的数值是否在指定范围内。
r_range = [min(r) max(r)]
r_range =
50.0261 99.9746
        结果是处于开区间(50、100)内。 注意 a 和 b 的某些组合在理论上可使得到的结果包括 a 或 b。在实际中,这种情况极难出现。

5.随机整数

        此示例说明了如何根据一组数字 –10、–9、...、9、10 的离散均匀分布创建随机整数值数组。
最简单的 randi 语法将返回 1 与指定值 imax 之间的双精度整数值。要指定其他范围,请结合使用 imin imax 参数。首先,初始化随机数生成器,以使本示例中的结果具备可重复性。
rng(0,'twister');

        基于数字集 -10、-9、...、9、10 的离散均匀分布创建 1×1000 随机整数值数组。使用语法

randi([imin
imax],m,n)。
r = randi([-10 10],1,1000);
        验证 r 中的值是否在指定范围内。
[rmin,rmax] = bounds(r)
rmin = -10
rmax = 10

6.具有特定均值和方差的正态分布随机数

        此示例说明如何基于均值为 500 和方差为 25 的正态分布创建随机浮点数组。randn 函数返回一个均值为 0 和方差为 1 的正态分布随机数样本。随机变量的一般理论规定,如果 x 是随机变量,其均值是u_x 且方差是\sigma _x^2   ,则由 y = ax + b , (其中 a 和 b 为常量)定义的随机变量 y 有均值
u_{y}=au_{x}+ b和方差\sigma _y^2=a^2\sigma _x^2   . 根据此概念,可获得均值为 500 和方差为 25 的正态分布随机数样本。首先,初始化随机数生成器,以使本示例中的结果具备可重复性。
rng(0,'twister');
        基于均值为 500 且标准差为 5 的正态分布创建包含 1000 个随机值的向量。
a = 5;
b = 500;
y = a.*randn(1000,1) + b;
        计算样本均值、标准差和方差。
stats = [mean(y) std(y) var(y)]
stats = 1×3
499.8368 4.9948 24.9483
        均值和方差并非恰好为 500 和 25,因为它们是从分布采样计算得出的。

7.球体内的随机数

        此示例说明如何在球体内创建随机点。本例中的球体以原点为中心,半径为3。在球体内创建点的方法之一是在球面坐标中指定这些点。然后可以将其转换为笛卡尔坐标进行绘图。首先,初始化随机数生成器,以使本示例中的结果具备可重复性。
rng(0,'twister')
        计算球体中各个点的仰角。这些值在开区间 ( − π /2, π /2) 内,但不是均匀分布的。
rvals = 2*rand(1000,1)-1;
elevation = asin(rvals);
        为球体中的各个点创建方位角。这些值在开区间 (0, 2 π ) 内均匀分布。
azimuth = 2*pi*rand(1000,1);
        为球体中的各个点创建半径值。这些值在开区间 (0, 3) 内,但不是均匀分布的。
radii = 3*(rand(1000,1).^(1/3));
        转换为笛卡尔坐标并绘制结果。
[x,y,z] = sph2cart(azimuth,elevation,radii);
figure
plot3(x,y,z,'.')
axis equal

        如果需要将随机数置于球体表面上,则指定一个常量半径值作为 sph2cart 的最后一个输入参数。在本例中,该值为 3
[x,y,z] = sph2cart(azimuth,elevation,3);

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/847475.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++核心编程:C++中的引用

C中的引用 引用的基本语法 作用&#xff1a;给变量起别名 语法&#xff1a;数据类型 & 别名 原名 //比如给一个int变量a命名一个别名 b int &b a;b 20; cout<< a << endl;//a 20引用的注意事项 引用必须初始化 int &b;//错误的引用在初始化后&…

美国超导:一家第四次工业革命中的小型成长型公司

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结: &#xff08;1&#xff09;在韩国研究人员宣布发现首个常压室温超导体LLK-99这个潜在的革命性化合物,并大肆宣传后&#xff0c;美国超导(AMSC)的股票暴涨了60%。 &#xff08;2&#xff09;美国超导是一家专门从事超…

13 Java 多线程见的通信 volatile synchronized,Java多线程等待通知机制, ThreadLocal的使用

volatile synchronized ThreadLocal 线程间的通信 volatile synchronizedvolatile和synchronized关键字线程等待/通知机制ThreadLocal的使用 线程间的通信 volatile synchronized 线程开始运行&#xff0c;拥有自己的栈空间&#xff0c;就如同一个脚本一样&#xff0c;按照既定…

揭秘无人机在水利行业中如何应用

无人机的应用已经成为现代科技的重要组成部分&#xff0c;在水利行业中&#xff0c;无人机的应用同样发挥了极其重要的作用。无人机在水利行业中的应用&#xff0c;不仅提高了工作效率&#xff0c;还极大地降低了人力和物力成本&#xff0c;为水利工作注入了新的活力。 一、无人…

git clone 报错Filename too long

1.使用git clone代码&#xff0c;爆出Filename too long错误 2.原因分析 因为我很少看git clone日志&#xff0c;所以从未想过是clone异常&#xff0c;而且也看到代码clone下来了&#xff0c;所以我就显然以为代码clone成功&#xff0c;但是使用idea打开代码后发现大量代码无法…

字符函数、字符串函数、内存函数

目录 求字符串长度&#xff1a; size_t strlen ( const char * str ); 无长度限制的字符串函数 字符串拷贝&#xff1a; char * strcpy ( char * destination, const char * source ); 字符串追加&#xff1a; char * strcat ( char * destination, const char * source ); 字…

COSV Schema 1.0正式对外发布,棱镜七彩参与制定工作

近期&#xff0c;CCF版开源漏洞信息描述规范COSV Schema 1.0正式制定并对外发布&#xff0c;棱镜七彩参与制定工作。 图 COSV Schema 1.0制定过程贡献单位及专家名单 作为开源软件治理与软件供应链安全领域的先行者&#xff0c;棱镜七彩一直致力于提升开源效能、防范开源漏洞。…

源码分析——LinkedList源码分析

文章目录 1.LinkedList简介2.内部结构分析3.LinkedList源码分析3.1构造方法3.2add方法3.3根据位置取数据的方法3.4根据对象得到索引的方法3.5检查链表是否包含某对象的方法&#xff1a; 1.LinkedList简介 LinkedList是一个实现了List接口和Deque接口的双端链表。 LinkedList底…

2024考研408-计算机网络 第五章-传输层学习笔记

文章目录 前言一、传输层提供的服务1.1、传输层的功能1.2、传输层的两个协议&#xff08;TCP、UDP&#xff09;1.3、传输层的寻址与端口&#xff08;常见端口介绍&#xff09; 二、UDP协议2.1、认识UDP功能和特点2.2、UDP首部格式2.3、UDP伪首部字段分析2.4、伪首部校验UDP用户…

Unity 基础函数

Mathf&#xff1a; //1.π-PI print(Mathf.PI); //2.取绝对值-Abs print(Mathf.Abs(-10)); print(Mathf.Abs(-20)); print(Mathf.Abs(1)); //3.向上取整-Ce il To In t float f 1.3f; int i (int)f; …

无人机光伏巡检系统的全新作用解析,提升效率保障安全

随着光伏发电行业的快速发展&#xff0c;光伏电站的规模越来越大&#xff0c;光伏维护和巡检成为一个巨大的挑战。为解决传统巡检方法的低效率和安全风险问题&#xff0c;无人机光伏巡检系统应运而生&#xff0c;并成为提升光伏巡检效率和保障安全的利器。 首先&#xff0c;无人…

我的Python教程:使用Pyecharts画关系节点图

示例源码1 from pyecharts import options as opts from pyecharts.charts import Graphnodes [{"name": "结点1", "symbolSize": 10},{"name": "结点2", "symbolSize": 20},{"name": "结点3&qu…

【泊松过程数学公式推导】

latex常见用法如下&#xff1a;https://blog.csdn.net/ViatorSun/article/details/82826664 高等教育出版社 **浙江大学《概率论与数理统计》**一 书关于泊松过程的推导如下&#xff1a; 理解了上面的思路才能更好的理解泊松过程的数学模型和本质。 上面的思路是&#xff1a; …

【LeetCode 75】第二十二题(1657)确定两个字符串是否接近

目录 题目: 示例: 分析: 代码运行结果: 题目: 示例: 分析: 给我们两种操作,问我们可不可以通过两种操作将word1转变成word2. 第一种操作是交换两个现有字符的位置. 那么这就意味着,只要word1和word2有相同的字符并且相同字符的数量一致,那么word1就能通过交换位置来转变…

Shiro是什么?为什么要用Shiro?

前言 本文小新为大家带来 Shiro入门概述 相关知识&#xff0c;具体内容包括Shiro是什么&#xff0c;为什么要用 Shiro&#xff0c;Shiro与Spring Security 的对比&#xff0c;Shiro的基本功能&#xff08;包括&#xff1a;基本功能框架&#xff0c;功能简介&#xff09;&#x…

org.springframework.beans.factory.UnsatisfiedDependencyException:

今天碰到了一个数据库表中有2个主键&#xff0c;结果利用mp生成的po类&#xff0c;出现了一系列问题&#xff0c;报了这个错误&#xff0c;一看是这个实体类自带了2个filedId注解&#xff0c;运行springboot能不报错吗&#xff1f;报错信息挺有意思的&#xff0c;所以写了这篇博…

服务器时钟同步

服务器时钟同步 文章目录 服务器时钟同步背景windows时钟同步Linux机器上的时钟同步Centos时钟同步Ubuntu系统时钟同步 查看是否同步的命令 背景 运维&#xff0c;XXX服务器慢了2秒&#xff0c;导致XXX业务没有正常执行&#xff0c;请立即排查为啥会有时钟不同步的问题。 首先…

无涯教程-Perl - continue 语句函数

可以在 while 和 foreach 循环中使用continue语句。 continue - 语法 带有 while 循环的 continue 语句的语法如下- while(condition) {statement(s); } continue {statement(s); } 具有 foreach 循环的 continue 语句的语法如下- foreach $a (listA) {statement(s); } co…

React Native从文本内容尾部截取显示省略号

<Textstyle{styles.mMeNickname}ellipsizeMode"tail"numberOfLines{1}>{userInfo.nickname}</Text> 参考链接&#xff1a; https://www.reactnative.cn/docs/text#ellipsizemode https://chat.xutongbao.top/

C++学习——认识什么是STL以及string类的使用

目录 一&#xff1a;认识STL 1.什么是STL 2.STL当中的各种功能 3.STL的重要性 二&#xff1a;认识string类 1.什么是string 2.string类相关的使用方法 Tips1 &#xff1a;constructor Tips2&#xff1a;destructor Tips3&#xff1a;iterator Tips4&#xff1a;capacity ​编辑…