다른 언어와 같은 방식으로 사용하십시오. 다음과 같이
정규 분포는 확률을 가지고 정의 :
은 무엇 당신이해야 할 것은 그 통합이다. 먼저 확률 분포를 방법으로 만드십시오. mu = 0 및 sigma = 1을 사용하여 간단하게 할 수 있습니다.
/**
* Returns the height of the normal distribution at the specified z-score
*/
double getNormalProbabilityAtZ(double z) {
return Math.exp(-Math.pow(z, 2)/2)/Math.sqrt(2 * Math.PI);
}
다음으로 통합 할 방법이 필요합니다. 아이디어는 그것을 작은 부분들로 나눠서 각 부분에 y 값을 얻은 다음 사각형의 너비를 곱하는 것입니다. Here's more reading on Riemann Sums에 익숙하지 않은 경우를 대비하여
/**
* Returns the area under the normal curve between the z-scores z1 and z2
*/
double getAreaUnderNormalCurve(double z1, double z2) {
double area = 0.0;
final int rectangles = 100000; // more rectangles = more precise, less rectangles = quicker execution
final double width = (z2 - z1)/rectangles;
for(int i = 0; i < rectangles; i++)
area += width * getNormalProbabilityAtZ(width * i + z1);
return area;
}
여기 있습니다!
일반 분포에서 면적을 찾아야하는 경우 z- 점수가 무한대라고 가정하고 getAreaUnderNormalCurve(1, 5)
처럼 1에서 5와 같이하십시오. 왜? z=3
이후 벨 곡선 아래 영역이 매우 작습니다. z=5
이후에는 통합 할 가치가 없다는 점에서 무시할 수 있습니다.
면책 조항 : 가장 빠른 속도와 정밀성이 필요한 경우 직접 구현해서는 안됩니다. Apache Commons Error Function과 같이 이미있는 라이브러리를 사용하십시오. 다음 함수로 오류 누적 분포를 구할 수 있습니다. normalCdf(x) = 1/2 + 1/2 * erf(x/sqrt(2))
해설 코딩 OP가 여전히 만족스럽지 않으면 의견을 보내 주시면 답변을 편집 해 드리겠습니다.
이 논리는 프로그래밍 관련 문제가 아니라 수학 영역에 있으며 Google, Wikipedia 등과 같은 일반적인 온라인 소스에서 찾을 수 있습니다. –
이 질문은 주제가 아닌 것 같습니다. 특정 프로그램 문제가 아니라 수학 알고리즘의 논리에 관한 것입니다. –
수학 책을 열고 "미적분"을 찾아야 할까 봐 걱정됩니다. 정규 분포는 e^(- x^2) 맞습니까? –