Main Content

RandStream.create

통계적으로 독립적인 난수 스트림 생성

설명

s = RandStream.create(gentype)gentype으로 지정된 균일 의사 난수 생성기 알고리즘을 사용하여 단일 난수 스트림을 만듭니다. RandStream.listgentype에 사용 가능한 모든 값을 반환합니다. 또는 생성기 알고리즘에 대한 자세한 내용은 난수 스트림을 만들고 제어하기 항목을 참조하십시오. 단일 스트림을 만들 때에는 훨씬 간결한 대안인 RandStream 함수를 사용하는 것이 좋습니다.

예제

[s1,s2,...] = RandStream.create(gentype,'NumStreams',n)n개의 난수 스트림을 만듭니다. 스트림은 의사 난수라는 의미에서 독립적입니다. 스트림은 다른 시점에 생성된 스트림에 대해 반드시 독립적이지는 않습니다.

참고

모든 생성기 유형이 다중 스트림을 지원하는 것은 아닙니다. 시차 피보나치 수열(Multiplicative Lagged Fibonacci) 생성기('mlfg6331_64') 또는 결합 다중 재귀적(Combined Multiple Recursive) 생성기('mrg32k3a')를 사용하여 다중 스트림을 만듭니다.

예제

[___] = RandStream.create(gentype,Name,Value)는 하나 이상의 Name,Value 쌍을 사용하여 스트림의 생성을 제어합니다.

예제

모두 축소

3개의 독립 스트림을 만듭니다. 각 스트림에서 난수를 생성합니다. 스트림 간의 상관을 확인합니다. 서로 다른 스트림은 분포에서 추출된 표본값을 사용하여 계산되므로 스트림 간의 상관은 정확히 0이 되지 않습니다.

[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])
ans = 3×3

    1.0000    0.0016   -0.0019
    0.0016    1.0000   -0.0012
   -0.0019   -0.0012    1.0000

3개의 독립 스트림에서 1개의 스트림을 만들어 전역 스트림으로 지정할 수도 있습니다.

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

전역 스트림에서 난수를 생성합니다.

r = rand(100000,1);

RandStream.create 메서드를 사용하여 1차원 무작위 행보를 시뮬레이션하는 3개의 상호 독립적인 스트림을 만듭니다.

[s1,s2,s3] = RandStream.create('mrg32k3a','NumStreams',3);

첫 번째 스트림에서 무작위 행보를 생성합니다. 먼저, 이를 전역 스트림으로 설정합니다. 첫 번째 스트림을 사용하여 표준 정규분포에서 5,000개의 임의 스텝을 생성합니다. 시작 위치를 0으로 선택하고 cumsum을 사용하여 임의 스텝의 누적합을 계산합니다. 결과로 생성되는 무작위 행보를 플로팅합니다.

RandStream.setGlobalStream(s1)
dy1 = randn(5000,1);
y1 = cumsum([0; dy1]);
plot(y1)

Figure contains an axes object. The axes object contains an object of type line.

두 번째 스트림과 세 번째 스트림을 사용하여 이 과정을 반복합니다. 결과를 동일한 좌표축에 플로팅합니다.

hold on;
dy2 = randn(s2,5000,1);
y2 = cumsum([0; dy2]);
plot(y2)
dy3 = randn(s3,5000,1);
y3 = cumsum([0; dy3]);
plot(y3)
hold off

Figure contains an axes object. The axes object contains 3 objects of type line.

스트림 간 상관을 계산합니다. 서로 다른 스트림은 분포에서 추출된 표본값을 사용하여 계산되므로 스트림 간의 상관은 정확히 0이 되지 않습니다.

C = corrcoef([dy1 dy2 dy3])
C = 3×3

    1.0000   -0.0363    0.0155
   -0.0363    1.0000   -0.0012
    0.0155   -0.0012    1.0000

입력 인수

모두 축소

난수 생성기 알고리즘으로, 난수 생성기의 이름을 지정하는 문자형 벡터 또는 string형 스칼라로 지정됩니다. MATLAB®은 몇 가지 생성기 알고리즘을 제공합니다. 다음 표에는 사용 가능한 생성기 알고리즘의 이름과 주요 속성이 요약되어 있습니다. 자세한 내용은 난수 스트림을 만들고 제어하기 항목을 참조하십시오.

