Sunday, November 26, 2006
Excel/엑셀] 가우스 난수/가우시안 랜덤 발생 함수; Gaussian Random VBA 매크로
가우스 분포 Gaussian (Normal) Distribution 의 무작위 난수(Random Number)를 발생시키는 함수를 만드는 방법입니다.
VBA 등의 VB(비베) 계열의 언어에서 사용되는 Rnd 함수는 모든 숫자가 같은 확률로 나옵니다. 그렇지만 가우시안 분포의 난수들은 종 모양 즉 Bell Curve 를 가집니다.
평균(Mean)은 0
표준편차(Standard Deviation)는 1 입니다.
(엑셀에서 Alt+F11키를 눌러, 비베 에디터를 실행하고, 비베 에디터 메뉴의, "삽입 > 모듈"을 선택한 후, 다음 코드를 붙여 넣습니다.)
gaussianRandom() 이라는 함수(Function)가 가우스 난수를 발생시키는 본체입니다.
Sub 가우시안_난수_테스트() 는, gaussianRandom() 함수를 사용하여 엑셀의 셀에 가우스 난수들을 채워 넣는 작업을 합니다.
엑셀에서 Alt+F8 키를 누르면 VBA 매크로가 실행됩니다.
엑셀 시트의 A열에 다음과 같은 가우시안 난수들이 자동으로 삽입됩니다.
엑셀의 셀에서 직접
=gaussianRandom()
이렇게 적어 주어도 됩니다.
정규분포 난수, 가우시안 랜덤 넘버 생성기: ▶▶ 정규분포 난수, 가우시안 랜덤 발생기; Normal Distribution Rand Generator
▶▶ Excel-엑셀-VBA] 남녀 키(신장)의 평균, 표준편차 랜덤 난수 발생; Human Stature Random Number
VBA 등의 VB(비베) 계열의 언어에서 사용되는 Rnd 함수는 모든 숫자가 같은 확률로 나옵니다. 그렇지만 가우시안 분포의 난수들은 종 모양 즉 Bell Curve 를 가집니다.
평균(Mean)은 0
표준편차(Standard Deviation)는 1 입니다.
정규 분포 랜덤 생성 함수; (Gaussian Random; Gauss)
(엑셀에서 Alt+F11키를 눌러, 비베 에디터를 실행하고, 비베 에디터 메뉴의, "삽입 > 모듈"을 선택한 후, 다음 코드를 붙여 넣습니다.)
Sub 가우시안_난수_테스트()
Randomize
Dim i
For i = 1 To 100
Cells(i, 1).Value = gaussianRandom()
Next i
End Sub
Function gaussianRandom() As Double
Dim v1 As Double, v2 As Double, s As Double
Do
v1 = 2# * Rnd - 1#
v2 = 2# * Rnd - 1#
s = v1 * v1 + v2 * v2
Loop While s >= 1# Or s = 0#
s = Sqr((-2# * Log(s)) / s)
gaussianRandom = v1 * s
End Function
Randomize
Dim i
For i = 1 To 100
Cells(i, 1).Value = gaussianRandom()
Next i
End Sub
Function gaussianRandom() As Double
Dim v1 As Double, v2 As Double, s As Double
Do
v1 = 2# * Rnd - 1#
v2 = 2# * Rnd - 1#
s = v1 * v1 + v2 * v2
Loop While s >= 1# Or s = 0#
s = Sqr((-2# * Log(s)) / s)
gaussianRandom = v1 * s
End Function
gaussianRandom() 이라는 함수(Function)가 가우스 난수를 발생시키는 본체입니다.
Sub 가우시안_난수_테스트() 는, gaussianRandom() 함수를 사용하여 엑셀의 셀에 가우스 난수들을 채워 넣는 작업을 합니다.
엑셀에서 Alt+F8 키를 누르면 VBA 매크로가 실행됩니다.
엑셀 시트의 A열에 다음과 같은 가우시안 난수들이 자동으로 삽입됩니다.
-0.469287097
-0.343337066
-0.35287511
-1.301266745
-0.326555315
0.556893056
0.963412082
0.844206368
-1.321916181
-2.576545104
-0.891456547
-0.635364191
-1.416223156
1.741717729
-0.771012456
0.310829513
1.399024932
0.141894973
... 이하 생략...
-0.343337066
-0.35287511
-1.301266745
-0.326555315
0.556893056
0.963412082
0.844206368
-1.321916181
-2.576545104
-0.891456547
-0.635364191
-1.416223156
1.741717729
-0.771012456
0.310829513
1.399024932
0.141894973
... 이하 생략...
엑셀의 셀에서 직접
=gaussianRandom()
이렇게 적어 주어도 됩니다.
정규분포 난수, 가우시안 랜덤 넘버 생성기: ▶▶ 정규분포 난수, 가우시안 랜덤 발생기; Normal Distribution Rand Generator
▶▶ Excel-엑셀-VBA] 남녀 키(신장)의 평균, 표준편차 랜덤 난수 발생; Human Stature Random Number
tag: office
엑셀 Excel | 워드 Word | VBA 매크로 | 오피스
이걸 응용해서 변수의 x의 120%를 기준으로 115%~125% 사이의 수를 랜덤하게 0.1의 단위로 차이가 나게 생성하고 싶습니다.
어떻게 응용하면 될까요?
<< Home