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

12 visualizaciones (últimos 30 días)
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

Respuesta aceptada

Jeff Miller
Jeff Miller el 19 de Ag. de 2020
you must return something from your function:
function x = distribution(va, mu, ul, ll, nvals)
  3 comentarios
Jeff Miller
Jeff Miller el 20 de Ag. de 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)

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Timing and presenting 2D and 3D stimuli en Help Center y File Exchange.

Productos


Versión

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by