MATLAB 에디터에서 코드를 작성하고 해당 코드에 대해서 문서를 생성할때 MATLAB 에디터의 퍼블리시 기능을 사용하곤 합니다. MATLAB 퍼블리시에서는 코드에 대해서 html, xml, latex, doc, ppt, pdf 등으로 문서를 생성해 줍니다. 퍼블리시 창에서 작업 폴더나 몇몇 옵션 등을 변경해 줄 수 있지만 사용 방법은 그냥 버튼 하나만 누르면 되기 때문에 뭐 그리 설명할게 없을 것 같습니다.

MATLAB Command Window 에서 문서를 생성하기 위해서는 아래와 같이 publish 명령어를 사용하면 됩니다. 첫 번째 인자로 파일명을 넣어 주고 두 번째 인자로 생성 하고자 하는 문서의 형태를 넣어주면 됩니다.

publish(‘publishTest.m’, ’doc’);

그런데 이렇게 간단한 문서 생성 방법도 코드가 잘못된 경우에는 생성이 잘 안 되는 경우가 있습니다.

바로 아래의 코드 예와 같이 루프문 안에 %% 기호로 된 섹션이 있는 경우에는 문서 생성이 굉장히 오래 걸리는 것을 볼 수가 있었습니다. 따라서 문서 생성을 위해서는 코드의 루프문 안에는 %% 기호를 사용해선 안됩니다.

루프 문 안에 있던 %% 섹션 표시를 % 주석으로 처리하고 문서 생성을 하니 정상적인 속도로 문서가 생성 되더군요.

문서 생성 결과를 보면 %% 로 된 섹션 표시는 하나의 챕터를 표시하는 것을 알 수가 있습니다.

For 문 안에 섹션 표시가 있으면 해당 섹션 부분을 문서의 목차에 계속해서 표시하게 될 것이므로 문제가 될 것입니다. 아마도 publish 기능에 루프 문안의 섹션에 대한 예외 처리는 안되어 있는것으로 생각되네요.



보통 웹페이지에서 모르는 영어 단어가 나올 때는 네이버 영어사전이나 구글 사전과 같은 확장프로그램을 사용하면 정말 쉽게 찾아 볼 수가 있습니다. 요즘은 PDF 문서를 볼때도 인터넷 브라우저를 이용하는 경우가 많습니다. 저는 구글 크롬 브라우저에서 네이버 영어사전을 확장 프로그램으로 설치해서 사용하는데 PDF 문서에서 모르는 영어 단어가 나와서 네이버 영어사전을 이용하여 찾아 보려고 하니 동작을 하지 않더군요.

PDF 문서에서 네이버 영어사전을 통해 검색을 하기 위해서는 아래와 같이 확장프로그램 -> 네이버 영어사전 세부 정보에 들어가서~

파일 URL 에 대한 액세스 허용을 On 하면 됩니다.

구글 크롬 확장 프로그램에 들어가는 방법은 크롬 주소창에 chrome://extensions/ 라고 입력하면 됩니다.

PDF 문서에 대해 네이버 영어사전 검색을 할 때는 아래와 같이 단어를 선택하고 오른쪽 클릭해서 나오는 팝업 메뉴에서 네이버 영어사전 검색을 클릭하면 됩니다.

구글 크롬 확장 프로그램은 아래 주소에서 설치 할 수 있습니다.

https://chrome.google.com/webstore/category/extensions

네이버 영어 사전 뿐만이 아니라 편리한 확장 프로그램들이 많이 있으니 찾아서 설치해 보시는 것도 좋을 것 같습니다.



 이번 포스팅에서는 Exponential r.v. 의 생성 방법에 대해 설명한다.

 

Exponential r.v. 의 pdf 는 다음과 같다.

 

 

위 pdf 를 적분하면 cdf 를 구할 수가 있고, cdf 는 다음과 같다.

  

 

Exponential r.v. 은 위 CDF 수식의 inverse 를 통해 구할 수 있으며 rand() 함수를 이용하여 다음과 같이 생성 할 수 있다.  

 

위 exponential generation 함수를 이용하여 exponential r.v. 을 생성해 보자.

 

