반복 가능한 난수 생성하기
생성기 알고리즘과 시드값 지정하기
이 예제에서는 먼저 생성기 알고리즘과 시드값을 지정하여 난수로 구성된 배열을 반복하는 방법을 보여줍니다. 같은 알고리즘과 시드값을 사용하여 생성기를 초기화할 때마다 항상 동일한 결과가 생성됩니다.
먼저, 이 예제의 결과가 반복되도록 하기 위해 난수 생성기를 초기화합니다. 예를 들어, 다음 코드는 시드값을 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은 디폴트 알고리즘과 시드값을 사용해서 난수 생성기를 초기화합니다. MATLAB 기본 설정에서 디폴트 알고리즘과 시드값을 설정할 수 있습니다 (R2023b 이후). 이 기본 설정을 변경하지 않으면 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