Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Generar números pseudoaleatorios

Pseudoaleatorio los números son generados por algoritmos deterministas. Son "aleatorios" en el sentido de que, en promedio, pasan pruebas estadísticas con respecto a su distribución y correlación. Difieren de los verdaderos números aleatorios en que son generados por un algoritmo, en lugar de un proceso verdaderamente aleatorio.

(RNGs) como aquellos en son algoritmos para generar números pseudoaleatorios con una distribución especificada.Generadores de números aleatoriosMATLAB®

Para obtener más información sobre la GUI para generar números aleatorios a partir de distribuciones admitidas, consulte.Explore la IU de generación de números aleatorios

Métodos de generación de números Pseudorandom comunes

Los métodos para generar números seudoaleatorios suelen comenzar con un número aleatorio uniforme, como la función produce.MATLABrand Los métodos descritos en esta sección detallan cómo producir números aleatorios de otras distribuciones.

Métodos directos

Los métodos directos utilizan directamente la definición de la distribución.

Por ejemplo, considere los números aleatorios binomiales. Un número aleatorio binomial es el número de cabezas en lanzamientos de una moneda con probabilidad de una cabeza en un solo lanzamiento. Si genera números aleatorios uniformes en el intervalo y cuente el número menos de(0,1) , el recuento es un número aleatorio binomial con parámetros Y .

Esta función es una simple implementación de una RNG binomial utilizando el enfoque directo:

 function X = directbinornd(N,p,m,n)     X = zeros(m,n); % Preallocate memory     for i = 1:m*n         u = rand(N,1);         X(i) = sum(u < p);     end end  

Por ejemplo:

rng('default') % For reproducibility X = directbinornd(100,0.3,1e4,1); histogram(X,101) 

La función utiliza un método directo modificado, basado en la definición de una variable aleatoria binomial como la suma de las variables aleatorias de Bernoulli.binornd

Puede convertir fácilmente el método anterior a un generador de números aleatorios para la distribución de Poisson con parámetro . Es el caso limitante de la distribución binomial comoDistribución de Poisson se aproxima al infinito, se aproxima a cero y se mantiene fija en . Para generar números aleatorios de Poisson, cree una versión del generador anterior que aporte en lugar de Y , e internamente establece a un gran número y Para .

La función utiliza en realidad dos métodos directos:poissrnd

  • Un método de tiempo de espera para valores pequeños de

  • Un método debido a Ahrens y Dieter para valores más grandes de

Métodos de inversión

Los métodos de inversión se basan en la observación de que las funciones de distribución acumulativa continuas (CDFS) oscilan uniformemente en el intervalo.(0,1) Si es un número aleatorio uniforme en, a continuación, utilizando(0,1) genera un número aleatorio de una distribución continua con la CDF especificada .

Por ejemplo, el código siguiente genera números aleatorios de un específico utilizando el CDF inverso y el generador de número aleatorio uniforme de MATLAB®:Distribución exponencialrand

rng('default') % For reproducibility mu = 1; X = expinv(rand(1e4,1),mu); 

Compare la distribución de los números aleatorios generados con el pdf del exponencial especificado escalando el pdf al área del histograma utilizado para mostrar la distribución:

numbins = 50; h = histogram(X,numbins); hold on histarea = h.BinWidth*sum(h.Values); x = h.BinEdges(1):0.001:h.BinEdges(end); y = exppdf(x,mu); plot(x,histarea*y,'r','LineWidth',2) hold off 

Los métodos de inversión también funcionan para distribuciones discretas. Para generar un número aleatorio de una distribución discreta con vector de masa de probabilidad Dónde , genere un número aleatorio uniforme y luego establecer(0,1) Si .

Por ejemplo, la siguiente función implementa un método de inversión para una distribución discreta con vector de masa de probabilidad :

 function X = discreteinvrnd(p,m,n)     X = zeros(m,n); % Preallocate memory     for i = 1:m*n         u = rand;         I = find(u < cumsum(p));         X(i) = min(I);     end end  

Utilice la función para generar números aleatorios a partir de cualquier distribución discreta:

p = [0.1 0.2 0.3 0.2 0.1 0.1]; % Probability mass vector X = discreteinvrnd(p,1e4,1); h = histogram(X,length(p)); bar(1:length(p),h.Values) 

Métodos de rechazo de aceptación

La forma funcional de algunas distribuciones dificulta o consume mucho tiempo generar números aleatorios utilizando métodos directos o de inversión. Los métodos de rechazo de aceptación proporcionan una alternativa en estos casos.

Los métodos de aceptación-rechazo comienzan con números aleatorios uniformes, pero requieren un generador de número aleatorio adicional. Si su objetivo es generar un número aleatorio a partir de una distribución continua con PDF , los métodos de rechazo de aceptación generan primero un número aleatorio de una distribución continua con PDF Satisfactorio para algunos y todos los .

Una RNG continua de aceptación-rechazo procede de la siguiente manera:

  1. Elige una densidad .

  2. Encuentra una constante tal que para todos los .

  3. Genera un número aleatorio uniforme .

  4. Genera un número aleatorio De .

  5. Si , acepta y devuelve . De lo contrario, rechaza y va al paso 3.

Para la eficiencia, un método "barato" es necesario para generar números aleatorios de , y el escalar debe ser pequeño. El número esperado de iteraciones para producir un único número aleatorio es .

La siguiente función implementa un método de rechazo de aceptación para generar números aleatorios a partir de PDF Dado , , el RNG Grnd para , y la constante :

 function X = accrejrnd(f,g,grnd,c,m,n)     X = zeros(m,n); % Preallocate memory     for i = 1:m*n         accept = false;         while accept == false             u = rand();             v = grnd();             if c*u <= f(v)/g(v)                X(i) = v;                accept = true;             end         end     end end  

Por ejemplo, la función satisface las condiciones de un PDF en (no negativo y se integra a 1). El pdf exponencial con la media 1, Domina Para mayor que alrededor de 2,2. Por lo tanto, puede utilizar y generar números aleatorios derandexprnd :

f = @(x)x.*exp(-(x.^2)/2); g = @(x)exp(-x); grnd = @()exprnd(1); rng('default') % For reproducibility X = accrejrnd(f,g,grnd,2.2,1e4,1); 

El pdf es en realidad un con el parámetro de forma 1.Rayleigh Distribution Este ejemplo compara la distribución de números aleatorios generados por el método de aceptación-rechazo con los generados por:raylrnd

Y = raylrnd(1,1e4,1); histogram(X) hold on histogram(Y) legend('A-R RNG','Rayleigh RNG') 

La función utiliza un método de transformación, que expresa una variable aleatoria de Rayleigh en términos de una variable aleatoria de Chi-cuadrada, que se calcula utilizando.raylrndrandn

Los métodos de rechazo de aceptación también funcionan para distribuciones discretas. En este caso, el objetivo es generar números aleatorios a partir de una distribución con masa de probabilidad , suponiendo que tiene un método para generar números aleatorios a partir de una distribución con masa de probabilidad . El RNG procede de la siguiente manera:

  1. Elige una densidad .

  2. Encuentra una constante tal que para todos los .

  3. Genera un número aleatorio uniforme .

  4. Genera un número aleatorio De .

  5. Si , acepta y devuelve . De lo contrario, rechaza y va al paso 3.

Temas relacionados