C && C++/C++ X 머신러닝

임의의 함수 시각화 하기 예제(C++)

힘법사 2020. 10. 12. 12:28
728x90

 어떤 함수가 임의의 구간에서 어떻게 그려지는지 종종, 리포트를 제출할 때 우리는 시각화 하여 보여야할 때가 있습니다. 이럴 때 쓸 수 있는 C++과 Excel을 활용해 임의의 함수에 대해서 시각화를 하는 법에 대해 포스팅 하는 시간을 가지겠습니다.

그림1.예제로 사용할 함수

함수는 그림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 파일의 일부를 확인하면 다음과 같습니다

그림2. C++을 통해 얻은 txt 파일의 일부분

이제 이 텍스트 파일안에서 ctrl + A를 이용해 전체 복사를 한 후 excel에 붙여넣으면 다음과 같은 결과를 얻을 수 있습니다. 어떤가요 촥 달라 붙은게 아주 보기 좋습니다.

그림3. 탭과 한줄 뛰우기로 데이터를 정렬한 덕분에 excel에 딱 맞는 데이터 형태를 가졌다.

 드디어, 원하는 포맷으로 데이터가 정리되어 시각화를 할 수 있게 됬습니다! 이제 시각화를 진행하겠습니다. 그림 아래의 설명을 따라 오시기 바랍니다.

그림4. 삽입 >> 모든 차트 보기
그림5. 모든 차트 >> 표면형
그림6. 시각화 결과물

잘 따라오셨나요? 생각보다 어렵지 않게 3차원의 이미지를 얻었습니다. 2차원의 이미지는 더 쉽습니다. 분석을 하면서 마무리하면 처음 예상과 같이 3,4에 가까워질수록 0에 가까워지는 모습을 그림에서 관찰할 수 있습니다. 시각화가 잘됬다는 반증이군요. 이 다음 포스팅에는 C++로 자동으로 3,4를 찾는 최적화 프로그래밍을 하겠습니다.

728x90