이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

RandStream

난수 스트림

생성자

RandStream

설명

MATLAB®에서는 하나 이상의 난수 스트림에서 의사 난수를 생성할 수 있습니다. 난수로 구성된 배열을 생성하는 가장 간단한 방법은 rand, randn, randi 중 하나를 사용하는 것입니다. 이러한 함수는 모두 전역 스트림으로 알려진 동일한 균일 난수 스트림에 의존합니다. 사용자는 전역 스트림과 별개로 작동하는 다른 스트림을 만들 수 있고, 이러한 스트림의 rand, randi 또는 randn 방법을 사용하여 난수로 구성된 배열을 생성할 수 있습니다. 또한 난수 스트림을 만들어 이것을 전역 스트림으로 설정할 수도 있습니다.

단일 난수 스트림을 만들려면 RandStream 생성자를 사용하십시오. 여러 개의 독립적인 난수 스트림을 만들려면 RandStream.create를 사용하십시오. rng 함수는 새 전역 스트림을 만들 수 있는 간단한 인터페이스를 제공합니다.

stream = RandStream.getGlobalStream은 전역 난수 스트림 즉, rand, randi, randn 함수에서 현재 사용되는 난수 스트림을 반환합니다.

prevstream = RandStream.setGlobalStream(stream)은 난수 스트림 streamrand, randi, randn 함수에서 사용될 새 전역 스트림으로 지정하고, 이전 전역 스트림을 반환합니다.

난수 스트림 s에는 s의 동작을 제어하는 속성이 있습니다. p = s.Property 또는 s.Property = p를 사용하여 속성에 액세스하거나 할당하십시오. 다음 표에는 정의된 속성이 나와 있습니다.

속성

속성설명
Type(읽기 전용) 스트림에서 사용되는 생성기 알고리즘입니다. 가능한 생성기 목록은 RandStream.list에서 제공됩니다.
Seed(읽기 전용) 스트림을 만드는 데 사용되는 시드값입니다.
NumStreams(읽기 전용) 현재 스트림이 생성된 그룹에 포함된 스트림 개수입니다.
StreamIndex(읽기 전용) 현재 스트림이 생성된 스트림 그룹에서 현재 스트림의 인덱스입니다.
State

생성기의 내부 상태입니다. 이 속성의 형식에 의존해서는 안 됩니다. 사용자가 S.State에 할당하는 값은 S.State에서 이전에 읽은 값이어야 합니다. 스트림을 미리 State 속성에서 읽지 않고 예측 가능한 상태로 반환하려면 reset을 사용하십시오.

난수 스트림 s에서 생성한 난수열은 난수 생성기의 내부 상태에 의해 결정됩니다. 생성기의 내부 상태를 State 속성으로 저장하고 복원하는 방법으로 난수열을 재현할 수 있습니다.

Substream스트림이 현재 설정된 서브스트림의 인덱스입니다. 디폴트 값은 1입니다. 일부 생성기 유형은 여러 서브스트림을 지원하지 않습니다. 시차 피보나치 수열(Multiplicative Lagged Fibonacci) 생성기(mlfg6331_64)와 결합 다중 재귀적(Combined Multiple Recursive) 생성기(mrg32k3a)는 서브스트림을 지원합니다.
NormalTransformrandn(s, ...)가 일반 의사 난수 값을 생성하는 데 사용하는 변환 알고리즘입니다. 가능한 값은 'Ziggurat', 'Polar', 'Inversion' 중 하나입니다.
AntitheticS가 대조 의사 난수 값을 생성하는지 여부를 나타내는 논리값 즉, 1에서 뺀 일반 값입니다. 디폴트 값은 false입니다.
FullPrecisionS가 최상 정밀도를 사용하여 값을 생성하는지 여부를 나타내는 논리값입니다. FullPrecision이 false인 경우 일부 생성기는 의사 난수 값을 더 빠르게, 그러나 더 적은 난수 비트를 사용하여 만들 수 있습니다. 디폴트 값은 true입니다.

메서드

메서드설명
RandStream난수 스트림을 만듭니다.
RandStream.create여러 개의 독립적인 난수 스트림을 만듭니다.
get난수 스트림 객체의 속성을 가져옵니다.
list사용할 수 있는 난수 생성기 알고리즘을 나열합니다.
set난수 스트림 속성을 설정합니다.
RandStream.getGlobalStream전역 난수 스트림을 가져옵니다.
RandStream.setGlobalStream전역 난수 스트림을 설정합니다.
reset스트림을 해당 초기 내부 상태로 재설정합니다.
rand균등분포에서 생성된 의사 난수
randn표준 정규분포에서 생성된 의사 난수
randi이산 균등분포에서 생성된 의사 난수 정수
randperm일련의 값에 대한 임의 치환입니다.

예제

예제 1

단일 스트림을 만들고 이것을 현재 전역 스트림으로 지정합니다.

s = RandStream('mt19937ar','Seed',1);
RandStream.setGlobalStream(s);

예제 2

3개의 독립 스트림을 만듭니다.

[s1,s2,s3] = RandStream.create('mrg32k3a','NumStreams',3);
r1 = rand(s1,100000,1);
r2 = rand(s2,100000,1);
r3 = rand(s3,100000,1);
corrcoef([r1,r2,r3])

예제 3

독립 스트림 3개로 이루어진 집합 중 1개의 스트림만 만들고, 이를 현재 전역 스트림으로 지정합니다.

s2 = RandStream.create('mrg32k3a','NumStreams',3,...
     'StreamIndices',2);
RandStream.setGlobalStream(s2);

예제 4

rand, randi, randn의 기저를 이루는 전역 난수 스트림을 다시 시작점으로 재설정하여 이전 결과를 재현합니다.

stream = RandStream.getGlobalStream;
reset(stream);

예제 5

현재 전역 스트림의 상태를 저장하고 복원하여 rand의 출력값을 재현합니다.

stream = RandStream.getGlobalStream;
savedState = stream.State;
u1 = rand(1,5)
u1 =
    0.8147    0.9058    0.1270    0.9134    0.6324

stream.State = savedState;
u2 = rand(1,5)
u2 =
    0.8147    0.9058    0.1270    0.9134    0.6324
u2에는 u1와 정확히 같은 값이 포함되어 있습니다.

예제 6

전역 난수 스트림을 초기 설정으로 재설정합니다. 그러면 마치 새 MATLAB 세션에서 시작하는 것처럼, rand, randi, randn이 다시 시작됩니다.

s = RandStream('mt19937ar','Seed',0);
RandStream.setGlobalStream(s);

예제 7

현재 시간에 기반한 시드값을 사용하여 전역 난수 스트림을 다시 초기화합니다. 그러면 rand, randi, randn이 다른 MATLAB 세션에서 다른 값을 반환합니다. 일반적으로 이 방법은 MATLAB이 생성하는 난수의 통계 속성에 영향을 줄 수 있으므로, MATLAB 세션 당 두 번 이상 사용하는 것은 좋지 않습니다.

s = RandStream('mt19937ar','Seed','shuffle');
RandStream.setGlobalStream(s);

예제 8

randn이 사용하는 변환 알고리즘을 변경하여 균등하게 분포된 값에서 정규 의사 난수 값을 생성합니다. 이는 전역 스트림을 교체하거나 재설정하지 않습니다.

stream = RandStream.getGlobalStream;
stream.NormalTransform = 'inversion'

참고 항목

| | |