I've tried to both google this question and search among the questions and answers here, but I've found no definitve answer to my question so I'm making a new one. Hopefully it won't be too much trouble!
I'm creating a simulation in Simulink where I have a "MATLAB function"-block that is supposed to take input from another source (we can consider this source a "Constant"-block) and then apply a random number that is generated from the MATLAB function-block on the input.
My problem is that I get the exact same randomized numbers every single time I run the Simulink simulation. And I was wondering if someone could help me solve my problem?
Here is the code (not all of it, but all of it that matters):
% 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
I've read about this solution:
coder.extrinsic('rng');
rng('shuffle');
I've used it in different ways but with no success. Some help would be greatly appriciated! Oh, and btw, I'm using MATLAB R2012a.
Thanks in advance, Niklas
The rand being called from your MATLAB Fcn Block is not the same rand as would be called from MATLAB, hence the reason why rng('shuffle');
has no effect on Simulink's random number generation.
You could force the MATLAB Fcn Block to use MATLAB's rand function by doing the equivalent to,
function y = fcn
%#codegen
coder.extrinsic('rand','rng');
y = 0;
persistent atTime0
if isempty(atTime0)
rng('shuffle');
atTime0 = false;
end
y = rand;
Or you can use the old style method for resetting the random number's seed
function y = fcn(seed)
%#codegen
persistent atTime0
if isempty(atTime0)
rand('seed',seed);
atTime0 = false;
end
y = rand;
But the easier approach is to feed the random number/vector in as an input generated by the Uniform Random Number Generator block, with its seed parameter being set randomly (using MATLAB's rand function).