어떤 함수가 임의의 구간에서 어떻게 그려지는지 종종, 리포트를 제출할 때 우리는 시각화 하여 보여야할 때가 있습니다. 이럴 때 쓸 수 있는 C++과 Excel을 활용해 임의의 함수에 대해서 시각화를 하는 법에 대해 포스팅 하는 시간을 가지겠습니다.
함수는 그림1에 나타난 함수로 설정했습니다. 이 녀석을 그리는 것이 이번 포스팅의 목표입니다. 먼저 우리가 프로그래밍 전에 예상할 수 있는 결과는 (x, y) = (3, 4)에서 최솟값 0을 가진다는 것입니다. 이는 수학적으로 계산될 수 있습니다.
float fxy(float x, float y) {
return (x - 3) * (x - 3) + (y - 4) * (y - 4);
}
이렇게 그림1의 함수를 return 하는 C++ 코드를 완성했습니. 이 함수를 -5 <x, y < 5 구간에서 시각화하는 작업에 본격적으로 들어갑니다.
int main() {
ofstream xx("data.txt");
float dx = 0.05, dy = 0.05;
for (float k = -5; k < 5; k += 0.5) {
xx << "\t" << k;
}
for (float i = -5; i < 5; i+= 0.5) {
xx << endl << i;
for (float j = -5; j < 5; j+=0.5) {
xx << "\t" << fxy(i , j );
}
}
xx.close();
return 0;
}
이렇게 메인 함수가 꾸며졌습니다. 2중 for문 안을 들여다 보면 -5 < x, y <5 구간에서 x 는 0.5 y도 0,5 마다 데이터를 txt 파일로 기록해 저장하는 것을 확인할 수 있다. x, y 값 fxy(x, y) 값 사이에 "\t" 로 한칸 뛰워진 것을 관찰할수 있는데, 이는 나중에, 엑셀에서 데이터를 쉽게 처리하기 위함입니다.(이렇게 하면 깔끔하게 excel에 데이터가 붙습니다.)
이렇게 완성된 txt 파일의 일부를 확인하면 다음과 같습니다
이제 이 텍스트 파일안에서 ctrl + A를 이용해 전체 복사를 한 후 excel에 붙여넣으면 다음과 같은 결과를 얻을 수 있습니다. 어떤가요 촥 달라 붙은게 아주 보기 좋습니다.
드디어, 원하는 포맷으로 데이터가 정리되어 시각화를 할 수 있게 됬습니다! 이제 시각화를 진행하겠습니다. 그림 아래의 설명을 따라 오시기 바랍니다.
잘 따라오셨나요? 생각보다 어렵지 않게 3차원의 이미지를 얻었습니다. 2차원의 이미지는 더 쉽습니다. 분석을 하면서 마무리하면 처음 예상과 같이 3,4에 가까워질수록 0에 가까워지는 모습을 그림에서 관찰할 수 있습니다. 시각화가 잘됬다는 반증이군요. 이 다음 포스팅에는 C++로 자동으로 3,4를 찾는 최적화 프로그래밍을 하겠습니다.
'C && C++ > C++ X 머신러닝' 카테고리의 다른 글
다항회귀 예제(C++ with eigen library) (0) | 2020.10.17 |
---|---|
1차 선형 회귀 예제 경사하강법 사용(C++) (0) | 2020.10.13 |
경사하강법 예제(C++) (0) | 2020.10.12 |