¿Cómo genera matlab números aleatorios a partir de una distribución específica?
Déjame copiarte otra función:
============================= == ==============
función y=dis_rand(x, p, n)
dis_rand genera números aleatorios distribuidos discretos
x: valores posibles
p: probabilidad del valor
n: el número de números aleatorios que se generarán
cp=cumsum(p);
p>y=zeros(1,n);
for i=1:n
y(i)=x(sum(cplt;= rand(1) ) 1);
end
Descripción del algoritmo: utilice la función rand en matlab para obtener números aleatorios distribuidos uniformemente en el intervalo [0, 1] y convierta [ 0, 1] Segmentación de intervalos, la longitud de cada segmento es la probabilidad de cada valor posible del número aleatorio. Cuando el número aleatorio distribuido uniformemente cae en el i-ésimo segmento, se genera el i-ésimo valor posible.
===========================================< / p>
Tu pregunta se llama así:
y=dis_rand([0 0.5 1], [1/3 1/3 1/3], 100)
Es decir, genera 100 números aleatorios a partir de los tres números 0, 0,5 y 1 según la probabilidad que desees. Pero lo verifiqué porque rand en sí no es muy preciso cuando el número de muestras es pequeño, por lo que con 100 muestras, la probabilidad de 1/3 todavía está significativamente sesgada. Sin embargo, es difícil que todas las cosas probabilísticas sean "exactas" en muestras pequeñas.