Main Content

rng

난수 생성기 제어

설명

예제

rng("default")는 디폴트 알고리즘과 시드값을 사용하여 MATLAB® 난수 생성기를 초기화합니다. 공장 초기값은 시드값이 0인 메르센 트위스터 생성기입니다. 디폴트 설정을 변경하는 방법과 재현성에 대한 자세한 내용은 난수 생성기의 디폴트 설정난수 생성기의 재현성 항목을 참조하십시오.

rng 함수는 전역 스트림을 제어하여 rand, randi, randn, randperm 함수가 난수열을 생성하는 방법을 결정합니다. 전역 스트림과 별도로 하나 이상의 독립 스트림을 만들려면 RandStreamRandStream.create를 참조하십시오.

rng(seed)는 현재의 생성기 알고리즘을 사용하여 난수 생성기의 시드값을 지정합니다.

  • 이 시드값을 사용하여 난수 생성기를 초기화하려면 seed를 음이 아닌 정수(예: rng(1))로 지정합니다.

  • 현재 시간을 기준으로 생성기 시드값을 초기화하려면 seed"shuffle"로 지정합니다.

예제

rng(seed,generator)는 난수 생성기가 사용할 알고리즘도 지정합니다. 예를 들어, rng(2,"philox")는 시드값 2를 사용하여 Philox 4x32 생성기를 초기화합니다.

rng(generator)는 시드값 0을 사용하여 난수 생성기가 사용할 알고리즘을 지정합니다. 이 구문은 rng(0,generator)와 동일합니다. (R2023b 이후)

예제

rng(s)Type, SeedState 필드가 있는 구조체 s에 포함된 설정을 기반으로 생성기를 초기화합니다. 구조체 s는 이전 s = rng 또는 s = rng(__) 호출에서 반환된 구조체여야 합니다.

예제

t = rngType, SeedState 필드가 있는 구조체 t에 현재의 난수 생성기 설정을 반환합니다.

t = rng(___)는 구조체 t에 현재의 난수 생성기 설정을 반환한 후, 지정한 인수를 사용하여 설정을 변경합니다. 위에 열거된 구문에 나와 있는 입력 인수를 조합하여 출력 인수를 지정할 수 있습니다.

예제

모두 축소

디폴트 생성기 알고리즘과 시드값을 사용하여 난수 생성기를 초기화합니다.

rng("default")

디폴트 난수 생성기 설정을 표시합니다. 이 경우 난수 생성기는 메르센 트위스터 알고리즘과 시드값 0을 사용합니다.

s = rng
s = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

0과 1 사이의 균일하게 분포된 난수로 구성된 4×4 행렬을 생성합니다.

r = rand(4)
r = 4×4

    0.8147    0.6324    0.9575    0.9572
    0.9058    0.0975    0.9649    0.4854
    0.1270    0.2785    0.1576    0.8003
    0.9134    0.5469    0.9706    0.1419

R2023b부터는 MATLAB Preferences 창에서 디폴트 알고리즘과 시드값을 설정할 수 있습니다. MATLAB 기본 설정을 변경하지 않으면 rng는 이전 릴리스에서처럼 공장 출하값 "twister"(시드값이 0인 메르센 트위스터 생성기)를 사용합니다.

이 예제의 결과가 반복되도록 난수 생성기 설정을 지정합니다. 생성기 시드값을 2로 설정하고 알고리즘을 메르센 트위스터로 설정한 다음 생성기 설정을 저장합니다.

rng(2,"twister")
s = rng
s = struct with fields:
     Type: 'twister'
     Seed: 2
    State: [625x1 uint32]

0과 1 사이의 난수 값으로 구성된 1×5 행 벡터로 만듭니다.

x = rand(1,5)
x = 1×5

    0.4360    0.0259    0.5497    0.4353    0.4204

생성기 시드값과 알고리즘을 변경하고 새로운 확률 행 벡터를 만듭니다.

rng(1,"philox")
xnew = rand(1,5)
xnew = 1×5

    0.5361    0.2319    0.7753    0.2390    0.0036

이제 원래 생성기 설정을 복원하고 확률 벡터를 만듭니다. 결과는 원래 생성기로 만든 원본 행 벡터 x와 일치합니다.

rng(s)
xold = rand(1,5)
xold = 1×5

    0.4360    0.0259    0.5497    0.4353    0.4204

입력 인수

모두 축소

난수 시드값으로, 2^32보다 작은 음이 아닌 정수 또는 "shuffle"로 지정됩니다. seed"shuffle"로 지정하면 rng 함수는 현재 시간을 기준으로 생성기 시드값을 초기화하여 rng를 호출할 때마다 다른 난수열을 생성합니다.

난수 알고리즘으로, 다음 표에 나와 있는 옵션 중 하나로 지정됩니다. 생성기 알고리즘에 대한 자세한 내용은 난수 스트림을 만들고 제어하기 항목을 참조하십시오.

