MATLAB Answers

0

Controlled Random Generator based off of two columns

Asked by Tessa Aus on 24 Aug 2019 at 17:33
Latest activity Edited by dpb
on 25 Aug 2019 at 18:08
I have two columns in Table A, the first column is randomly generats values between 10 and 3600 but the second column needs to be randomly generated based on the first columns values. The second column needs to be a value equal to or less than column 1's equivalent row and if the random value is lower and not equal to it, it must be divisible by traffic.R_P.
I tried the below for loop but of course it is generating random numbers not divisible by traffic.R_P. Not sure how to create a controlled random generator with values divisible by another column.
example is
traffic.R_P = [2500 1200 200 400]
traffic.XX = [2500 60 0 10] %CORRECT and Want
traffic.XX = [2400 60 1100 300] %Incorrect and what I am getting from below code
traffic.R_P = randi([1,36],TDT_Total_ID,1)*100; %is working fine and correctly populating
for T_row = 1 : TDT_Total_ID
traffic.XX(R_dith_row,1) = randi([1,(traffic.R_D(T_row,1)/10)],T_row,1)*10;
end

  3 Comments

dpb
on 24 Aug 2019 at 18:31
" first column is randomly generat[e]s values between 10 and 3600"
randi([1,36],TDT_Total_ID,1)*100;
will not generate values between 10 and 3600, but between 100 and 3600 and will only be in increments of 100.
"two columns in Table A, ..."
but there's not a variable A in sight so it's not at all clear how all the above relates?
What's the actual population of possible values this first column consists of? The second then has to be a selection from that population's factors to be evenly divisible.
Apologies and good catch you are correct with the population being between 100 and 3600. See below for correction. Traffic.R_P are all values from 100 to 3600 but traffic.XX can be any values from 10 to 3600, hence why in the for loop the values of R_P are divided by 10. And variable A is incorrect it should say table 'traffic'.
traffic.R_P = [2500 1200 200 400]
traffic.XX = [100 200 50 400]
dpb
on 25 Aug 2019 at 13:41
"t traffic.XX can be any values from 10 to 3600"
But in example
traffic.XX = [2500 60 0 10] %CORRECT and Want
you have a 0 element which the comment says is "%CORRECT and Want"???

Sign in to comment.

1 Answer

Answer by dpb
on 25 Aug 2019 at 14:24
Edited by dpb
on 25 Aug 2019 at 18:08

function x=trafficX(RP,LO)
% returns random count of X within upper limit RP but evenly divisible factor with lower limit LO
% LO is 10 by default
if nargin<2, LO=10; end % set default value if not provided explicitly
xx=[LO:10:RP]; % candidate values allowable
ix=find(fix(RP./xx)==RP./xx); % those evenly divisible
x=xx(randperm(numel(ix),1)); % return random selection from allowable subset
end
Use the above as
...
traffic.R_P = randi([1,36],TDT_Total_ID,1)*100;
traffic.XX=arrayfun(@trafficX(traffic.R_P));
...

  0 Comments

Sign in to comment.