Main Content

La traducción de esta página está obsoleta. 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 reales entre 0 y 1 que se extraen de una distribución uniforme. Por ejemplo:

rng('default')
r1 = rand(1000,1);
r1 es un vector columna 1000 por 1 que contiene números de punto flotante reales extraídos de una distribución uniforme. 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:

r2 = randi(10,1000,1);
r2 es un vector columna 1000 por 1 que contiene valores enteros de una distribución uniforme discreta cuyo rango está 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:

r3 = randn(1000,1);
r3 es un vector columna 1000 por 1 que contiene números extraídos de una distribución normal estándar. 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:

r4 = randperm(15,5);
r4 es un arreglo 1 por 5 que contiene enteros seleccionados aleatoriamente del intervalo [1,15]. 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 twister (se utiliza de forma predeterminada al iniciar MATLAB)mt19937ar
'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') restablece el generador a su estado predeterminado. 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.

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