在单机应用的RAND函数生成相同的数字在每次运行你的应用程序,因为统一的随机数生成器,应用程序加载时RAND用途被初始化为同一状态的时间。
你会发现,每次启动一个新的MATLAB会话时,由RAND返回的随机数是相同的。这是因为MATLAB的随机数生成器初始化为每次MATLAB启动时相同的状态。
如果你想在每一个MATLAB会话生成不同的随机值,可以使用系统时钟在每个MATLAB会议开始初始化随机数生成器一次。
在与R2008b开始MATLAB的版本中,要做到这一点最简单的方法是在每个MATLAB会议开始执行下面的命令:
复位(RandStream.getDefaultStream,总和(100 *时钟))
对于之前R2008b MATLAB的版本中,你可以执行以下命令:
兰特(“扭腰”,总和(100 *时钟))
randn('州',总和(100 *时钟))
在这两种情况下,只需要在每个MATLAB会话开始一次做到这一点。
同样,您可以在独立的应用程序执行相同的命令(S)。您编译代码可能看起来像下面这样:
功能myrand2
复位(RandStream.getDefaultStream,总和(100 *时钟))
一个=兰特(4,1);
DISP(a)中
当编译该一个可执行,所述随机数生成器的状态被初始化的每个应用程序运行时基于系统时钟,所以阵列的“a”在上面的例子将包含一个唯一的值每一次。
请记住,这只是需要初始化用户在使用系统时钟一旦随机数发生器。
对于Matlab的编码器,你必须使用一个稍微不同的方法,因为时钟不支持代码生成。金宝app
例如,考虑
功能myrand2
coder.cinclude( ' “time.h中”')
SD = 0;
SD = coder.ceval( '时间',[]);
RNG(SD, '捻线机');一个=兰特(4,1);DISP(a)中
有关MATLAB的随机数生成器的更多信息,你可以通过在MATLAB命令提示符下执行以下命令来检查文件:
DOCRandStream
救命RandStream
2条评论
直接链接到本评论
//www.tatmou.com/matlabcentral/answers/104306-why-does-my-compiled-rand-function-give-the-same-values-every-time-i-run-my-matlab-generated-standal#comment_220826
直接链接到本评论
//www.tatmou.com/matlabcentral/answers/104306-why-does-my-compiled-rand-function-give-the-same-values-every-time-i-run-my-matlab-generated-standal#comment_220826
直接链接到本评论
//www.tatmou.com/matlabcentral/answers/104306-why-does-my-compiled-rand-function-give-the-same-values-every-time-i-run-my-matlab-generated-standal#comment_361628
直接链接到本评论
//www.tatmou.com/matlabcentral/answers/104306-why-does-my-compiled-rand-function-give-the-same-values-every-time-i-run-my-matlab-generated-standal#comment_361628
登入评论。