[MATLAB] 의사랜덤숫자발생기(pseudorandom number generator) 구현

정예슬·2023년 9월 5일
0

Mathematics

목록 보기
1/3

개강과 함께 조심스레 MATLAB을 시작해본다...,,, ㅎ 따끈따끈 맽랩 첫 코딩을 요즘 뜸했던 벨로그와 함께 기록하려고 함!

점점 공학도의 길로... (아무튼 공학임)


의사랜덤숫자발생기(pesudo-random number generator)

의사랜덤숫자발생기(pesudo-random number generator)란?

임의의 숫자를 결정성(deterministic) 알고리즘에 따라 생성한다.

좋은 의사랜덤숫자발생기의 특징

  1. 알고리즘에 서로 다른 seed 값을 부여했을 때, 이전과 다른 수열을 생성해야 함
  2. 생성된 숫자는 주어진 구간에서 uniform(균일한) 분포를 가져야 함
  3. 생성된 숫자 내 상관성(correlation)이 없어야 함

MATLAB Code

의사랜덤숫자발생기 MATLAB으로 구현하기

% 0~1사이의 난수 1000개 생성
X=rand(1, 1000);

실행하면 아래처럼 명령 창에 난수 값이 뜬다.

기초적으로 의사랜덤숫자 발생기는 0~1값을 생성하는데, 다른 custom 구간의 난수를 생성하고 싶다면 다음과 같은 변환식을 수행한다.

Yi=a+(ba)XiY_i = a + (b - a ) X_i
#임의의 구간 (a,b)(a, b)에 균일하게 분포된 랜덤 숫자의 변환식

직류전압발생기의 전압 모의 생성

% program for generating N dc voltage 
% 

N=input('Enter the Number of Voltages to generate :');
w=input('Enter the nominal voltage(V) of the generator :');
p=input('Enter the + or - uniform variation(V) about the nominal voltage :');
flag1=input('Enter 1 if all voltages are to be displayed; otherwise enter 0:');
flag2=input('Enter 1 if histogram is to be displayed; otherwise enter 0:');
X=rand(1,N);
W=w-p+2*p*X;
mu=mean(W);
std_dev=std(W);
disp('Sample mean and standarad deviation of voltages:');
disp(mu)
disp(std_dev)
if flag1 == 1 
    disp('The voltages in V are :');
    disp(W)
end 
if flag2 == 1
    hist(W), xlabel('Voltage, V'), ylabel('Number of counts'), ...
    title(['Distribution of ', num2str(N), 'Voltage']), grid
end

profile
춘식이랑 함께하는 개발일지

0개의 댓글