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

문제
사용자 삽입 이미지

  - (수정) 실행결과는 아래와 같습니다.
사용자 삽입 이미지


코드

#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자(엑셀은 편리합니다.) 툴을 써서 검증하면 편리할수 있습니다.
  - 유사 문제 검색
Posted by 카켈



목적
  - cmath(math.h) 를 사용 한다.
  - 표준편차와 평균을 계산 한다.

문제

사용자 삽입 이미지

풀이

#include <iostream>
#include <cmath>

using namespace std;

int main(void)
{
 int i, j;
 float fScr[5] = {0};
 float fTotal, fDeviation, fSwap;
 fTotal = fDeviation = fSwap = 0.0;
 i = j = 0;
 
 cout << "다섯개의 실수값을 입력 하여라 : ";
 cin >> fScr[0] >> fScr[1] >> fScr[2] >> fScr[3] >> fScr[4];

 for(i = 0; i < 5; i++)
 {
  for(j = i; j < 5; j++)
  {
   if(fScr[i] < fScr[j])
   {
    fSwap = fScr[j];
    fScr[j] = fScr[i];
    fScr[i] = fSwap;

   }

  }

  fTotal += fScr[i];

 }

 for(i = 0; i < 5; i++)
   fDeviation += pow((fScr[i] - fTotal / 5), 2);

 
 fDeviation = sqrt(fDeviation / 5);


 cout << "크기 순으로 정렬한 결과 : " << fScr[0] << ' ' << fScr[1] << ' ' << fScr[2] << ' ' << fScr[3] << ' ' << fScr[4] << endl;
 cout << "입력된 값의 평균 : " << fTotal / 5 << endl;
 cout << "입력된 값의 표준편차 : " << fDeviation << endl;


 return 0;
}

해설
  - cmath 와 math.h 는 동일한 역할을 합니다.
  - 정렬하면서 합계를 구했습니다.

참고
  - 유사 문제
  - 표준편차 구하기

사용자 삽입 이미지

Posted by 카켈
이전페이지 1 다음페이지