본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 17. 05:07

Python을 활용한 천체 물리학 및 AI: Kepler의 법칙을 이용한 행성 궤도 시뮬레이션

요약

Python을 사용하여 Kepler의 법칙과 Newton의 중력 법칙을 기반으로 한 행성 궤도 시뮬레이터를 구축하는 방법을 다룹니다. 수치 해석의 중요성을 설명하며, 단순 오일러 방법의 불안정성을 극복하기 위한 오일러-크로머 방법의 필요성을 제시합니다.

핵심 포인트

  • Kepler의 세 가지 법칙을 통한 궤도 형태와 역학 이해
  • Newton의 만유인력 법칙을 이용한 가속도 벡터 계산
  • 연속적인 물리 현상을 이산적인 컴퓨터 단계로 변환하는 수치 적분
  • 에너지 보존을 위한 오일러-크로머 방법의 중요성

밤하늘을 올려다보며 우리가 어떻게 행성들의 정교한 움직임을 알 수 있는지 궁금해한 적이 있나요? 그것은 마법이 아니라 수학입니다. 구체적으로는 Johannes Kepler의 관측과 Isaac Newton의 중력 법칙 사이의 우아한 상호작용입니다.

하지만 수 세기 된 이 방정식들을 어떻게 컴퓨터 화면 위의 살아 숨 쉬는 시뮬레이션으로 바꿀 수 있을까요?

계산 물리학 (computational physics) 여정의 이번 장에서는 이론에서 실습으로 넘어갑니다. 우리는 강력한 궤도 시뮬레이터 (orbital simulator)를 구축함으로써 추상적인 물리학과 구체적인 코드 사이의 간극을 메울 것입니다. 수치 해석 방법 (numerical methods)의 안정성을 탐구하고, 태양 주위를 도는 행성의 경로를 놀라울 정도로 정확하게 예측할 수 있는 Python 코드를 작성할 것입니다.

물리학: Kepler의 곡선에서 Newton의 힘까지

궤도를 시뮬레이션하려면 먼저 이를 가능하게 하는 천체 역학 (celestial mechanics)의 두 기둥을 이해해야 합니다.

1. 현상학 (The Phenomenology): Kepler의 법칙

Johannes Kepler는 Tycho Brahe의 천문 데이터를 수년간 들여다본 끝에 세 가지 뚜렷한 패턴을 발견했습니다. 이것들은 우주의 "도로 규칙"입니다:

  • 타원 법칙 (The Law of Ellipses): 궤도는 완벽한 원이 아니라, 태양을 하나의 초점으로 하는 타원입니다. 이것이 우리 시뮬레이션의 _형태 (shape)_를 결정합니다.
  • 면적 속도 일정의 법칙 (The Law of Equal Areas): 행성은 태양에 가까워지면 빨라지고, 멀어지면 느려집니다. 이것이 시뮬레이션의 _역학 (dynamics)_을 결정합니다.
  • 조화 법칙 (The Harmonic Law): 궤도의 크기 (a)와 궤도를 완료하는 데 걸리는 시간 (T) 사이의 관계는 고정되어 있습니다 ( T² ∝ a³ ). 이것은 우리의 궁극적인 검증 지표입니다.

2. 인과관계 (The Causality): Newton의 중력

Kepler는 무엇이 일어나는지를 알려주었고, Newton은 일어나는지를 알려주었습니다. 그의 만유인력 법칙 (Law of Universal Gravitation)은 우리 시뮬레이션의 엔진을 제공합니다:

F = G * (m1 * m2) / r²

이를 Newton의 제2법칙 ( F = ma )과 결합하면, 운동을 구동하는 가속도 벡터 (acceleration vector)를 얻을 수 있습니다:

a = -G * M / r² * r^

이 방정식은 우리 코드의 핵심입니다. 하지만 물리학은 연속적인 시간 (continuous time) 속에서 일어나고 컴퓨터는 이산적인 단계 (discrete steps)로 작동하기 때문에, 우리는 미분 방정식 (differential equation)을 수치적으로 풀어야 합니다. 이는 **이체 문제 (Two-Body Problem)**라는 결정적인 과제로 우리를 이끕니다.

계산상의 과제: 안정성이 중요한 이유

안개 속에서 운전하는 것을 상상해 보세요. 당신은 현재의 속도와 방향을 알고 있으므로, 1분 후에 어디에 있을지 추측합니다. 그런 다음 새로운 위치를 확인하고 다시 추측합니다. 이것이 수치 적분 (numerical integration)입니다.

