MATLAB知识点:randperm函数(★★★★★)将一个数字序列进行随机打乱

本文介绍了MATLAB教程中的randperm函数,包括其两种主要用法:全排列和随机选择k个不重复的数。通过模拟商品推销员、课堂抽题、抽奖和斗地主游戏等实例展示其在实际问题中的应用。同时提到了randperm与randi的区别以及背后的Fisher-Yates洗牌算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​

MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili

节选自第3章:课后习题讲解中拓展的函数

在讲解第三章课后习题的过程中,我给大家拓展了一些讲义中没有介绍的新函数:


(6)randperm函数(★★★★★)

randperm函数是一个非常有用的函数,它能够将一个数字序列进行随机打乱。它有两种主要的使用方法:

用法1:randperm(n)可以将向量1:n中元素的顺序随机打乱,生成一个长度仍为n的新向量,因此所有可能出现的情况共n!种(全排列)。例如,当你运行randperm(4)时,你可能得到[1 4 3 2],也可能得到[3 2 4 1]。

用法2:randperm(n,k)表示从打乱的1:n序列中随机的选择k个数出来,显然这k个数都不相同,且k要小于等于n。例如,当你运行randperm(10,3)时,你可能得到[5 3 10],也可能得到[6 1 8]。

randperm函数在实际的场景中应用的非常广泛,第三章课后练习挑战篇中的第五题举了几个例子,大家一定要看最上方的讲解视频学习

(1)模拟商品推销员访问城市(旅行商问题、TSP

(2)模拟课堂上随机选取同学答题

(3)模拟抽奖能获得多少金额

(4)模拟斗地主游戏为地主和农民发牌

注意:randperm(n,k)和randi(n,k,1)的区别在于:randperm相当于无放回的抽样,而randi相当于有放回的抽样。因此,randperm函数返回的结果中的各元素都不相同,而randi函数返回的结果中的各元素可能相同。

拓展:对randperm函数背后原理感兴趣的同学可以自行搜索Fisher–Yates shuffle 算法(洗牌算法)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值