[2005년 기말 5번] 표준편차 구하기 - 벡터 / 수학함수
목적
- 벡터를 이해하고 수학 공식에 적용 시켜 문제를 해결한다.
문제
- (수정) 실행결과는 아래와 같습니다.
코드
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main(void)
{
vector<double> stlVector;
vector<double>::iterator pVec;
double dIn, dTotal, dAvg, dVar;
dIn = dTotal = dAvg = dVar = 0.0;
cout << "실수 값 입력(입력종료:0) : ";
cin >> dIn;
while( dIn != 0 )
{
stlVector.push_back(dIn);
cin >> dIn;
}
for(pVec = stlVector.begin(); pVec != stlVector.end(); pVec++)
dTotal += *pVec;
dAvg = dTotal / (int)stlVector.size();
dTotal = 0;
for(pVec = stlVector.begin(); pVec != stlVector.end(); pVec++)
dTotal += (*pVec - dAvg) * (*pVec - dAvg); // pow((*pVec - dAvg), 2) 를 써도 됩니다.
dVar = sqrt(dTotal / (double)stlVector.size());
cout << "평 균 : " << dAvg << endl;
cout << "표준편차 : " << dVar << endl;
return 0;
}
해설
- 표준 편차를 구하는 식은 아래와 같습니다.
- pVec 는 vector STL 자료형을 가리키는 포인터 역할을 합니다.
- 제가 잘못한거 같아서 여러번 검산을 거친 끝에 저 값이 맞는 것을 확인 했습니다.
+ 1차 확인 : Microsoft Excel 2003
- MS-Excel 에서 표준편차를 구하는 함수는 여러가지가 있습니다. stdev stdevp ... 중에서 이번 공식에 맞는 식은 stdevp 이였습니다.
- 각 함수의 차이
STDEVP 함수 : 원하는 식입니다.
STDEV 함수 : 항의 갯수가 하나 줄어듭니다. (표본차이)
- STDEV 함수는 인수들을 모집단의 표본으로 간주합니다. 데이터 집합이 모집단 전체를 나타내면 STDEVP 함수를 사용하여 표준 편차를 계산해야 합니다. (Microsoft EXCEL 도움말 인용)
+ 2차 확인 : Matlab 7.1
참고
- 결과가 이상할 경우 3자(엑셀은 편리합니다.) 툴을 써서 검증하면 편리할수 있습니다.
- 유사 문제 검색