생성기 이름생성기 키워드
"twister"메르센 트위스터(Mersenne Twister)mt19937ar
"simdTwister"SIMD 기반 고속 메르센 트위스터(SIMD-Oriented Fast Mersenne Twister)dsfmt19937
"combRecursive"결합 다중 재귀적(Combined Multiple Recursive)mrg32k3a
"multFibonacci"시차 피보나치 수열(Multiplicative Lagged Fibonacci)mlfg6331_64
"philox"10회 라운드의 Philox 4x32 생성기philox4x32_10
"threefry"20회 라운드의 Threefry 4x64 생성기threefry4x64_20

MATLAB 버전 4.0 및 5.0에서 사용되는 레거시 생성기의 경우 다음 옵션 중 하나를 사용합니다.

생성기 이름생성기 키워드
"v4"레거시 MATLAB 버전 4.0 생성기mcg16807
"v5uniform"레거시 MATLAB 버전 5.0 균일 생성기swb2712
"v5normal"레거시 MATLAB 버전 5.0 일반 생성기shr3cong

난수 생성기 설정으로, Type, SeedState 필드가 있는 구조체로 지정됩니다.

세부 정보

모두 축소

난수 생성기의 디폴트 설정

  • MATLAB Preferences 창에서 난수 생성기의 디폴트 알고리즘과 시드값을 변경할 수 있습니다. 탭의 환경 섹션에서 기본 설정을 클릭합니다. MATLAB > 일반을 선택한 다음 난수 생성 기본 설정에서 디폴트 알고리즘에 다른 옵션을 선택하고 디폴트 시드값에 다른 값을 선택합니다. (R2023b 이후)

    처음 MATLAB 세션을 시작하거나 rng("default")를 호출하면 MATLAB은 MATLAB 기본 설정에서 설정한 디폴트 알고리즘과 시드값을 사용하여 난수 생성기를 초기화합니다. 난수 생성 기본 설정을 변경하지 않으면 rng는 이전 릴리스에서처럼 공장 출하값 "twister"(시드값이 0인 메르센 트위스터 생성기)를 사용합니다.

  • 병렬 워커를 사용하는 경우(Parallel Computing Toolbox™ 필요), rng("default")는 시드값 0을 사용하여 20회 라운드의 Threefry 4x64 생성기를 초기화합니다. MATLAB 기본 설정 창에서 디폴트 생성기 설정을 변경해도 병렬 워커의 디폴트 동작은 영향을 받지 않습니다. (R2023a 이후)

난수 생성기의 재현성

하나의 MATLAB 세션 내에서 결과가 반복되도록 하려면 프로그램의 시작 시점에서 rng("default")를 사용하십시오. rng("default")는 MATLAB 기본 설정에 지정된 디폴트 알고리즘과 시드값을 사용합니다. 단, 이 명령은 서로 다른 기본 설정을 갖는 서로 다른 MATLAB 세션 간에 동일한 결과를 보장하지 않습니다.

향후의 MATLAB 릴리스를 사용할 때나 MATLAB 기본 설정에서 디폴트 알고리즘과 시드값이 변경될 때에도 결과가 동일하게 유지되도록 하려면 프로그램의 시작 시점에서 rng(seed,generator) 또는 rng(generator)를 대신 사용하십시오. 예를 들어, 메르센 트위스터 생성기와 시드값 0을 사용하려면 rng("twister")를 사용합니다.

  • 병렬 처리 시 rng("shuffle")은 현재 시간을 기준으로 난수 생성기의 시드값을 지정하므로 독립 스트림을 보장하기 위해서는 다른 워커에서 난수 스트림을 설정하지 마십시오. parfor 함수는 rng 작업 내부와 같이 동시에 여러 워커에게 명령을 보낼 경우 동일한 시드값을 사용합니다. 워커에 있는 여러 독립 스트림의 경우 디폴트 동작을 사용하거나 RandStream을 통해 각 워커에 고유한 서브스트림을 사용하는 것이 좋습니다.

  • 병렬 처리 시 MATLAB 클라이언트와 MATLAB 워커의 디폴트 난수 생성기가 다릅니다. 기본적으로 MATLAB 클라이언트는 메르센 트위스터 생성기와 시드값 0을 사용하고, MATLAB 워커는 20회 라운드의 Threefry 4x64 생성기와 시드값 0을 사용합니다. MATLAB 기본 설정에서 디폴트 생성기 설정을 변경하면 클라이언트의 디폴트 동작만 영향을 받으며 병렬 워커의 디폴트 동작은 영향을 받지 않습니다. 클라이언트와 워커에서 동일한 난수 스트림을 생성해야 하는 경우 동일한 생성기 알고리즘과 시드값으로 rng를 사용할 수 있습니다(또는 동일한 생성기 알고리즘, 시드값, 정규 변환 알고리즘으로 RandStream을 사용할 수 있음). 자세한 내용은 Control Random Number Streams on Workers (Parallel Computing Toolbox) 항목을 참조하십시오.

  • rand 또는 randn 함수 대신 rng"seed", "state" 또는 "twister" 입력값을 사용하려면 권장되지 않는 rand 구문과 randn 구문 대체하기 항목을 참조하십시오.

확장 기능

버전 내역

R2011a에 개발됨

모두 확장