본문 바로가기
programming language/MATLAB

MATLAB Random Generation Seed 변경

by __observer__ 2014. 5. 6.
반응형

아래 포스팅 들에서도 소개했지만, MATLAB 을 사용하면 다양한 random 변수들을 생성할 수 있습니다.  

2011/03/23 - [programming language/MATLAB] - MATLAB random number 생성


2011/03/23 - [programming language/MATLAB] - MATLAB Rayleigh random variable 생성


2011/03/26 - [programming language/MATLAB] - MATLAB Exponential random variable generation


2011/04/06 - [programming language/MATLAB] - MATLAB Bernoulli random variable generation


2011/04/17 - [programming language/MATLAB] - MATLAB binomial r.v. generation


기복적으로 rand, randn, randi, randperm 과 같은 함수들을 제공해 줘서 Uniformly distributed(균일 분포)뿐만 아니라 Normally distributed(정규 분포) 등도 기본적으로 생성 할 수 있습니다.

 

요즘은 C++ 에서도 기본적으로 정규 분포 생성 함수 등을 제공해 주지만 예전에는 정규분포 random variable을 생성하려면 균일 분포를 사용해서 함수로 만들어 사용하곤 했습니다.

  

2012/08/26 - [컴퓨터일반] - C++11 많이 좋아졌네요.


그러다 보니 MATLAB 에서 정규분포를 기본적으로 제공해 주는 건 큰 메리트로 느껴지던 시절이 있었습니다.

 

MATLAB 에서는 Statistics Toolbox 를 사용하면 좀더 다양한 분포들을 아주 쉽게 생성 할 수도 있습니다.

 

그런데 이런 random variable 들도 사실은 그리 random 한 것만은 아닙니다.

 

일단 이해를 위해 MATLAB 을 실행하고 다음과 같이 command window에 작성해 보죠~

 

아래 코드는 간단하게 현재의 시간과 3 × 3균일 분포를 만드는 코드 입니다.

 

>> datestr(now), a=rand(3)

 

결과는 이렇습니다.

 

이제 MATLAB 을 껐다가 다시 실행 시키고 위와 똑 같은 코드를 다시 실행해 보죠~ 아래에 그 결과를 보면 시간은 분명히 달라졌는데 rand() 함수의 결과가 동일하죠?

 

다른 프로그래밍 언어들을 접해 보신 분들은 대부분 아시겠지만, 프로그래밍 언어에서의 random variable 값들은 seed 에 따라 생성 되게 됩니다.

 

MATLAB 에서 random number generation 을 Control 하는 함수로 rng 라는 함수가 있습니다.

 

Command Window 에 rng 라고 타이핑 하면 현재의 seed 상태를 알 수 있습니다. default 세팅은 아래와 같습니다.

 

>> rng

ans =

 

Type: 'twister'

Seed: 0

State: [625x1 uint32]

 

seed 값을 설정할 때 보통 시간에 따라 변화하도록 설정하곤 하는데~ MATLAB 에서는 다음과 같이 설정하면 시간에 따라 seed 값이 변화하도록 할 수 있습니다.

 

rng('shuffle')

 

seed 를 처음 상태로 되 돌리기 위해서는 rng('default') 라고 해 주면 됩니다.

 

그럼 이제 MATLAB 을 껐다가 다시 켜고~ rng('shuffle') 을 한 후에 위에서 사용했던 명령어들을 다시 실행해볼까요?

 

확인을 위해 MATLAB 을 재 시작 시키고 똑같이 발생 시켜 보죠~

 

이젠 rand() 함수의 결과가 바뀌는 것을 확인 할 수 있죠~

 

만약 rng('shuffle') 이라는 코드를 MATLAB 실행 할 때마다 넣어주는 게 불편하다 하시는 분들은 아래 글 참조하셔서 startup 파일에 rng('shuffle') 을 넣어준다면 좀더 편하게 사용할 수 있을 겁니다.


2013/09/30 - [programming language/MATLAB] - MATLAB 시작 폴더 변경 및 startup.m 파일 설정



반응형

댓글