전산물리학 교재 예제 Python 이식

포트란 등으로 제공되던 전산물리학 표준 교재(Giordano·Nakanishi, Computational Physics 2판)의 예제를 Python3 으로 옮기고 주피터 노트북 자료로 정리했습니다.

연표로 돌아가기
문제
전산물리학 표준 교재의 예제가 포트란 등으로 제공되어, Python 환경에서 교재를 따라가려면 예제를 새로 옮겨 써야 했습니다.
담당
교재 예제의 Python3 이식과 노트북 설명, 저장소 안내 문서(README) 작성을 맡았고, 교재 1장 앞에 기본 문법 장을 따로 두었습니다.
설계 판단
스크립트 난이도는 가급적 낮추되 물리 배경 지식은 물리학과 학부 3학년 수준을 전제로 했고, 설명과 출력을 함께 보도록 노트북을 기본 형식으로 삼았습니다.
검증 기준
Python 3.8.5 에서 작성하고 실행 조건(Python 3.7 이상, numpy, matplotlib)을 README 에 밝혔습니다. 수치 방법의 차이는 같은 그림에 겹쳐 그려 눈으로 비교하게 했고, 실행 결과 그림을 노트북에 저장해 저장소 화면에서 바로 볼 수 있게 했습니다.
결과 범위
원 교재 12개 장 가운데 1~3장(수치해석 문제·실제 포물선 운동·진동과 혼돈) 범위의 예제 7편을 옮기고 기본 문법 2편을 더한 노트북 9개 단계입니다. 야구 타구 예제는 원 예제를 옮긴 수준이고 단순조화진동의 일부 그래프는 교재와 똑같이 재현하지 못한다고 노트북에 밝혀 두었습니다. 원 교재의 본문과 문제는 그대로 옮겨 배포하지 않도록 README 에 밝혔습니다.

포트란 등의 예제로 제공되던 전산물리학 표준 교재(Giordano·Nakanishi, Computational Physics 2판)의 예제를 Python3 으로 옮겼습니다.

설명과 출력을 함께 보는 편이 배우기 낫다고 보고 주피터 노트북으로 정리했습니다.

노트북은 아홉 개입니다. 앞에 기본 문법 두 편(데이터형, 판단과 반복)을 두고, 수치해석 문제의 방사성 붕괴, 실제 포물선 운동의 자전거 경주·포탄의 궤적·야구 타구, 진동과 혼돈의 단순조화진동·로렌츠 방정식·로지스틱 맵을 교재의 장 순서대로 옮겼습니다. 저장소 기록으로는 2020년 9월 25일에 저장소를 열고 29일에 로렌츠 방정식을 올리기까지 닷새 사이에 장 순서대로 예제를 올렸습니다.

수치 방법의 차이는 같은 그림에 겹쳐 보게 했습니다. 방사성 붕괴는 해석 곡선과 시간 간격 0.05·0.2·0.5 로 계산한 오일러 방법의 해를 겹쳤고, 단순조화진동은 오일러 방법과 오일러-크로머 방법을 같은 간격 다섯 가지로 견주었으며 구동력은 세 경우로 나눠 그렸습니다.

2장은 난이도를 낮추려고 전역 변수를 쓰고 그 단점을 노트북에 밝혔으며, 3장부터는 타입 힌트와 독스트링을 쓰는 파이썬다운 작성으로 바꿨습니다. 로렌츠 방정식은 점화식으로 만들지 않고도 수치 적분 모듈로 풀 수 있음을 보이는 참고용으로 두었습니다. 옮긴 자료는 CC BY 4.0 으로 공개했습니다(교재 본문·문제 자체의 권리는 저작권자에게 있습니다).

PythonNumPyMatplotlibJupyter전산물리
저장소