Matlab 随机数发生器在simulink中是重复的

Matlab 随机数发生器在simulink中是重复的,matlab,simulink,Matlab,Simulink,如何确保simulink生成的可执行文件“独立可执行文件”形式的模型在每次执行可执行文件时生成不同的随机序列。 我在initFcn回调中添加了rng('shuffle'),但这并没有起作用。我想我找到了你的解决方案-每次加载MATLAB时,rand函数总是生成相同的数字(它用0种子初始化)。这就是为什么您从MATLAB获得的输出(重新)与构建exe时不同。解决方法是在调用rand、randn或randi之前,在代码中只添加一次这一行到代码中(这将根据系统时钟生成一个随机种子): %THIS IS

如何确保simulink生成的可执行文件“独立可执行文件”形式的模型在每次执行可执行文件时生成不同的随机序列。
我在initFcn回调中添加了
rng('shuffle')
,但这并没有起作用。

我想我找到了你的解决方案-每次加载MATLAB时,rand函数总是生成相同的数字(它用0种子初始化)。这就是为什么您从MATLAB获得的输出(重新)与构建exe时不同。解决方法是在调用
rand
randn
randi
之前,在代码中只添加一次这一行到代码中(这将根据系统时钟生成一个随机种子):

%THIS IS THE SOLUTION GIVEN FOR AN EXE (UPDATED FOR NEWER MATLAB VERSIONS)
reset(RandStream.getGlobalStream,sum(100*clock))

%OR (THIS IS INSIDE MATLAB, HAVEN'T TRIED WITH AN EXE)
RandStream.setGlobalStream(RandStream('mt19937ar','seed',sum(100*clock))); %note you can use 6 other random number generators, type RandStream.list for more
有关更多详细信息,请参见此处:

现在,如果您正在使用MATLAB编码器,您应该执行类似的操作(如果
时钟不可用):


所有这些解决方案都适用于
rand
randn
randi
函数。

您在模型中使用什么来生成随机数?@Sam尝试发布的解决方案,我相信它会解决您的问题。
coder.cinclude('"time.h"')
sd=0;
sd=coder.ceval('time',[]);
rng(sd);