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.

Generar números aleatorios que sean diferentes

Este ejemplo muestra cómo evitar repetir los mismos arreglos de números aleatorios al reiniciar MATLAB®. Esta técnica es útil cuando quiere combinar los resultados de los mismos comandos de números aleatorios ejecutados en distintas sesiones de MATLAB.

Todas las funciones de números aleatorios, rand, randn, randi y randperm, extraen valores de un generador de números aleatorios compartido. Cada vez que inicie MATLAB, el generador se restablece en el mismo estado con la semilla y algoritmo predeterminados. Así, un comando como rand(2,2) devuelve el mismo resultado cada vez que lo ejecute justo después del inicio en sesiones distintas de MATLAB que tengan las mismas preferencias para el generador de números aleatorios. Además, cualquier script o función que llame a las funciones de números aleatorios devuelve el mismo resultado siempre que reinicia.

Cuando inicia una sesión en MATLAB por primera vez o llama a rng("default"), MATLAB inicializa el generador de números aleatorios usando la semilla y algoritmo predeterminados. 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.

Una forma de obtener números aleatorios diferentes es iniciar el generador con una semilla diferente cada vez. Hacerlo así le asegura que no repite resultados de una sesión anterior.

Ejecute el comando rng("shuffle") cuando esté en su sesión de MATLAB antes de llamar a ninguna de las funciones de números aleatorios.

rng("shuffle")

Puede ejecutar este comando en una ventana de comandos de MATLAB o puede añadirlo a su archivo de inicio, que es un script especial que MATLAB ejecuta cada vez que reinicia.

Ahora, ejecute un comando de número aleatorio.

A = rand(2,2);

Cada vez que llama a rng("shuffle"), vuelve a establecer una semilla diferente en el generador según la hora actual.

Nota

Volver a alimentar el generador con frecuencia no mejora las propiedades estadísticas de la salida y no hace que sea más aleatoria en ningún sentido real. Volver a alimentar puede ser útil al reiniciar MATLAB o antes de ejecutar un gran cálculo con números aleatorios. Sin embargo, volver a alimentar el generador con demasiada frecuencia en una sesión no es una buena idea porque las propiedades estadísticas de los números aleatorios podrían verse negativamente afectadas.

Alternativamente, especifique semillas diferentes de forma explícita en sesiones de MATLAB diferentes con el algoritmo predeterminado. Por ejemplo, genere números aleatorios en una sesión de MATLAB.

rng(1);
A = rand(2,2);

Utilice semillas diferentes para generar números aleatorios en otra sesión de MATLAB.

rng(2);
B = rand(2,2);

Los arreglos A y B son diferentes porque el generador se ha iniciado con una semilla diferente antes de cada llamada a la función rand.

Para generar múltiples secuencias independientes que se garantiza que no se superponen, y para las que se han realizado pruebas que demuestran la independencia de los valores entre secuencias, se puede utilizar RandStream.create. Para obtener más información sobre la generación de varias secuencias, consulte Secuencias múltiples.

Consulte también

Temas relacionados