Skip to main content

4. 난수의 정규 분포

  • 원숭이 수를 시뮬레이션하는 경우, Monkey 객체를 1,000개 생성하고, 각 키를 200~300으로 설정한다고 해볼게요. (원숭이 키는 200px ~ 300px라고 가정)
    const h = random(200, 300);
  • 그런데 군중이 많은 길에서 임의로 한 사람을 골라 키를 재면 이때의 임의성은 **random()**이 생성하는 랜덤성과 다른데요, 실제 사람의 키가 균등 분포가 아니기 때문이에요.
  • 평균적인 키를 가진 사람이 너무 크거나 작은 사람보다 훨씬 많죠.
  • 따라서 자연을 모방하려면 원숭이의 키도 평균 키(250px)에 가까운 원숭이가 많아야 하고, 너무 크거나 작은 원숭이 수는 적어야 해요.

정규 분포

  • 정규 분포는 평균(mean)을 중심으로 모여있는 분포예요.
    • 수학자 칼 프레드리히 가우스의 이름을 따 가우시안(Gaussian) 분포라고도 하고, 프랑스에서는 피에르 시몬 라플라스의 이름을 따 라플라시안(Laplacian) 분포라고도 해요.
    • 정규 분포는 19세기 이 두 수학자가 각자 동시에 연구한 분포랍니다.
  • 그래프로는 종 모양의 그래프가 나오는데, 이 종 모양의 곡선은 주어진 값의 확률적 평균(μ\mu)과 표준 편차(σ\sigma)를 이용한 수학적 함수로 그려져요.

표준 편차

평균과 표준편차 계산
  • 시험에서 85, 82, 88, 86, 85, 93, 98, 40, 73, 83점을 받은 10명의 학생이 있다고 가정해 볼게요.
  • 평균: 81310=81.3\frac{813}{10}=81.3
  • 표준 편차: 분산의 음이 아닌 제곱근으로, 각 점수와 평균을 뺀 값을 제곱해서 분산을 구하고, 분산의 평균을 구한 값이 루트를 씌워요.
점수평균과의 차이분산
85858581.3=3.785 - 81.3 = 3.7(3.7)2=13.69(3.7)^2=13.69
82828281.3=0.782 - 81.3 = 0.7(0.7)2=0.49(0.7)^2=0.49
88888881.3=6.788 - 81.3 = 6.7(6.7)2=44.89(6.7)^2=44.89
86868681.3=4.786 - 81.3 = 4.7(4.7)2=22.09(4.7)^2=22.09
85858581.3=3.785 - 81.3 = 3.7(3.7)2=13.69(3.7)^2=13.69
93939381.3=11.793 - 81.3 = 11.7(11.7)2=136.89(11.7)^2=136.89
98989881.3=16.798 - 81.3 = 16.7(16.7)2=278.89(16.7)^2=278.89
40404081.3=41.340 - 81.3 = -41.3(41.3)2=1705.69(-41.3)^2=1705.69
73737381.3=8.373 - 81.3 = -8.3(8.3)2=68.89(-8.3)^2=68.89
83838381.3=1.783 - 81.3 = 1.7(1.7)2=2.89(1.7)^2=2.89
분산 합2288.12288.1
  • 분산 평균: 228.81228.81
  • 표준 편차: 15.1315.13
  • 모집단이 주어지면, 해당 구성원의
    • 68%는 평균으로부터 1표준 편차(1×σ1\times\sigma) 범위 내에 포함되고,
    • 98%는 2표준 편차(2×σ2\times\sigma) 범위 내에 포함되며,
    • 99.7%는 3표준 편차(3×σ3\times\sigma) 범위 내에 포함돼요.
  • 원숭이 예제로 돌아가면
    • 표준 편차가 55px이라면 평균 250250px을 기준으로 3표준 편차는 3×5=153\times5=15 px
    • 0.3%의 원숭이만 키가 25015=235250-15=235 px보다 작거나 250+15=275250+15=275 px보다 클 거예요.

randomGaussian()

  • randomGaussian() : 평균이 00이고 표준 편차가 11인 임의의 양수와 음수의 정규 분포를 반환하는 p5js 함수 (표준 정규 분포)예요.
function draw() {
const num = randomGaussian();
}

도형의 x 위치를 할당하는 경우

  • 평균이 320px이고 표준 편차가 60px인 정규 분포를 사용하여 x위치를 무작위로 할당한다고 가정헤 보죠.
  • 함수에 2개의 매개변수(평균, 표준편차)를 전달하면 돼요.
function draw() {
const x = randomGaussian(320, 60);
// const x = 60 * randomGaussian() + 320 과 동일

noStroke();
fill(0, 10);
circle(x, 120, 16);
}

예제 코드 0.4: 가우시안 분포

연습문제 0.4

색상이 있는 점을 많이 사용해 흩뿌려진 물감을 시뮬레이션 하는 경우, 점 대부분은 중심에 가깝게 찍히고, 일부 점만 외곽에 찍히도록 만들어 보세요. 점 색상을 선택할 때도 정규 분포를 이용해 보는 거예요.

  • 아래 코드에서는 클릭시 100개의 물감이 흩뿌려짐
연습문제 0.5

스텝 크기를 생성할 때 정규 분포를 사용한 랜덤 워크를 가우시안 랜덤 워크라고 부르는데요, 이를 구현해 보세요.

step() {
const xStep = randomGaussian(0, 0.5);
const yStep = randomGaussian(0.1, 0.1);

this.x += xStep;
this.y += yStep;
}