아래 코드는 λ = 1 인 경우의 exponential r.v. 을 생성하고 그에 대한 pdf 및 cdf 그래프를 그리는 코드이다.

 

 

위 코드에 따른 pdf 및 cdf 는 다음과 같다.

 

 

 

 

pdf, cdf code 에 대한 내용은 다음 글을 참조하기 바란다.

 

2011/03/23 - [MATLAB] - MATLAB PDF, CDF, CCDF 
 

Exponential r.v. 의 평균 및 분산은 다음 식과 같다.

 

,    

 

λ = 1 인 경우 평균 및 분산은 1 이다.

 

시뮬레이션을 통해 알아본 λ = 1 인 경우의 평균 및 분산은 다음과 같다.

 

 

실험 결과가 이론 값과 근사적으로 일치함을 확인 할 수 있다.


  1. 지나가던 행인 2012.11.10 23:45

    저기 근데 exponential인데 왜 log를 썼죠;;;ㅠ
    exponential 쓰니까 안나오고
    log 쓰니까 나오긴 하는데 이유를 모르겠어요ㅠ

    • 남성 2012.11.11 00:34 신고

      MATLAB 의 log() 함수는 자연로그 입니다.
      random variable 을 생성하는건 CDF 의 역 함수를 이용하니깐
      위 exponential r.v. CDF 의 인버스를 구하는걸 생각해 보면 ln() 을 쓰는게 이해가 되실겁니다.

  2. 2012.11.11 17:11

    비밀댓글입니다

    • 남성 2012.11.11 19:26 신고

      위 포스팅에서 CDF 수식의 inverse 를 구한다고 생각하면 exp() 함수가 없어지고. ln() 함수가 들어가겠죠~
      CDF 란 0~1 사이의 값이고 MATLAB 의 rand() 함수는 0~1 사이의 random 값이 나온다는것을 생각해 보면 이해가 되실것 같네요.

  3. 2012.11.11 17:12

    비밀댓글입니다

  4. 남성님 2016.01.06 14:27

    inverse여서 log를 이용한것까진 이해를 했는데요..
    왜 rand 앞에 1/lambda 는 곱해져 있지 않은걸까요 ㅠ_ㅠ
    수식상으로는 원래 있는데 말이죠..

    • 남성 2016.01.06 18:22 신고

      위에 코드 캡쳐화면 보면 1/lambda 곱해져 있는데요.... ^^;

  5. 남성님 2016.01.12 19:27

    그 log밖이랑 안 둘다 1/lambda를 곱해야하는거 아닌가요?
    exponential r.v. pdf의 경우 lambda*exp(-lambda*x) 로 알고있어서.. ㅠㅠ
    그래서 그걸 inverse 취하면 1/lambda*log(1/lambda(rand(~~)) 이렇게 되야할 것만 같은데 ㅠㅠ
    그렇게 하면 또 원하는 결과를 얻을수 가없더라구요 ㅠㅠ 제가 잘못생각하고 있는걸까요?ㅠㅠ

    • 남성 2016.01.12 20:38 신고

      PDF 의 inverse 가 아니라 CDF 의 inverse 입니다. rand() 함수는 0~1 의 값을 출력하는 uniform random variable 이기 때문에 CDF 값이 0~1사이 값이므로 이를 이용해서 Random variable 을 generation 하는 겁니다.

      위에 포스팅에서는 코드는 맞게 했는데 제가 CDF 수식을 잘못 적었네요 오해의 소지가 있었네요 ^^; 수정 했습니다.

      아래 위키 피디아를 보시면
      https://en.wikipedia.org/wiki/Exponential_distribution

      Generating exponential variates 라는 부분이 있는데 그 부분을 보시면 좀더 쉽게 이해 하실 겁니다.






  6. 남성님 2016.01.13 15:47

    감사합니다.
    덕분에 확실하게 알아가게되었어요^.^
    자주 방문하겠습니다!

MATLAB 에서 Figure 창에 대해 그림 파일로 저장 할 때는 Figure 의 File → Save As 에 들어가서~~

 

아래 그림과 같이 다양한 포맷으로 그림 파일을 저장 할 수 있습니다.

 

몇 개 안 되는 Figure 창에 대해 그림 파일로 저장할 때는 아래 그림과 같이 수동으로 하겠지만 다수의 Figure 창에 대해 그림으로 저장할 때는 아무래도 명령어를 사용하는 게 편리 합니다.




 

MATLAB 에서 Figure 창을 그림으로 저장 할 때는 saveas 라는 명령어를 사용합니다.

 

http://www.mathworks.co.kr/kr/help/matlab/ref/saveas.html

 

위 주소의 설명에 나와 있듯이 saveas 를 이용하면 다음 확장자의 그림 파일로 저장 할 수 있습니다.

 

ai, bmp, emf, eps, fig, jpg, m, pbm, pcx, pdf, pgm, png, ppm, tif

 

기본적인 사용방법은 다음과 같습니다.

 

saveas(h,'filename.ext')

 

위 기본형에서 h 는 graphic handle 을 말 합니다. graphic handle이 뭔지 잘 모르겠다 하시는 분은 아래 포스팅을 참조 바랍니다. 


2011/05/25 - [programming language/MATLAB] - MATLAB Graphic handle

 

간단하게 현재의 Figure 창에 대해 PDF 파일로 저장하고 싶다면~ 아래와 같이 명령하면 됩니다. 아래 명령어에서 gcf 는 현재 열려 있는 Figure 창에 대한 graphic handle 입니다.

 

saveas(gcf,'Test.pdf')



이전 포스팅에서 Markdown 언어에 대해 소개 드린 적이 있는데요~

  

2014/06/06 - [유틸] - The Wysiwym Markdown Editor


2014/06/03 - [유틸] - 괜찮은 Markdown Editor markable 과 Table 을 쉽게 생성 할 수 있는 tablesgenerator


Markdown 을 비롯한 다양한 markup 문서들을 다양한 형태로 변환해 주는 유틸이 있는데 그게 바로 pandoc 입니다.

 

Pandoc 소개 페이지를 보니 정말 다양한 markup 언어들이 있더군요. 변환 가능한 markup 언어들로 아래 언어들을 소개하는데~ HTML, LaTeX, markdown 등을 제외하고는 모르겠더군요.

 

markdown, reStructuredText, textile, HTML, DocBook, LaTeX, MediaWiki markup, OPML, Emacs Org-Mode, Haddock

 

아무튼 위 목록과 같은 markup 언어로부터 HTML, Word processor, Ebooks, TeX, PDF, Markdown 등등으로 변환 할 수 있더군요.

 

저는 블로그 API를 주로 사용해서 Word processor 형태로 글을 많이 작성하는데~ 매우 편리합니다.

 

Pandoc 의 홈페이지는 아래 주소와 같고~ 

http://johnmacfarlane.net/pandoc/

 

Windows Binary 는 아래 주소에서 다운로드 할 수 있습니다. 리눅스에서는 그냥 apt-get 과 같은 package 관리자로 설치 할 수 있더군요.

 

https://github.com/jgm/pandoc/releases

 

위 페이지에서 아래 그림과 같이 windows.msi 파일을 다운로드 하고 설치하면 됩니다.

 

설치과정은 일반적인 윈도우 설치과정과 같이 대부분 다음 다음이니 설명 안 드립니다.

 

 

Pandoc 의 사용 방법은 다음 페이지를 보시면 됩니다.

 

http://johnmacfarlane.net/pandoc/README.html

 

대부분 복잡한 옵션 없이 입력과 출력 format 만 설정해 주면 되더군요.

 

저는 위에 말씀 드린데로~ Word processor 를 자주 사용하는 관계로 이전에 아래 글에서 소개한 readme.md 파일을 Word processor로 변환해 봤습니다.

  

2014/06/06 - [유틸] - The Wysiwym Markdown Editor

  

MS 워드로 변환하는 명령어는 다음과 같습니다.

 

Pandoc readme.md –o readme.docx

 

이랬던 readme.md 파일이~

 

이렇게 예쁜 형식의 워드 파일로 변하더군요~ 더없이 편리 하네요~

 

 

아래 주소에서 좀 더 다양한 형식에 대한 변환 예를 볼 수 있습니다.

 

http://johnmacfarlane.net/pandoc/demos.html


아래 주소의 이전 포스팅에서도 소개한바 있지만 SCILAB 은 MATLAB 과 유사한 수치 시뮬레이션 툴입니다.

 

 

2012/08/20 - [유틸] - MATLAB 과 유사한 Open Source 프로그램 FreeMat



2011/03/11 - [MATLAB] - SCILAB



MATLAB 은 상용임에 반해 SCILAB 은 open source 라서 구매 비용이 필요가 없다는 게 굉장한 장점이죠.

 

Scilab 은 MATLAB 과 문법이 유사하긴 하지만 세세한 부분들은 많은 부분들이 다르더군요.

 

오늘은 MATLAB 의 hist() 함수와 유사한 histplot() 함수에 대해 설명 드리려 합니다.

 

MATLAB의 hist() 함수를 사용하면 histogram 을 그릴수도 있고, 출력 변수를 사용하면 그 값들을 변수에 저장 할 수도 있습니다.

 

Scilab 의 histplot() 함수는 출력 변수를 사용할 수는 없고 그냥 histogram 그래프만 그려줍니다.

 

하지만 기본적으로 normalization 적용하기 때문에 PDF(probability density function)을 그릴 때는 더 편리하기도 하더군요. PDF 또는 PMF 를 그리려면 면적이 1이 되도록 정규화를 하는 과정이 들어가야 하는데요~

 

아래 주소에서 MATLAB 을 사용하여 PDF 를 그려본 적이 있는데요~ 정규화 과정을 참조하시길 바랍니다.

 

2011/03/23 - [MATLAB] - MATLAB PDF, CDF, CCDF


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


2011/05/05 - [MATLAB] - MATLAB central limit theorem simulation


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


2010/01/03 - [MATLAB] - PDF (Probability Density Function)


 

Scilab 에서의 histplot () 함수 문법은 다음과 같습니다.

 

histplot(n, data, <opt_args>)

histplot(x, data, <opt_args>)

 

n 은 histogram 의 축의 개수를 설정할 때 사용하고 x 는 축을 벡터로 구분할 때 사용합니다.

 

그리고 opt_args 은 선 색이나 normalization 유무와 같은 옵션을 설정할 때 사용합니다.

 

간단하게 예를 들어보죠~

 

1,2,… 10 의 정수를 10칸에 걸쳐서 histogram 을 그리는 예제 입니다.

 

x=1:10

histplot(10,x)

 

 

그림을 보면 정규화를 했기 때문에 y 축의 최고값이 0.11 정도 된다는 것을 알 수 있습니다. 이는 1~10 을 n+1 개 칸 즉 11개 칸으로 축을 나눈 후 정규화를 해서 축 간 범위는 0.9 씩이 되고 y 축 값은 1/9 = 0.1111 이 되는 것 입니다.

 

다음으로 칸을 0.5:1:10.5 로 줘보죠.

 

figure

histplot(0.5:1:10.5,x)

 

 

간격을 1 씩 줬으므로 정규화 결과 y 축 값이 정확히 0.1이 됨을 확인 할 수 있습니다.

 

마지막으로 MATLAB 의 hist() 함수와 같이 정규화를 하지 않도록 해보죠. 아래 빨간색 친 부분과 같이 normalization 옵션을 %f (False) 로 주면~

 

figure

histplot(0.5:1:10.5,x, normalization=%f)

 

아래 그림처럼 정규화 하지 않은 histogram 이 구해집니다.


 


오늘의 포스팅에서는central limit theorem (중심 극한 정리)에 대한 MATLAB 시뮬레이션에 대해 설명 드립니다.

 

저 개인적으로는 중심 극한 정리에 대해 이해를 하면 왜 가우시안 분포를 정규분포라고도 하는지 이해를 하게 된 것 같습니다.

 

중심 극한 정리란 어떤 임의의 확률 변수의 합의 횟수가 무한대가 될 때 그 분포가 정규 분포에 가까워진다는 것입니다.

 

 

위 식을 보면서 좀더 쉽게 설명 드리자면 위 식의 Xi 라는 변수가 어떤 분포를 갖는 변수던지 간에 N 값이 무한대가 되도록 더하면 SN 이라는 확률 변수의 분포가 정규 분포가 된다는 겁니다.

 

특정 r.v. 합에 대한 평균 분산은 다음 수식과 같은 특징이 있습니다.

 

 

 

평균이 μ 이고 분산이 σ2인 정규 분포의 pdf 다음과 같습니다.

 

 



 

이제 central limit theorem 시뮬레이션을 해 보죠.

 

Xi 는 간단하게 uniform r.v. 을 이용해 보죠. MATLAB 의 rand() 함수를 이용하시면 됩니다.

 

uniform r.v. 을 이용하여 SN 만들었다면 값의 이론적인 평균 분산 값을 계산해야 합니다.

 

rand() 함수는 일단 0~1 사이의 uniform 한 값을 반환 하므로 다음과 같은 평균 및 분산 값을 갖습니다.

 

 

 

그 합인 SN 의 평균 및 분산은 다음과 같겠죠.

 

 

 



 

위 값들을 바탕으로 N= 100 인 경우의 central limit theorem 에 대한 시뮬레이션을 수행해 보겠습니다.

 

코드는 다음과 같습니다.

 

 

 

위 코드에서 정규분포의 pdf 및 cdf계산을 위해 이용한normpdf(), normcdf() 함수는 Statistics Toolbox 에 포함된 함수 입니다.

 

위 코드를 수행해서 나온 command 창의 결과를 보면 아래 결과와 같으며 이는 이론적인 평균 (100/2 = 50 )및 분산(100/12=8.3333) 값과 일치함을 확인 할 수 있습니다.

 

 

pdf 및 cdf 의 그래프는 다음과 같습니다.

 

 

 

central limit theorem 시뮬레이션 수행 결과 이론적인 정규분포와 정확히 일치 함을 확인 할 수 있습니다.


  1. 2017.06.06 17:56

    안녕하세요.. 그대로 작성했는데 첨자 인덱스 오류가 나네요

Gaussian r.v.(random variable)을 이용하여 rayleigh r.v. 을 생성하고 그 PDFCDF 를 구해 보자.

 

rayleigh random variable 에 대해서는 다음 포스팅을 참조

 
2009/12/26 - [수학] - Rayleigh PDF

 

PDF 및 CDF 를 구하는 법에 대해서는 다음 포스팅을 참조 하시길



2011/03/23 - [MATLAB] - MATLAB PDF, CDF, CCDF 
 

서로 독립인 평균이 0 이고 분산(σ2)이 1인 Gaussian r.v. X, Y 를 생성해 보자.

 

 

rayleigh r.v. Z 는 다음과 같이 발생 시킬 수 있다.

 

이제 이전 포스팅<2011/03/23 - [MATLAB] - MATLAB PDF, CDF, CCDF> 에서 설명한 대로 다음과 같이 PDF 를 구해 보자.

 

 

 

CDF 는 다음과 같다.

 

 

 

분산이 σ2 인 가우시안 r.v. 에 의해 발생된 rayleigh r.v. 의 이론적인 평균은 다음과 같다.

 

σ2 = 1 인 경우 = 1.2533141373155

 

분산이 σ2 인 가우시안 r.v. 에 의해 발생된 rayleigh r.v. 의 이론적인 분산은 다음과 같다.

 

σ2 = 1 인 경우 = 0.429203673205103

 

실험에 의해 생성된 rayleigh r.v. 의 평균분산 값은 다음과 같으며 위 이론값과 근사적으로 일치함을 확인 할 수 있다.

 

 



'programming language > MATLAB' 카테고리의 다른 글

MATLAB break, continue  (0) 2011.03.26
MATLAB piecewise 수식 표현  (0) 2011.03.26
MATLAB global keyword  (0) 2011.03.26
MATLAB Tex character 수학 기호 넣기  (0) 2011.03.25
MATLAB Rayleigh random variable 생성  (2) 2011.03.23
MATLAB FAST convolution using FFT  (0) 2011.03.23
MATLAB random number 생성  (24) 2011.03.23
MATLAB PDF, CDF, CCDF  (6) 2011.03.23
MATLAB 함수 만들기, inline, function handle  (0) 2011.03.21
  1. 2012.11.12 04:06

    비밀댓글입니다

    • 남성 2012.11.12 11:35 신고

      (:) 하면 매트릭스를 벡터화 하는겁니다.

      A 라는 매트릭스가 3 × 3 매트릭스 일때

      A(:) 하게 되면 9행의 매트릭스가 됩니다.

이번 포스팅에서는 각종 랜덤 값들을 이용한 PDF(Probability Density Function), CDF(Cumulative Distribution Function), CCDF(Complementary Cumulative Distribution Function) 를 그리는 방법에 대해 살펴 보려 합니다.

 

PDF 를 나타내는 방법에 대해 모르시는 분들은 다음 포스팅을 참조하시길 ~

 

2010/01/03 - [programming language/MATLAB] - MATLAB PDF (Probability Density Function)

 

평균이 2 이고 분산이 10 인 가우시안 잡음을 생성해 보겠습니다. 평균이 2 이므로 +2 를 하고 분산 값이 10 이므로 sqrt(10) 을 곱해 주게 됩니다.

 

 

이제 PDF 를 계산하게 됩니다.

 

PDF 를 나타낼 때 주의 하실 점은 꼭 정규화를 해서 PDF 내부의 면적이 1이 되야 한다는 겁니다.

 

코드는 다음과 같고 ~

 

 

이렇게 종 모양으로 나오고 종 모양의 가장 위 부분이 가로축의 2 에 위치하게 됩니다.

 

 

이제 PDF 값들이 준비가 됐으니 CDF 그리는 건 너무나 쉽죠.

 

PDF 를 구간 별로 적분 한 게 CDF 니까요. 적분 할 때는 다음 코드와 같이 resol 값을 곱해 줘야겠죠~ 그 다음에 누적해 주면 끝입니다.

 

 

PDF 의 전 구간에 대한 적분 값은 1 이니까 CDF 는 다음과 같이 끝에 가면 1 이 되게 되죠~

 

 

다음으로 CCDF 는 더 쉽습니다.

 

CCDF = 1 – CDF 입니다.

 

 

그래프는 당연히 CDF 를 위 아래로 뒤집은 모양이 될 것입니다.

 

 

이상으로 오늘의 포스팅을 마칩니다. PDF 를 계산할 때, 그 면적이 1 이라는 거 굉장히 중요한 겁니다. 많이 틀리는 부분이기도 하구요.

 

이 부분만 주의 하시면 쉽게 PDF 를 표현 하실 수 있습니다.

  

  1. 2011.11.18 14:18

    비밀댓글입니다

    • 남성 2011.11.18 15:11 신고

      resol = X(2)-X(1); 은 pdf 의 x 축의 간격을 구하는 겁니다.

      PDF_gaussian = pdf./(1000.^2.*resol); 부분은 pdf 면적이 1 이 되도록 정규화를 해주는 과정이구요


      위 식에서 1000^2 을 한 이유는 처음에 샘플을 randn(1000)해서 1000 x 1000 매트릭스로 만들었기 때문에 전체 샘플 수는 1000^2 개가 되기 때문입니다.

      1000.^2.*resol 을 한 것은 pdf 의 면적을 구한 겁니다. hist() 함수의 결과로 나온 pdf 라는 변수는 다 합치면 1000^2 이 되죠. 따라서 1000^2 으로 나눠주는 것이고 이렇게 됬을때는 pdf 의 면적은 resol 값이 되겠죠. 따라서 resol 값으로 또 나눠줘야 결국에 pdf 의 면적이 1 이 되는 겁니다.

      적분의 원리에 대해 생각해 보시면 저 코드에 대해 이해 하실수 있을것 같네요. 적분이라는게 결국에는 작은 사각형 또는 사다리꼴 등으로 잘게 나눈다음에 그 사각형 또는 사다리꼴의 면적을 다 더하는 거라는걸 생각해 보셨으면 합니다.

  2. 2012.10.23 21:59

    비밀댓글입니다

    • 남성 2012.10.23 22:23 신고

      이미지에 대한 histogram 도 마찮가지일것이라고 생각합니다.

      위 포스팅의 코드를 보시면 아시겠지만 A 라는 변수가 매트릭스 입니다.

      똑같이 처리하면 될 겁니다.

  3. 2016.05.15 18:56

    비밀댓글입니다

    • 남성 2016.05.16 01:54 신고

      hist3 같은 함수를 사용하면 될 것으로 생각되네요.

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') % 그래프를 그린다.


+ Recent posts