项目场景:
提示:这里简述项目相关背景:
randint()、rand()与randi()函数的替换
声明(本文纯属技术探讨,如有侵权请告知,并删除。)
问题描述
提示:这里描述项目中遇到的问题:
由matlab版本造成的,随着matlab版本的更新,matlab删除了 randint 这个函数,导程序不能正常运行。
原因分析:
提示:这里填写问题的分析:
- randint()使用方法(randint在后期版本中会被randi代替)
f = randint(n,m) :产生一个元素为0或1的n×m的随机矩阵
f = randint(n,m,[a b]):产生一个n×m,元素是区间[a,b]的随机矩阵
f = randint(n,m,b):
如果b为正数,产生一个n×m,元素是[0,b-1]的随机矩阵
如果b为负数,产生一个n×m,元素是[b+1,0]的随机矩阵
在新版本生成元素为0或1的n×m随机矩阵:
f = round(rand(n,m)) %round 四舍五入
-
rand()使用方法 (元素均在(0,1)内)
X = rand 返回一个在区间 (0,1) 内均匀分布的随机数
X = rand(n) 返回一个 n×n 的随机数矩阵
X = rand(n,m) 返回一个 n×m的随机数矩阵 -
randi()使用方法
X = randi(imax) 返回一个介于 1 和 imax 之间的伪随机整数标量
X = randi(imax,n) 返回 n×n 矩阵,其中包含从区间 [1,imax] 的均匀离散分布中得到的伪随机整数
X = randi(imax,n,m) 返回n×m 数组,元素为介于1和imax的随机整数
X = randi([imin,imax],___) 使用以上任何语法返回一个数组,其中包含从区间 [imin,imax] 的均匀离散分布中得到的整数
————————————————版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_45130966/article/details/117635722
另外参考如下:
利用randi替换掉randint
randint函数用法
randint的用法如下:
第一种方法:
f=randint(m,n); %随机获得一个m * n的矩阵
1
第二种方法:
f=randint(m,n,[0,1]); %随机获得一个m * n的矩阵,其中[0,1]代表范围
1
第一种方法和第二种方法是等效的,因为默认就是产生[0,1]之间的整数。但如果产生更大范围的整数,就需要利用第二种方式进一步指定区间了。
这里值得注意的是无论是 randi 还是 randint ,后面的 i 和 int 都代表的是整数,所以虽然写做 [0,1] ,但其实生成的随机数只有0和1两种类型。
randi函数用法
f=randi([0,1],m,n); %随机获得m * n的矩阵,其中[0,1]代表范围
1
容易发现,二者的区别主要为:
randi不存在随机数的默认区间了,需要进行指定。
区间参数的位置,由最后一个参数变为了第一个参数了。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/myf_666/article/details/129165673
解决方案:
提示:这里填写该问题的具体解决方案:
此问题如下:需要将Randint 变更为randi
Randint(n,m,b) 函数中,如果b为正数,产生一个n×m,元素是[0,b-1]的随机矩阵,
当前的程序中,表示产生一个1*N 的矩阵,元素为[0,1]之间。
把randint 变更为randi 的用法。
randi([0,1],1,N) ;
修改如下
程序最终运行成功。