1
votes

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

1

1 Answers

5
votes

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).