MATLAB 으로 PDF 를 그려보자.

PDF(Probability Density Function)라는게 어케 보면 Histogram이랑 개형은 같지만

엄밀하게 얘기하면 좀 다르다고 할 수 있다.

그 차이는 바로 Normalization에 있다.

PDF 의 특징은 그 적분값이 1 이어야 하므로 당연히 Histogram 을 그린후 그 넓이를 Normalization 을 해야한다.

간단하게 [0 100] 구간의 Uniform pdf 를 그려 보자.

MATLAB editor 에 다음과 같이 타이핑 하고 실행해 보자

<MATLAB CODE>


N = 3000;

Uniform_sample=rand(N,N)*100; % 0~ 100 사이의 Uniform sample 을 발생시킨다.

[pdf,X]= hist(Uniform_sample(:), 500); % hist 함수를 이용하여 구간별로 쌓아준다

resol=X(2)-X(1);             % resolution을 계산한다.

pdf= pdf/(N^2.*resol); % Normalization 해 준다.

figure(1), bar(X,pdf), grid on, title('Uniform PDF') % 그래프를 그린다.

그래프를 보면 딱 봐도 넓이가 100 * 0.01 =1 이라는 것을 알 수 있다. 이게 제대로 된 PDF 이다.

 

그럼 좀더 나아가서 rand() 함수를 이용하여 Gaussian sample 을 만들고 PDF 를 그려 보자.

 

<MATLAB CODE>

 

N = 3000;

std = 2; % 표준편차

std_normal=sqrt(-2*log(rand(N))).*cos(2*pi*rand(N)); % 평균이 0 이고 분산이 1인 Gaussian Sample

NormalSample=std*std_normal; % 표준편차가 2인 Gaussian Sample

[pdf,X]= hist(NormalSample(:), 500); % hist 함수를 이용하여 구간별로 쌓아준다

resol=X(2)-X(1); % resolution을 계산한다.

pdf= pdf/(N^2.*resol); % Normalization 해 준다.

figure(2), bar(X,pdf), grid on, title('Gaussian PDF') % 그래프를 그린다.


  1. 2020.04.12 16:18

    좋은 포스팅 감사합니당❗️
    혹시 uniform rv 에서 -5부터 5까지만(주어진 범위 내에서만)1이되고 나머지는 0이되는 pdf 그릴 때는 어떤 부분을 고쳐야하는지 알 수 있을까요???

    • 남성 2020.04.12 16:45 신고

      아래 포스팅 참조 하시면~
      https://iamaman.tistory.com/130

      이렇게 코딩 할 수 있겠네요~

      % -5~5 사이 uniform RV 100 행 x 100 열
      a = -5 ;
      b= 5;
      n = 100;
      k= 100;
      Uniform_rand = a + (b-a).*rand(n, k);

    • 2020.04.12 17:03

      앗 확인했습니다 감사합니다!

  2. hoho 2020.05.04 00:12

    안녕하세요! 매번 포스팅 잘 보고 있습니다.
    질문이 있어 댓글 남깁니다.

    위에 알려주신 pdf 구하는 방법으로 Y=X1+X2에서 Y의 pdf 구할 수 있었습니다. (엑스1 엑스2는 유니폼랜덤변수입니다.)
    위 방법을 확인하려고 매트랩 내장함수를 이용해서 pdf를 구해보려 하는데
    theoretical_pdf_Y 를 conv(theoretical_pdf_X1, theoretical_pdf_X2)로 잡으면 알려주신 방법으로 그린 그래프와 다르게 나와서요ㅜㅜ

    • 남성 2020.05.04 00:44 신고

      아래와 같이 코딩 해보면 나올 겁니다.

      N=1000;
      x = linspace(0,1,N);
      y = unifpdf(x);
      [y, ny] = conv_m(y,x,y,x);
      plot(ny,y/N)

      위 코드 중에서 conv_m() 함수는 아래 주소에 있습니다.

      https://iamaman.tistory.com/1672

+ Recent posts