Azzera filtri
Azzera filtri

How to write function to generate gaussian distribution of normal numbers with specified mean, variance and number of values?

12 visualizzazioni (ultimi 30 giorni)
I am using MATLAB R2020a Psychtoolbox on Mac OS. I found the following code here to generate a gaussian distribution of random numbers and used it to write a function to specify the mean, variance, upper and lower limits and number of values, however it doesn't generate the numbers.
function distribution(va, mu, ul, ll, nvals)
multiplier=10;
x = mu + randn(multiplier*nvals,1)*sqrt(va); % Generate sufficient random numbers
idx = (ll <= x) & (x <= ul); % Extract the value in the given range [min max]
while sum(idx)<nvals
multiplier=multiplier+1;
x = mu + randn(multiplier*nvals,1)*sqrt(va); % Generate sufficient random numbers
idx = (ll <= x) & (x <= ul); % Extract the value in the given range [min max]
end
x = x(idx);
x = x(1:nvals); % Extract numbers
end

Risposta accettata

Jeff Miller
Jeff Miller il 19 Ago 2020
you must return something from your function:
function x = distribution(va, mu, ul, ll, nvals)
  3 Commenti
Jeff Miller
Jeff Miller il 20 Ago 2020
I'm guessing that with some numbers the code just takes a very long time to run. For example, with mean 0 and variance 1, it would take a long time to find numbers between the bounds of +10 and +11, because those are very low probability. You could speed up your function by keeping the numbers between ll and ul and only generating replacements (inside the loop) for those outside those boundaries.
Better still, you might look into MATLAB's truncated normal distribution objects. These will let you do what you want much more directly, something like
n = makedist('normal','mu',mu,'sigma',sqrt(va))
t = truncate(n,ll,ul)
x = random(t,nvals,1)

Accedi per commentare.

Più risposte (0)

Prodotti


Release

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by