Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

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);
Todos los valores de 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);
Todos los valores de 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);
El histograma de 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);
A diferencia de 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.

ValorNombre del generadorPalabra clave del generador
"twister"Mersenne Twistermt19937ar
"simdTwister"Mersenne Twister rápido orientado a SIMDdsfmt19937
"combRecursive"Combinado múltiple recursivomrg32k3a
"multFibonacci"Fibonacci retardado multiplicativomlfg6331_64
"philox"Generador Philox 4x32 con 10 rondasphilox4x32_10
"threefry"Generador Threefry 4x64 con 20 rondasthreefry4x64_20
"v4"Generador versión 4.0 de MATLAB heredadomcg16807
"v5uniform"Generador uniforme versión 5.0 de MATLAB heredadoswb2712
"v5normal"Generador normal versión 5.0 de MATLAB heredadoshr3cong

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.

A partir de la versión R2023b, puede establecer la semilla y algoritmo predeterminados en las preferencias de MATLAB. 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

| | | |

Temas relacionados