Crear arreglos de números aleatorios
R2026bMATLAB® utiliza algoritmos deterministas para generar números pseudoaleatorios. Estos números no son verdaderamente aleatorios ni independientes en el sentido matemático, pero superan pruebas estadísticas de aleatoriedad y de independencia, y puede reproducir la secuencia de números aleatorios 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 permite controlar la semilla y el algoritmo que genera números aleatorios.
Generar números aleatorios
Puede utilizar las funciones rand, randi, randn y randperm para generar números aleatorios que siguen distintos tipos de distribuciones. La función rand genera números de punto flotante aleatorios entre 0 y 1 que se extraen de una distribución uniforme. Por ejemplo, cree un vector columna de 10.000 por 1 que contenga números de punto flotante reales extraídos de una distribución uniforme.
rng("default")
n = 10000;
r1 = rand(n,1);r1 están en el intervalo abierto (0,1). Represente un histograma de estos valores. El histograma es casi plano, lo que indica que la muestra de valores sigue una distribución uniforme.histogram(r1) xlabel("Value") ylabel("Counts") title("Histogram of rand(" + n + ",1)")
La función randi genera valores enteros double aleatorios extraídos de una distribución uniforme discreta. Por ejemplo, cree un vector columna de 10.000 por 1 que contenga valores enteros en el intervalo cerrado [1,10] extraídos de una distribución uniforme discreta.
n = 10000; r2 = randi(10,n,1);
histogram(r2) xlabel("Value") ylabel("Counts") title("Histogram of randi(10," + n + ",1)")
La función randn genera números de punto flotante reales que se extraen de una distribución normal estándar. Por ejemplo, cree un vector columna de 20.000 por 1 que contenga números extraídos de una distribución normal estándar.
n = 20000; r3 = randn(n,1);
histogram(r3) xlabel("Value") ylabel("Counts") title("Histogram of randn(" + n + ",1)")
La función randperm genera un arreglo double de enteros aleatorios sin valores repetidos. Por ejemplo, cree un arreglo de 1 por 10 que contenga enteros seleccionados aleatoriamente del intervalo [1,15].
r4 = randperm(15,10);
randi, que puede devolver un arreglo que contenga valores repetidos, randperm devuelve un arreglo sin valores repetidos. Represente un histograma de estos valores. Cada entero aparece como máximo una vez en el histograma.histogram(r4) xticks(1:15) xlim([0 16]) yticks([0 1]) xlabel("Value") ylabel("Counts") title("Histogram of randperm(15,10)")
Llamadas sucesivas a cualquiera de estas funciones devuelven diferentes resultados. Este comportamiento es útil para crear distintos arreglos de valores aleatorios.
Especificar la semilla y el generador de números aleatorios
Puede utilizar la función rng para establecer la semilla y el algoritmo del generador que utilizan las funciones rand, randi, randn y randperm. La semilla establece el estado inicial de un generador de números aleatorios y permite reproducir una secuencia de números aleatorios. El algoritmo del generador determina el algoritmo utilizado para producir una secuencia de números aleatorios.
MATLAB proporciona los algoritmos del generador en esta tabla.
| Nombre | Descripción |
|---|---|
"twister" (valor predeterminado) | Mersenne Twister |
"combRecursive" | Generador combinado múltiple recursivo |
"multFibonacci" | Generador de Fibonacci retardado multiplicativo |
| Generador congruencial permutado de 64 bits con multiplicación xor-shift doble |
"philox" | Generador Philox 4x32 con 10 rondas |
"simdTwister" | Mersenne Twister rápido orientado a SIMD |
"threefry" | Generador Threefry 4x64 con 20 rondas |
| Generador xor-shift-rotate con estado de 256 bits y suma doble |
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 del 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 poder 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 Control Random Number Generation.
Puede cambiar la semilla y el algoritmo predeterminados para el generador de números aleatorios en la ventana de configuración de MATLAB (desde R2023b). Si no cambia esta configuración, rng utiliza el valor de fábrica de "twister" para el generador Mersenne Twister con semilla 0. Para obtener más información, consulte Configuración predeterminada del generador de números aleatorios y Reproducibilidad del generador de números aleatorios.
Especificar 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)A = 1×5
0.8147 0.9058 0.1270 0.9134 0.6324También puede especificar explícitamente el tipo de datos de los números aleatorios. Por ejemplo, especifique el tipo de datos como double.
rng("default") B = rand(1,5,"double")
B = 1×5
0.8147 0.9058 0.1270 0.9134 0.6324tf = isequal(A,B)
ans = logical 1
rand y randn también pueden generar valores de precisión simple.
rng("default") A_single = rand(1,5,"single")
A_single = 1×5 single row vector
0.8147 0.9058 0.1270 0.9134 0.6324Los valores son los mismos que si hubiera convertido los valores de precisión doble del ejemplo anterior a precisión simple. La secuencia de números aleatorios de la que extrae la función rand avanza de la misma manera con independencia del tipo de datos de salida.
B_single = cast(B,"single");
isequal(A_single,B_single)ans = logical 1
La función randi admite tipos de precisión simple y doble y todos los tipos de enteros excepto int64 y uint64.
A = randi([1 10],1,5,"double")A = 1×5
1 3 6 10 10B_uint8 = randi([1 10],1,5,"uint8")B_uint8 = 1×5 uint8 row vector
2 10 10 5 9Consulte también
rng | rand | randi | randn | randperm