이름생성기다중 스트림 및 서브스트림 지원 여부최대 정밀도의 근사 주기
'mt19937ar'메르센 트위스터(Mersenne Twister)아니요219937-1
'dsfmt19937'SIMD 기반 고속 메르센 트위스터(SIMD-Oriented Fast Mersenne Twister) 아니요219937-1
'mlfg6331_64'시차 피보나치 수열 생성기2124(길이가 272인 251개의 스트림)
'mrg32k3a'결합 다중 재귀적 생성기2191(길이가 2127인 263개의 스트림)
'philox4x32_10'10회 라운드의 Philox 4x32 생성기2193(길이가 2129인 264개의 스트림)
'threefry4x64_20'20회 라운드의 Threefry 4x64 생성기2514(길이가 2258인 2256개의 스트림)
'shr3cong'선형 합동법 생성기로 계산된 시프트 레지스터 생성기아니요264
'swb2712'수정된 자리 내림을 사용하는 뺄셈 생성기아니요21492
'mcg16807'승산식 합동법 생성기아니요231-2

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: RandStream.create('mrg32k3a','NumStreams',3,'StreamIndices',2)

만들려는 독립 스트림의 개수로, 'NumStreams'와 함께 양의 정수가 쉼표로 구분되어 지정됩니다.

스트림 인덱스로, 'StreamIndices'와 함께 양의 정수로 구성된 벡터 또는 양의 정수가 쉼표로 구분되어 지정됩니다. 현재 스트림이 생성된 스트림 그룹에서 현재 스트림의 인덱스를 지정하려면 이 파라미터를 지정하십시오. 디폴트 값은 1:N입니다. 여기서 N'NumStreams'의 값입니다.

난수 시드값으로, 'Seed'와 함께 음이 아닌 정수 또는 'shuffle'이 쉼표로 구분되어 지정됩니다. 시드값은 알고리즘이 난수를 생성할 시작점을 지정합니다. 'shuffle'은 현재 시간을 기반으로 시드값을 만듭니다. 정수를 지정할 경우 0과 232 − 1 사이여야 합니다.

스트림을 만들 때 MATLAB 시작 시점에 또는 시뮬레이션을 실행하기 전에 초기화 단계로 생성기 시드값을 지정하십시오. 스트림을 재현하려면 매번 동일한 시드값을 사용하십시오. 여러 개의 시드값을 사용하면 여러 개의 난수열이 만들어지지만, 서로 다른 수열이 통계적으로 독립적이라는 보장은 없습니다. 이것이 중요한 경우에는 여러 개의 출력값과 함께 RandStream.create을 사용하여 통계적으로 독립적인 다중 스트림을 만드십시오.

randn을 사용하여 난수 스트림에서 정규분포된 난수를 생성하는 변환 알고리즘으로, 'NormalTransform'과 함께 알고리즘 이름 'Ziggurat', 'Polar' 또는 'Inversion' 중 하나가 쉼표로 구분되어 지정됩니다.

셀형 배열을 반환하는 옵션으로, 'CellOutput'과 함께 논리값 false(0) 또는 true(1)가 쉼표로 구분되어 지정됩니다. 'CellOutput'true로 지정하면 RandStream.create는 스트림 객체를 셀형 배열의 요소로 반환합니다.

일반적으로 단일 통과 방식으로 또는 MATLAB 세션의 시작 지점에서 RandStream.create를 한 번 호출하여 여러 개의 독립 스트림을 만듭니다. 예를 들어, [s1,s2,s3] = RandStream.create('mrg32k3a','NumStreams',3)을 사용하여 3개의 독립 스트림을 만들 수 있습니다.

또는 RandStream.create를 개별 호출하여 스트림을 각각 만들 수 있는데, 이 경우에는 gentype, 'NumStreams', 'Seed', 'StreamIndices'에 적절한 값을 지정해야 독립성을 보장할 수 있습니다.

  • 각 경우마다 gentype, 'NumStreams', 'Seed'에 동일한 값을 지정합니다.

  • 'StreamIndices'에는 매번 다른 값을 지정합니다. 모든 값은 1'NumStreams'의 값 사이어야 합니다.

예를 들어, s1 = RandStream.create('mrg32k3a','NumStreams',5,'Seed',0,'StreamIndices',1)s2 = RandStream.create('mrg32k3a','NumStreams',5,'Seed',0,'StreamIndices',2)를 사용하여 2개의 독립 스트림을 만듭니다.

버전 내역

R2008b에 개발됨