我试图用谷歌搜索这个问题,并在这里搜索问题和答案,但是我没有找到明确的答案,所以我正在做一个新的问题。希望不会有太大的麻烦!
我在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。
预先感谢,尼古拉斯
从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函数)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句