이를 수행하는 가장 간단한 방법은 **표준 오일러 방법 (Standard Euler Method)**입니다:

  1. 속도 업데이트: v_new = v_old + a_old * Δt
  2. 위치 업데이트: r_new = r_old + v_old * Δt

문제점: 이 방법은 불안정합니다. 시간이 지남에 따라 에너지를 보존하지 못합니다. 행성은 서서히 우주 밖으로 나선형을 그리며 멀어지거나 태양으로 충돌하게 되어, 물리학 법칙을 위반하게 됩니다.

해결책: 우리는 **오일러-크로머 방법 (Euler-Cromer Method)**을 사용할 것입니다. 이는 아주 작은 수정이지만 엄청난 영향을 미칩니다. 위치를 업데이트할 때 이전 속도를 사용하는 대신, 새로 계산된 속도를 사용합니다:

  1. 속도 업데이트: v_new = v_old + a_old * Δt
  2. 위치 업데이트: r_new = r_old + v_new * Δt (여기서의 변화를 주목하세요!)

  1. 벡터 수학 (Vector Math): 우리는 위치와 속도를 벡터(x와 y 성분을 가진 배열)로 취급합니다. 이를 통해 중력의 방향을 쉽게 계산할 수 있습니다. 여기서 핵심 함수는 np.linalg.norm으로, 행성과 태양 사이의 거리 $r$을 계산합니다.
  2. 가속도 함수 (The Acceleration Function): 이 함수는 뉴턴의 법칙을 구현합니다. 위치를 입력받아 거리를 계산하고, 단위 벡터(방향)를 구한 뒤, 중력의 크기만큼 스케일을 조정합니다. 음수(-) 부호가 매우 중요한데, 이는 가속도가 태양을 향하도록 (인력) 보장하기 때문입니다.
  3. 메인 루프 (The Main Loop): 마법이 일어나는 지점입니다.
    • 행성이 현재 있는 위치를 기반으로 가속도를 계산합니다.
    • 속도를 업데이트합니다.
    • 오일러-크로머 기법 (The Euler-Cromer Trick): 우리는 그 새로운 속도를 즉시 사용하여 위치를 업데이트합니다. 이 작은 변화가 시간이 지남에 따라 시뮬레이션이 "표류(drifting)"하는 것을 방지합니다.
  4. 시각화 (Visualization): 사람이 읽기 쉬운 그래프를 만들기 위해 원시 미터(m) 단위를 천문 단위 (AU)로 다시 변환합니다. plt.gca().set_aspect('equal') 명령어가 필수적입니다. 이 명령이 없으면 x축과 y축의 스케일이 달라져 완벽한 원형 궤도가 타원처럼 보이게 됩니다.

결론: 디지털 코스모스 (The Digital Cosmos)

오일러-크로머 (Euler-Cromer) 방법을 구현함으로써, 우리는 Kepler와 Newton의 법칙을 계산 알고리즘으로 성공적으로 변환했습니다. 우리는 단순히 원을 그린 것이 아니라, 행성을 궤도에 머물게 하는 힘들의 역동적인 상호작용을 시뮬레이션했습니다.

이 코드는 단순한 시각화 도구 그 이상이며, 하나의 토대입니다. 여기서 사용된 원리들(가속도 계산, 상태 변수 업데이트, 보존 법칙 검증)은 은하 충돌, 위성 궤도, 행성계의 형성 등을 시뮬레이션하는 고급 천체 물리학에서 사용하는 것과 정확히 동일한 단계들입니다.

함께 논의해 봅시다

  1. 코드에서는 태양을 정지 상태(무한한 질량)로 취급합니다. 만약 태양이 정지해 있지 않다면(진정한 이체 문제 (Two-Body Problem)), 태양의 운동을 고려하기 위해 Euler-Cromer 루프를 어떻게 수정하시겠습니까?
  2. 시간 단계 DT를 매우 크게 변경한다면 (예: 6시간 대신 1일), 결과로 나타나는 궤도 그래프에서 어떤 물리적 현상이 나타날 것으로 예상하십니까?

여기서 시연된 개념과 코드는 전자책 Astrophysics & AI: Building Research Agents for Astronomy, Cosmology, and SETI에 제시된 포괄적인 로드맵에서 직접 가져온 것입니다. 해당 전자책은 여기에서 확인하실 수 있습니다. Python, TypeScript, Swift, C#을 활용한 다른 50개의 프로그래밍 및 AI 전자책은 여기에서 확인하세요.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0