Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

La gestión de la transmisión global

, y dibuje números aleatorios de una secuencia numérica aleatoria subyacente, llamada la secuencia global.randrandnrandi La función proporciona una forma sencilla de controlar la secuencia global.rng Para un control más exhaustivo, la clase le permite obtener un identificador para la secuencia global y controlar la generación de números aleatorios.RandStream

Obtenga un identificador de la secuencia global de la siguiente manera:

globalStream = RandStream.getGlobalStream globalStream =   mt19937ar random stream (current global stream)              Seed: 0   NormalTransform: Ziggurat

Devuelva las propiedades de la secuencia con el método:get

get(globalStream)              Type: 'mt19937ar'        NumStreams: 1       StreamIndex: 1         Substream: 1              Seed: 0             State: [625x1 uint32]   NormalTransform: 'Ziggurat'        Antithetic: 0     FullPrecision: 1

Ahora, utilice la función para generar valores aleatorios uniformes de la secuencia global.rand

rand(1,5);

Utilice las funciones y para generar valores aleatorios normales y valores aleatorios enteros de la secuencia global.randnrandi

A = randi(100,1,5); A = randn(1,5); 

La propiedad es el estado interno del generador.State Puede guardar el de.StateglobalStream

myState = globalStream.State; 

Utilizando, puede restaurar el estado y reproducir los resultados anteriores.myStateglobalStream

myState = globalStream.State; A = rand(1,100); globalStream.State = myState; B=rand(1,100); isequal(A,B)  ans =       1

, y acceda a la transmisión global.randrandirandn Puesto que todas estas funciones acceden a la misma secuencia subyacente, una llamada a uno afecta a los valores producidos por los demás en las llamadas subsiguientes.

globalStream.State = myState; A = rand(1,100); globalStream.State = myState; randi(100); B = rand(1,100); isequal(A,B)  ans =       0

La secuencia global es un objeto de identificador de la clase. Devuelve un identificador.RandStreamRandStream.getGlobalStream Las propiedades de la secuencia global se pueden ver o modificar desde cualquier identificador a la secuencia.

stream1=RandStream.getGlobalStream; stream2=RandStream.getGlobalStream; stream1.NormalTransform='Polar'; stream2.NormalTransform ans =  Polar 

En la tabla siguiente se muestran los métodos disponibles para la clase.RandStream Los métodos estáticos se indican con la sintaxis.RandStream.methodName

MétodoDescripción
RandStreamCree un flujo de números aleatorios
RandStream.createCree varias secuencias de números aleatorios independientes
getObtenga las propiedades de un flujo aleatorio
RandStream.listEnumerar los algoritmos de generador de números aleatorios disponibles
RandStream.getGlobalStreamObtenga el flujo de números aleatorios globales
RandStream.setGlobalStreamEstablezca el flujo de números aleatorios globales
setEstablezca una propiedad de una secuencia aleatoria
resetRestablezca una secuencia a su estado interno inicial
randGenere números pseudoaleatorios a partir de una distribución uniforme
randnGenere números pseudoaleatorios a partir de una distribución normal estándar
randiGenere enteros pseudoaleatorios a partir de una distribución discreta uniforme
randpermPermutación aleatoria de un conjunto de valores

Las propiedades de una secuencia aleatoria reciben la siguiente tabla.

PropiedadDescripción
Type(Sólo lectura) Algoritmo del generador utilizado por la secuencia. especifica los generadores posibles.RandStream.list
Seed(Sólo lectura) Valor de inicialización utilizado para crear la secuencia.
NumStreams(Sólo lectura) Número de secuencias en el grupo en el que se creó la secuencia actual.
StreamIndex(Sólo lectura) Índice de la secuencia actual entre el grupo de secuencias con la que se creó la secuencia actual.
StateEstado interno del generador. No dependa del formato de esta propiedad. El valor que asigne debe ser un valor al que se haya leído anteriormente.S.StateS.State
SubstreamÍndice de la subsecuencia a la que se establece actualmente la secuencia. El valor predeterminado es 1. Las subsecuencias múltiples no son soportadas por todos los tipos de generadores; el generador de Fibonacci retrasado multiplicativo () y combinado múltiple recursivo generador () soporta substreams.mlfg6331_64mrg32k3a
NormalTransformAlgoritmo de transformación utilizado para generar valores pseudoaleatorios normales.randn(s, ...) Los valores posibles son, o.'Ziggurat''Polar''Inversion'
AntitheticValor lógico que indica si genera valores seudoaleatorios antiestéticos.S Para los valores uniformes, estos son los valores habituales restados de 1. El valor predeterminado es false.
FullPrecisionValor lógico que indica si genera valores utilizando su precisión completa.s Algunos generadores pueden crear valores pseudoaleatorios más rápido, pero con menos bits al azar, si es false.FullPrecision El valor predeterminado es true.

Supongamos que desea repetir una simulación. La clase le ofrece varias formas de replicar la salida.RandStream Como se muestra en el ejemplo anterior, puede guardar el estado de la secuencia global.

myState=GlobalStream.State; A=rand(1,100); GlobalStream.State=myState; B=rand(1,100); isequal(A,B)  ans =       1

También puede restablecer una secuencia a su configuración inicial con el método.reset

reset(GlobalStream) A=rand(1,100); reset(GlobalStream) B=rand(1,100); isequal(A,B)  ans =       1

Tipos de datos de número aleatorio

y genere valores de doble precisión de forma predeterminada.randrandn

GlobalStream=RandStream.getGlobalStream; myState=GlobalStream.State; A=rand(1,5); class(A)  ans =  double

Para especificar la clase como Double explícitamente:

GlobalStream.State=myState; B=rand(1,5,'double'); class(B)  ans =  double isequal(A,B)  ans =       1

y también generará valores en una precisión única.randrandn

GlobalStream.State=myState; A=rand(1,5,'single'); class(A) ans =  single 

Los valores son los mismos que si hubiera fundido los valores de doble precisión del ejemplo anterior. El flujo aleatorio que las funciones dibujan de los avances de la misma manera, independientemente de la clase de valores que se devuelve.

A,B  A =      0.8235    0.6948    0.3171    0.9502    0.0344   B =      0.8235    0.6948    0.3171    0.9502    0.0344

admite tipos enteros y precisión simple o doble.randi

A=randi([1 10],1,5,'double'); class(A)  ans =  double B=randi([1 10],1,5,'uint8'); class(B)  ans =  uint8