======전산물리의 목적====== 2014년 고등과학원 주최로 열린 Pyeong-chang Summer Institute 중 전건상 교수님이 "원자물리학은 원자를 배우고 핵물리학은 핵을 배우지만 전산물리학은 전산이 아니라 물리를 배우는 것"이라고 한 적이 있다. 컴퓨터와 같이 고지식한 친구에게 물리를 가르쳐주다보면 결국 본인이 배우게 된다는 이치이다. Numerical Recipes에 언급된 Hamming의 모토, "계산의 목적은 통찰이지 숫자가 아니다"라는 말도 생각해볼 만하다. ======전산으로 계산하는 양====== 우리가 다루는 양을 길이, 무게, 시간 등의 물리량이라고 해석하지만 결국 컴퓨터 안에서는 무차원의 숫자이다. 따라서 우리가 다루는 방정식은 [[물리:차원분석]]을 거쳐 무차원화된 것들이어야 한다. ======전산작업의 단계와 일반적 교훈들====== 이하의 내용은 전건상 교수님의 강의에 바탕한 것이다. =====문제 설정===== -문제를 이해하고 진술 -필요한 변수들과 그것을 구하는 법을 발견 -그 방법을 컴퓨터가 이해할 수 있게 변환 =====코드 작성과 실행===== -전체 구조를 설계한다 -코드를 작성한다 *권장사항 -의사코드 작성 -검증된 기존 코드를 사용 -논리를 잘 분리해서 정리 -주석을 작성 *피할 것 -복잡한 논리 -교묘한 테크닉 -컴퓨터 하드웨어 사양에 의존하는 언어 *코드에 큰 수정을 가하기 전 백업을 남길 것 -테스트와 디버깅 *오류의 종류 -문법 오류: 컴파일러 수준에서 발견 가능 -결과 없음: 무한 루프, 메모리 접근 오류 등 -결과가 나오지만 틀렸음: 가장 골치아픈 경우 *어떻게 디버깅할 것인가 -[[http://hongsup.egloos.com/322620|탐정]]처럼 일하라 -전체 논리를 점검 -부분부분 프로그램을 머리로 따라가며 논리를 점검 -매 줄마다 변수의 값들을 출력 *어떻게 테스트할 것인가 -알려져 있는 특별한 경우와 비교 -예전 결과를 재현하는지 점검 -물리적으로 말이 되는지 점검 =====분석과 시각화===== *분석을 통해 결과에 물리적 의미를 주게 된다 *결과의 중요성은 계산이 얼마나 복잡하느냐가 아니라 물리적 의미에 따라 주어진다 *시각화는 결과 이해를 돕는다 *시각화는 결과의 중요성을 강조해준다 =====일반적 교훈===== *컴퓨터가 일하는 방식대로 생각해보라 *컴퓨터는 매우 빠르게 계산을 수행할 수 있다 *컴퓨터는 물리를 모르고 상식도 모른다 *컴퓨터가 어떤 일을 잘 하고 어떤 일에 약한지 파악하라 *컴퓨터는 잘 부서지지 않으니까 이것저것 시도해보자 ======참고문헌====== * [[http://psi.kias.re.kr/|Pyeong-Chang Summer Institute]]