요약

막대 양 끝의 온도처럼 조건이 시작점과 끝점에 나눠 주어진 미분방정식(경계값 문제)을 푼다. 시작점에서 모르는 기울기를 하나 짐작해 끝까지 계산해 보고, 끝점에 얼마나 빗나갔는지 보고 기울기를 고친다. 대포를 쏘아 보고 조준을 고치는 것과 같다. 방정식이 일차(선형)이면 두 번 쏘아 보고 직선 보간 한 번으로 정답 기울기가 나온다. 비선형이면 근 찾기를 되풀이해야 하고, 답이 여러 개일 수도 있다.

예시로 보기

길이 10 m 막대의 양 끝 온도가 \(T(0) = 40\), \(T(10) = 200\)이고, 옆면으로 공기(20°C)와 열을 주고받는다. 막대 안의 온도는 다음을 따른다.

\[\frac{d^2T}{dx^2} + h'(T_a - T) = 0, \qquad h' = 0.01,\ T_a = 20\]

\(z = T'\)로 두면 \(T' = z\), \(z' = h'(T - T_a)\)인 연립 방정식이다. \(T(0) = 40\)은 알지만 \(z(0)\)을 모른다. 두 번 짐작해 RK4로 끝까지 계산한다.

짐작 \(z(0)\) 계산한 \(T(10)\)
10 168.3797
20 285.8980

목표 200은 그 사이에 있다. 두 점을 잇는 직선으로 보간한다.

\[z(0) = 10 + \frac{20 - 10}{285.8980 - 168.3797}(200 - 168.3797) = 12.6907\]

이 기울기로 다시 쏘면 \(T(10) = 200\)이 정확히 나온다. 첫 번째는 끝에서 모자라고(168), 두 번째는 넘쳤던(286) 것을 그림으로 보면 사이에서 과녁을 맞힌다.

그림

점선 두 개가 짐작한 두 기울기로 쏜 결과다. 하나는 끝에서 168로 모자라고, 하나는 286으로 넘친다. 두 결과를 직선으로 보간한 기울기 12.69로 쏘면 초록 선처럼 과녁 200을 맞힌다1.

검증: 본문의 두 \(T(10)\)(RK4, 걸음 2)과 \(z(0) = 12.6907\), 보간한 기울기로 정확히 200, 참값과 비교, 비선형 문제를 할선법으로, 선형 보간 한 번으로는 비선형 실패, 카드 C2 — 36_shooting-method_impl.py

정의

초깃값 문제는 모든 조건이 같은 \(x\)에서 주어지고, 경계값 문제는 조건이 서로 다른 \(x\)에서 주어진다. 예: \(\frac{d^2y}{dx^2} = f(x, y)\), \(y(0) = y_0\), \(y(L) = y_L\).

사격법은 경계값 문제를 초깃값 문제로 바꾼다.

  1. 2계 방정식을 1계 연립으로 바꾼다(\(z = y'\)).
  2. 모르는 처음 값 \(z(0)\)을 짐작하고 초깃값 문제로 끝까지 적분한다(예: RK4).
  3. 끝점의 값 \(y(L)\)이 경계 조건 \(y_L\)과 맞을 때까지 \(z(0)\)을 고친다.

선형 방정식. \(y(L)\)이 \(z(0)\)의 일차 함수라, 두 번 쏜 결과를 직선 보간한 값이 정답이다2.

비선형 방정식. \(y(L) = f(z_0)\)이 \(z_0\)의 비선형 함수다. 경계 조건으로 근 찾기 문제를 세운다.

\[g(z_0) = f(z_0) - y_L = 0\]

\(g\)를 계산할 때마다 미분방정식을 끝까지 푸는 셈이다. 할선법이나 이분법으로 근을 찾는다.

flowchart TD
    A["2계 방정식을 1계 연립으로"] --> B["처음 기울기 z0를 짐작"]
    B --> C["초깃값 문제로 x = L까지 적분, 예: RK4"]
    C --> D{"끝 값 y(L)이 yL과 맞나?"}
    D -->|"예"| Y["그 z0로 푼 풀이가 답"]
    D -->|"아니오"| E{"방정식이 선형인가?"}
    E -->|"예"| F["두 번 쏜 결과를 직선 보간해 z0 하나로"]
    F --> C
    E -->|"아니오"| G["g(z0) = 0을 할선법 등으로 한 걸음"]
    G --> C

고리 한 바퀴가 미분방정식 하나를 끝까지 푸는 일이다. 선형이면 보간한 \(z_0\)로 한 번 더 쏘면 맞고, 비선형이면 고리를 여러 바퀴 돈다.

활용

  • 막대·보의 온도와 처짐, 우주선이 목표 지점에 도착하는 궤도 찾기, 양자역학의 고유값 문제에 쓴다2.
  • 비선형 예: \(y'' = 1.5y^2\), \(y(0) = 4\), \(y(1) = 1\). 짐작 \(-7\), \(-9\)에서 할선법을 되풀이하면 \(z(0) = -8\)(참값 \(y = \frac{4}{(1 + x)^2}\))을 찾는다. 같은 두 짐작으로 직선 보간 한 번만 하면 빗나간다(검증 코드)2.
  • 흔한 실수: 비선형 문제에 직선 보간 한 번으로 끝내는 것. 또 비선형 경계값 문제는 답이 여럿일 수 있어(위 예는 \(z(0) \approx -35.9\)인 답도 있다), 짐작한 시작값 근처의 답만 찾는다는 것을 잊는 것.

연결

확인 문제

C1 사격법의 세 단계를 쓰고, 선형과 비선형에서 기울기를 고치는 방법의 차이를 말하라.

답: 1계 연립으로 바꾸기 → 모르는 처음 기울기를 짐작해 끝까지 적분 → 끝점 값이 맞을 때까지 기울기 고치기. 선형이면 두 번 쏜 뒤 직선 보간 한 번, 비선형이면 \(g(z_0) = f(z_0) - y_L\)의 근을 할선법 등으로 되풀이해 찾는다.

C2 선형 경계값 문제에서 \(z(0) = 0\)이면 \(y(L) = 100\), \(z(0) = 10\)이면 \(y(L) = 180\)이다. \(y(L) = 140\)이 되려면 \(z(0)\)은?

답: \(0 + \frac{10 - 0}{180 - 100}(140 - 100) = 5\).

C3 선형 방정식이면 직선 보간 한 번으로 정확한 답이 나오는 이유는?

답: 선형 방정식의 풀이는 처음 값에 대해 일차로 바뀐다(두 풀이의 섞음도 풀이다). 그래서 끝점 값 \(y(L)\)이 \(z(0)\)의 일차 함수, 곧 직선이다. 직선 위의 두 점으로 그은 직선은 그 직선 자체라 보간이 정확하다.

  1. 36_shooting-method_plot.py로 그렸고, 같은 코드로 다음 값을 확인했다: 걸음 2의 RK4로 \(T(10)\) = 168.3797과 285.8980, 보간한 기울기 12.6907로 정확히 200. 곡선은 걸음 0.05로 그렸다. ↩

  2. 참값은 168.3817, 285.9019다. 구현 코드로 확인했다. ↩ ↩2 ↩3