Crear arreglos de números aleatorios
MATLAB® utiliza algoritmos para generar números seudoaleatorios y seudoindependientes. Estos números no son estrictamente aleatorios ni independientes en el sentido matemático, pero superan varias pruebas estadísticas de aleatoriedad y de independencia, y su cálculo se puede repetir con fines de prueba o de diagnóstico.
Las funciones rand
, randi
, randn
y randperm
son las funciones primarias para crear arreglos de números aleatorios. La función rng
le permite controlar la semilla y el algoritmo que genera números aleatorios.
Funciones de números aleatorios
Existen cuatro funciones de números aleatorios: rand
, randi
, randn
y randperm
. La función rand
devuelve números de punto flotante entre 0 y 1 que se extraen de una distribución uniforme. Por ejemplo, cree un vector columna de 1000 por 1 que contenga números de punto flotante reales extraídos de una distribución uniforme.
rng("default")
r1 = rand(1000,1);
r1
están en el intervalo abierto (0,1). El histograma de estos valores es casi plano, lo que indica un muestreo de números bastante uniforme.La función randi
devuelve valores enteros double
extraídos de una distribución uniforme discreta. Por ejemplo, cree un vector columna de 1000 por 1 que contenga valores enteros de una distribución uniforme discreta.
r2 = randi(10,1000,1);
r2
están en el intervalo cerrado [1, 10]. El histograma de estos valores es casi plano, lo que indica un muestreo de números enteros entre 1 y 10 bastante uniforme. La función randn
devuelve arreglos de números de punto flotante reales que se extraen de una distribución normal estándar. Por ejemplo, cree un vector columna de 1000 por 1 que contenga números extraídos de una distribución normal estándar.
r3 = randn(1000,1);
r3
parece una distribución casi normal cuyo promedio es 0 y cuya desviación estándar es 1.Puede usar la función randperm
para crear un arreglo double
de valores enteros aleatorios que no tengan valores repetidos. Por ejemplo, cree un arreglo de 1 por 5 que contenga enteros seleccionados aleatoriamente del intervalo [1, 15].
r4 = randperm(15,5);
randi
, que puede devolver un arreglo que contenga valores repetidos, el arreglo que devuelve randperm
no tiene valores repetidos.Llamadas sucesivas a cualquiera de estas funciones devuelven diferentes resultados. Este comportamiento es útil para crear varios arreglos diferentes de valores aleatorios.
Generadores de números aleatorios
MATLAB ofrece varias opciones de algoritmo de generación que se resumen en la tabla.
Valor | Nombre del generador | Palabra clave del generador |
---|---|---|
"twister" | Mersenne Twister | mt19937ar |
"simdTwister" | Mersenne Twister rápido orientado a SIMD | dsfmt19937 |
"combRecursive" | Combinado múltiple recursivo | mrg32k3a |
"multFibonacci" | Fibonacci retardado multiplicativo | mlfg6331_64 |
"philox" | Generador Philox 4x32 con 10 rondas | philox4x32_10 |
"threefry" | Generador Threefry 4x64 con 20 rondas | threefry4x64_20 |
"v4" | Generador versión 4.0 de MATLAB heredado | mcg16807 |
"v5uniform" | Generador uniforme versión 5.0 de MATLAB heredado | swb2712 |
"v5normal" | Generador normal versión 5.0 de MATLAB heredado | shr3cong |
Utilice la función rng
para establecer la semilla y el generador que utilizan las funciones rand
, randi
, randn
y randperm
.
Por ejemplo, rng(0,"twister")
establece la semilla en 0 y el algoritmo generador en Mersenne Twister. Para evitar la repetición de arreglos de números aleatorios al reiniciar MATLAB, consulte ¿Por qué se repiten números aleatorios después del inicio?
Para obtener más información sobre el control del estado del generador de números aleatorios para repetir los cálculos con los mismos números aleatorios o para garantizar que números aleatorios diferentes se usan en cálculos repetidos, consulte Controlar la generación de números aleatorios.
Puede establecer la semilla y algoritmo predeterminados en las preferencias de MATLAB (desde R2023b). Si no cambia estas preferencias, rng
utiliza el valor de fábrica de "twister"
para el generador Mersenne Twister con semilla 0, como en las versiones anteriores. Para obtener más información, consulte Configuración predeterminada del generador de números aleatorios y Reproducibilidad del generador de números aleatorios.
Tipos de datos de números aleatorios
De forma predeterminada, las funciones rand
y randn
generan valores de precisión doble.
rng("default")
A = rand(1,5);
class(A)
ans = 'double'
Para especificar la clase como doble de forma explícita:
rng("default") B = rand(1,5,"double"); class(B)
ans = 'double'
isequal(A,B)
ans = 1
rand
y randn
también pueden generar valores de precisión simple.
rng("default") A = rand(1,5,"single"); class(A)
ans = 'single'
Los valores son los mismos que si hubiera proyectado los valores de precisión doble del ejemplo anterior. La secuencia aleatoria de la que extraen las funciones avanza de la misma manera con independencia de la clase de valores que se devuelvan.
A,B
A = 0.8147 0.9058 0.1270 0.9134 0.6324 B = 0.8147 0.9058 0.1270 0.9134 0.6324
randi
admite tanto tipos enteros como precisión doble y simple.
A = randi([1 10],1,5,"double");
class(A)
ans = 'double'
B = randi([1 10],1,5,"uint8");
class(B)
ans = 'uint8'
Consulte también
rng
| rand
| randi
| randn
| randperm