1

我试过用谷歌搜索这个问题并在这里搜索问题和答案,但我没有找到我的问题的明确答案,所以我正在制作一个新问题。希望不会太麻烦!

我正在 Simulink 中创建一个仿真,其中我有一个“MATLAB 函数”块,它应该从另一个源获取输入(我们可以将此源视为“常量”块),然后应用从生成的随机数输入上的 MATLAB 功能块。

我的问题是每次运行 Simulink 仿真时都会得到完全相同的随机数。我想知道是否有人可以帮助我解决我的问题?

这是代码(不是全部,但所有重要的):

% function MC_output = randomizer(Stat_input)
%#codegen    minrand = 0.1;
    maxrand = 1.9;
    points = 10;    
    rand_numbers = Stat_input*minrand + rand(1, points).*(maxrand-minrand);
    MC_output = mean(rand_numbers);
end

我已阅读有关此解决方案的信息:

coder.extrinsic('rng');
rng('shuffle');

我以不同的方式使用它,但没有成功。一些帮助将不胜感激!哦,顺便说一句,我正在使用 MATLAB R2012a。

提前致谢, 尼克拉斯

4

1 回答 1

5

从 MATLAB Fcn 模块调用的 rand 与从 MATLAB 调用的 rand 不同,因此rng('shuffle');对 Simulink 的随机数生成没有影响。

您可以强制 MATLAB Fcn 块使用 MATLAB 的 rand 函数,方法是:

function y = fcn
%#codegen
coder.extrinsic('rand','rng');
y = 0;

persistent atTime0
if isempty(atTime0)
    rng('shuffle');
    atTime0 = false;
end

y = rand;

或者您可以使用旧式方法重置随机数的种子

function y = fcn(seed)
%#codegen

persistent atTime0
if isempty(atTime0)
    rand('seed',seed);
    atTime0 = false;
end

y = rand;

但更简单的方法是将随机数/向量作为Uniform Random Number Generator模块生成的输入提供,并随机设置其种子参数(使用 MATLAB 的 rand 函数)。

于 2014-06-25T15:10:23.543 回答