关于MATLAB 打包成exe后生成随机数不变问题的解决方案

问题描述

事情是这样的,之前写了一个刮奖特效的MATLAB 程序:
传送门:
七夕节还不知道送啥,教你用MATLAB制作一款刮刮乐抽奖特效,让她的手气决定她的礼物
其中有通过随机数来决定显示字符的部分,但是有读者尝试将程序打包后,发现结果是固定的。

出现原因

稍微研究了一下发现了问题所在:
我们在matlab运行程序后,软件会自己更改随机数种子,但是打包成exe文件后,经过了中间变换,脱离软件后程序会使用固定的随机数种子,这就导致每次生成的随机数都是固定的。

解决思路

这样我们很容易就能想到C语言的类似操作,C语言生成随机数时,都要依据时间重新定义随机数种子:

srand(time(NULL));
rand()

于是我们可以在MATLAB中也采用类似操作,
只需要将rand()前加上如下代码:

tempTime=clock();
second=round(tempTime(6)+60*tempTime(5)+24*60*tempTime(4));
rng(second)

就可以在一天中每一秒都设置不同的随机数种子,当然,与时间相关的其他任意整数均可,大家可以稍作改变,将代码更改后再打包便不会出现随机数固定的问题。

原程序更改部分对比(当作示例)

原:

randNum=rand();
numRange=probVal>randNum;
strPos=find(numRange,1);

改:

tempTime=clock();
second=round(tempTime(6)+60*tempTime(5)+24*60*tempTime(4));
rng(second)
randNum=rand();
numRange=probVal>randNum;
strPos=find(numRange,1);
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

slandarer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值