Main Content

반복 가능한 난수 생성하기

생성기 알고리즘과 시드값 지정하기

이 예제에서는 먼저 생성기 알고리즘과 시드값을 지정하여 난수로 구성된 배열을 반복하는 방법을 보여줍니다. 같은 알고리즘과 시드값을 사용하여 생성기를 초기화할 때마다 항상 동일한 결과가 생성됩니다.

먼저, 이 예제의 결과가 반복되도록 하기 위해 난수 생성기를 초기화합니다. 예를 들어, 다음 코드는 시드값을 1로 설정하고 생성기 알고리즘을 메르센 트위스터(Mersenne Twister)로 설정합니다.

rng(1,"twister");

다음으로, 난수로 구성된 배열을 만듭니다.

A = rand(3,3)
A =

    0.4170    0.3023    0.1863
    0.7203    0.1468    0.3456
    0.0001    0.0923    0.3968

같은 명령을 반복합니다.

A = rand(3,3)
A =

    0.5388    0.2045    0.6705
    0.4192    0.8781    0.4173
    0.6852    0.0274    0.5587

rand에 대한 첫 번째 호출로 인해 생성기 상태가 변경되었으므로 두 번째 결과는 달라집니다.

이제, 이전과 같은 시드값과 알고리즘을 사용하여 생성기를 다시 초기화합니다. 그런 다음 첫 번째 행렬 A를 다시 생성합니다.

rng(1,"twister");
A = rand(3,3)
A =

    0.4170    0.3023    0.1863
    0.7203    0.1468    0.3456
    0.0001    0.0923    0.3968

다음과 같은 경우 시드값과 생성기 유형을 함께 설정합니다.

  • 현재 작성하는 코드의 동작이 향후 MATLAB® 릴리스에서 이 코드를 실행할 때 동일한 결과를 반환하도록 하려는 경우

  • 이전 MATLAB 릴리스에서 작성한 코드의 동작이 현재 릴리스에서 동일한 결과를 반환하도록 하려는 경우

  • 다른 사람의 난수 코드를 실행한 후 자신의 코드에서 난수를 반복하려는 경우

사용 가능한 생성기 목록은 rng 함수 도움말 페이지를 참조하십시오.

처음 MATLAB 세션을 시작하거나 rng("default")를 호출하면 MATLAB은 디폴트 알고리즘과 시드값을 사용해서 난수 생성기를 초기화합니다. R2023b부터는 MATLAB 기본 설정에서 디폴트 알고리즘과 시드값을 설정할 수 있습니다. 이 기본 설정을 변경하지 않으면 rng는 이전 릴리스에서처럼 공장 출하값 "twister"(시드값이 0인 메르센 트위스터 생성기)를 사용합니다. 자세한 내용은 난수 생성기의 디폴트 설정난수 생성기의 재현성 항목을 참조하십시오.

생성기 설정을 저장하고 복원하기

이 예제에서는 생성기 설정을 저장하고 복원하여 난수로 구성된 반복적 배열을 만드는 방법을 보여줍니다. 생성기 설정을 저장하고 복원하는 가장 일반적인 이유는 알고리즘이나 반복의 특정 지점에서 생성된 난수를 다시 생성하는 데 있습니다. 예를 들어, 디버그 시 도움이 되도록 생성기 설정을 사용할 수 있습니다. 시드값을 다시 지정하여 생성기를 다시 초기화하는 것과 달리, 이 방법을 사용하면 언제든지 생성기 설정을 저장하고 복원할 수 있습니다.

먼저, 이 예제의 결과가 반복되도록 하기 위해 난수 생성기를 초기화합니다.

rng(1,"twister");

1에서 10 사이의 정수형 난수 값으로 구성된 배열을 만듭니다.

A = randi(10,3,3)
A = 3×3    
     5     4     2
     8     2     4
     1     1     4

randi에 대한 첫 번째 호출로 인해 생성기 상태가 변경되었습니다. randi에 대한 첫 번째 호출 후 생성기 설정을 구조체 s에 저장합니다.

s = rng;

1에서 10 사이의 정수형 난수 값으로 구성된 다른 배열을 만듭니다.

A = randi(10,3,3)
A = 3×3    
     6     3     7
     5     9     5
     7     1     6

이제, 생성기를 s에 저장된 이전 상태로 되돌리고 두 번째 배열 A를 다시 생성합니다.

rng(s);
A = randi(10,3,3)
A = 3×3    
     6     3     7
     5     9     5
     7     1     6

참고 항목

관련 항목