소프트웨어/C++

[2005년 기말 5번] 표준편차 구하기 - 벡터 / 수학함수

카켈 2007. 3. 9. 02:30





목적
  - 벡터를 이해하고 수학 공식에 적용 시켜 문제를 해결한다.

문제

  - (수정) 실행결과는 아래와 같습니다.


코드

#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


std 함수를 쓰면, Microsoft Excel 과 같은 결과를 얻습니다.


참고
  - 결과가 이상할 경우 3자(엑셀은 편리합니다.) 툴을 써서 검증하면 편리할수 있습니다.
  - 유사 문제 검색