각기 다른 난수 생성하기
이 예제에서는 MATLAB®을 다시 시작할 때 동일한 난수 배열이 반복되지 않도록 하는 방법을 보여줍니다. 이 기법은 다른 MATLAB 세션에서 실행된 동일한 난수 명령에서 반환된 결과를 결합하려는 경우 유용합니다.
rand
, randn
, randi
, randperm
등 모든 난수 함수는 공유 난수 생성기에서 값을 추출합니다. MATLAB을 시작할 때마다 생성기는 디폴트 알고리즘과 시드값을 사용하여 스스로 동일한 상태로 재설정됩니다. 따라서, 난수 생성기에 대한 설정이 동일한 다른 MATLAB 세션을 시작한 직후에 rand(2,2)
와 같은 명령을 실행할 경우 항상 동일한 결과가 반환됩니다. 또한, 난수 함수를 호출하는 모든 스크립트나 함수도 다시 시작할 때마다 동일한 결과를 반환합니다.
처음 MATLAB 세션을 시작하거나 rng("default")
를 호출하면 MATLAB은 디폴트 알고리즘과 시드값을 사용해서 난수 생성기를 초기화합니다. MATLAB 설정에서 디폴트 알고리즘과 시드값을 설정할 수 있습니다 (R2023b 이후). 이 설정을 변경하지 않으면 rng
는 이전 릴리스에서처럼 공장 초기값 "twister"
(시드값이 0인 메르센 트위스터 생성기)를 사용합니다. 자세한 내용은 난수 생성기의 디폴트 설정 및 난수 생성기의 재현성 항목을 참조하십시오.
각기 다른 난수를 얻는 한 가지 방법은 매번 다른 시드값을 사용하여 생성기를 초기화하는 것입니다. 이렇게 하면 이전 세션에서 생성된 결과를 반복하지 않을 수 있습니다.
임의의 난수 함수를 호출하기 전에 MATLAB 세션에서 rng("shuffle")
명령을 한 번 실행합니다.
rng("shuffle")
MATLAB 명령 창에서 이 명령을 실행할 수 있으며, 다시 시작할 때마다 MATLAB이 실행하는 특수 스크립트인 시작 파일에 이 명령을 추가할 수도 있습니다.
이제, 난수 명령을 실행합니다.
A = rand(2,2);
rng("shuffle")
을 호출할 때마다 이 명령은 현재 시간을 기준으로 다른 시드값을 사용하여 생성기의 시드값을 다시 지정합니다.
참고
자주 생성기의 시드값을 다시 지정해도 출력값의 통계적 특성은 향상되지 않으며, 실제로 출력값의 임의성이 더 높아지지 않습니다. MATLAB을 다시 시작할 때나 난수를 포함하는 대규모 계산을 실행하기 전에 시드값을 다시 지정하는 것은 유용할 수 있습니다. 그러나, 한 세션 내에서 너무 자주 생성기의 시드값을 다시 지정하면 난수의 통계적 특성에 부정적인 영향을 미칠 수 있으므로 좋지 않습니다.
또는 디폴트 알고리즘을 사용하여 다른 MATLAB 세션에서 다른 시드값을 명시적으로 지정합니다. 예를 들어, 하나의 MATLAB 세션에서 난수를 생성해 보겠습니다.
rng(1); A = rand(2,2);
다른 시드값을 사용하여 또 다른 MATLAB 세션에서 난수를 생성합니다.
rng(2); B = rand(2,2);
생성기는 rand
함수를 호출하기 전에 매번 다른 시드값으로 초기화되므로 배열 A
와 B
는 서로 다릅니다.
서로 겹치지 않도록 보장되고 스트림 간 값의 독립성을 입증하는 테스트가 수행된 다중 독립 스트림을 생성하려면 RandStream.create
를 사용할 수 있습니다. 다중 스트림 생성에 대한 자세한 내용은 다중 스트림 항목을 참조하십시오.