실습 안내#
코드는 손계산을 확인하고 입력을 바꾸어 탐구하는 도구입니다. 먼저 본문의 입력과 예상 결과를 이해한 뒤 실행해 보세요. 처음 읽을 때 모든 코드를 실행할 필요는 없습니다.
작은 실험부터 시작하기#
Python과 NumPy를 사용하며, 기호 계산에는 SymPy, 수치 알고리즘에는 SciPy가 등장합니다. 코드의 import 문에서 필요한 도구를 확인할 수 있습니다. 처음에는 본문의 작은 입력을 그대로 실행하고, 그다음 한 번에 하나의 조건만 바꾸세요.
assert는 뒤의 조건이 거짓이면 실행을 멈춥니다. 정수나 분수의 정확한 계산에서는 등호로 비교할 수 있지만, 부동소수점 계산에서는 문제의 크기와 조건에 맞는 허용오차가 필요합니다. 한 번의 검사 통과는 모든 입력에 대한 증명을 대신하지 않습니다.
실행 환경을 기록하려면#
결과를 다른 사람과 비교할 때에는 Python과 사용한 패키지의 버전, 난수 시드, 입력의 크기와 단위를 함께 적어 두세요.
import platform
import numpy as np
print("Python:", platform.python_version())
print("NumPy:", np.__version__)
print("운영체제:", platform.platform())
# 계산 속도를 비교할 때에는 연결된 수치 라이브러리도 확인합니다.
np.show_config()
같은 시드라도 난수 생성기나 구현이 달라지면 같은 입력을 보장하지 않습니다. 계산 속도를 비교할 때에는 스레드 수와 입력 준비 시간을 기록하고, 여러 번 실행했을 때의 변동도 살펴보세요.
종합 실험을 다시 실행하기#
S2의 일곱 해법은 교재와 함께 제공되는 scripts/capstone_seven_paths.py로 실행합니다. 교재 소스 저장소에서 소스를 내려받은 폴더에서 필요한 패키지를 설치한 뒤 다음 명령을 실행하세요.
python scripts/capstone_seven_paths.py
프로그램은 계수, 표준오차, 중단 상태, 배열 크기와 실행 환경을 기록합니다. solver_seconds는 준비된 입력에 대한 해법 실행 시간입니다. 입력 준비 시간이나 공분산 계산까지 포함하는 전체 시간과 구별하세요. 배열의 바이트 수도 프로그램 전체의 최대 메모리 사용량과 다릅니다.
본문의 수치는 한 실행의 예이므로 마지막 자릿수와 시간은 환경에 따라 달라질 수 있습니다. 재현할 때에는 숫자가 완전히 같은지만 보기보다, 같은 문제를 풀었는지와 잔차·오차가 어떤 규모인지 확인하는 것이 중요합니다.