사격법

오류 제보
수치해석 시뮬레이션 마지막 수정: 2026-10-17 04:34:18

○ 공개 검수 대기 AI 보조 작성 표시 기준 보기

1. 개요

사격법
Shooting Method
푸는 것상미분방정식의 2점 경계값 문제
아이디어모르는 초기값을 추측 → 초기값 문제로 적분 → 끝점 오차로 추측을 고침
내부 부품초기값 적분기(룽게-쿠타 등) + 근 찾기(할선·뉴턴·브렌트)
약점성장 모드가 있으면 끝점이 초기값에 기하급수적으로 민감
처방다중 사격법 · 배치법 · 유한차분법

일단 쏴 보고, 빗나간 만큼 조준을 고친다. 포병이 하는 일을 상미분방정식에 시킨 것.

사격법(shooting method)은 상미분방정식의 경계값 문제를 초기값 문제의 반복으로 바꿔 푸는 방법이다. 한쪽 끝에서 모르는 초기 조건(예: 기울기 ss)을 추측해 반대쪽 끝까지 적분하고, 거기서 경계조건이 얼마나 어긋났는지 F(s)F(s) 를 재서 F(s)=0F(s)=0 이 되도록 ss 를 근 찾기로 고친다. 이미 잘 만들어진 룽게-쿠타법 적분기와 브렌트 방법 같은 근 찾기를 레고처럼 조립하면 끝나기 때문에, 처음 BVP 를 만나는 사람이 가장 먼저 짜 보는 방법이다.

그리고 많은 사람이 가장 먼저 배신당하는 방법이기도 하다. 문제 안에 지수적으로 자라는 모드가 하나라도 있으면, 초기값의 마지막 비트 하나가 반대쪽 끝에서 수천·수조 배로 불어난다. 이 문서는 사격법이 빛나는 사례(블라시우스 경계층)와 망하는 사례를 실제로 돌려 보고, 그 해결책인 다중 사격법까지 다룬다.

2. 기본 형태

2계 문제 y′′=g(t,y,y′)y'' = g(t, y, y'), y(a)=αy(a)=\alpha, y(b)=βy(b)=\beta 를 보자. y′(a)=sy'(a)=s 로 놓으면 초기값 문제가 되고, 그 해의 끝값을 y(b;s)y(b; s) 라 쓴다. 풀어야 할 것은 스칼라 방정식

F(s)=y(b;s)−β=0F(s) = y(b; s) - \beta = 0

이다. FF 를 한 번 평가하는 것이 곧 ODE 적분 한 번이다.

  • 선형 문제면 두 발로 끝난다. yy 가 ss 에 대해 아핀이므로 s=0,1s=0,1 두 번 쏘면 F(s)=F(0)+s (F(1)−F(0))F(s) = F(0) + s\,(F(1)-F(0)) 이 정확하고 s∗=−F(0)/(F(1)−F(0))s^\ast = -F(0)/(F(1)-F(0)) 로 바로 나온다(중첩 원리).
  • 비선형이면 FF 의 근을 반복으로 찾는다. 도함수가 없으니 할선법이 기본이고, 부호 변화 구간을 잡을 수 있으면 브렌트 방법이 안전하다.
  • 뉴턴을 쓰려면 ∂y/∂s\partial y/\partial s 가 필요한데, 이것은 원래 ODE 를 ss 로 미분한 변분 방정식 z′′=gyz+gy′z′z'' = g_y z + g_{y'} z', z(a)=0z(a)=0, z′(a)=1z'(a)=1 을 함께 적분하면 얻는다. 뉴턴-랩슨법의 야코비안을 수치미분 없이 구하는 정석이다.

미지 초기값이 kk 개면 F:Rk→RkF: \mathbb R^k \to \mathbb R^k 가 되고 뉴턴·브로이던 방법을 쓴다. 우주선 궤도를 정해진 시각에 정해진 위치로 보내는 문제, 최적 제어의 간접법에서 폰트랴긴 최대 원리가 주는 상태·여상태 경계값 문제가 다 이 꼴이다.

3. 성공 사례 — 블라시우스 경계층

평판 위 층류 경계층의 상사해는 블라시우스 방정식

f′′′+12ff′′=0,f(0)=f′(0)=0,f′(∞)=1f''' + \tfrac12 f f'' = 0,\qquad f(0)=f'(0)=0,\quad f'(\infty)=1

을 만족한다. 모르는 것은 벽면 전단에 해당하는 f′′(0)=sf''(0)=s 하나다. 무한대 조건은 충분히 큰 LL 에서 f′(L)=1f'(L)=1 로 잘라 근사한다.

자른 위치 LL얻은 f′′(0)f''(0)
50.336152
80.332059
100.3320573372
150.3320573362

L=10L=10 이면 이미 교과서 값 0.3320570.332057 과 6자리가 맞는다. L=10L=10 에서 할선법을 s0=0.1, s1=1.0s_0=0.1,\ s_1=1.0 에서 출발시키면 6번째 반복에 ∣F∣≈5×10−15|F| \approx 5\times10^{-15} 로 수렴했다(적분 허용오차 10−1210^{-12}). 이 문제가 순하게 풀리는 건 해가 η\eta 가 커질 때 지수적으로 감쇠하며 f′→1f'\to1 로 붙기 때문이다.

덤으로, 블라시우스 방정식은 f(η)→a F(aη)f(\eta) \to a\,F(a\eta) 변환에 대해 불변이라 사격조차 필요 없다. F′′(0)=1F''(0)=1 로 한 번만 쏴서 F′(∞)F'(\infty) 를 재면 f′′(0)=F′(∞)−3/2f''(0) = F'(\infty)^{-3/2} 이다. 실제로 해 보면 0.332057336220.33205733622 가 반복 없이 나온다. 퇴퍼(Töpfer, 1912)가 손으로 계산하던 시절에 쓴 트릭이다.1

4. 실패 사례 — 지수 성장

이번엔 순한 선형 문제다.

y′′=k2y,y(0)=1, y(1)=0,y(t)=sinh⁡k(1−t)sinh⁡k.y'' = k^2 y,\qquad y(0)=1,\ y(1)=0,\qquad y(t) = \frac{\sinh k(1-t)}{\sinh k}.

정답 기울기는 s∗=−kcoth⁡ks^\ast = -k\coth k 이고, 끝점의 민감도는 ∂y(1)/∂s=sinh⁡(k)/k\partial y(1)/\partial s = \sinh(k)/k 다. 해 자체는 e−kte^{-kt} 로 얌전히 줄어드는데, 사격은 e+kte^{+kt} 모드까지 함께 적분하기 때문에 초기 기울기의 상대오차 10−1610^{-16} 이 끝점에서 eke^{k} 배로 불어난다. 두 발 중첩으로 풀고(8차 RK, 허용오차 10−1210^{-12}) 구간 전체의 최대오차를 쟀다.

kk민감도 sinh⁡k/k\sinh k/k최대오차
51.5×1011.5\times10^{1}2.2×10−122.2\times10^{-12}
201.2×1071.2\times10^{7}1.9×10−61.9\times10^{-6}
402.9×10152.9\times10^{15}4.3×1044.3\times10^{4}

k=40k=40 에서 구한 기울기 ss 는 −40-40 에 상대오차 4×10−134\times10^{-13} 으로 거의 정확한데, 그 ss 로 쏘면 y(1)=0y(1)=0 이어야 할 끝값이 −4.3×104-4.3\times10^4 이다. 정확한 s∗=−40s^\ast=-40 을 그대로 넣어도 y(1)≈−7y(1) \approx -7 이 나온다. 적분기의 국소 오차가 성장 모드를 타고 증폭되기 때문이다. 이 정도면 사격법이 답을 “못 찾는” 게 아니라 부동소수점에 그런 답이 존재하지 않는다.2

경계층 문제를 반대 방향으로 적분하거나, 강한 점성 항이 있는 반응-확산 문제에서 같은 일이 벌어진다. 감쇠하는 해는 반대 방향에서 보면 성장하는 해라, 적분 방향을 바꾸는 것만으로 해결되는 경우도 있지만 양방향 모두에 성장 모드가 있으면 그것도 안 된다.

5. 다중 사격법

처방은 구간을 mm 조각으로 나누고 각 조각의 시작점마다 따로 쏘는 것이다. 조각 [ti,ti+1][t_i, t_{i+1}] 의 시작 상태 zi\mathbf z_i 를 모두 미지수로 두고

  • 각 조각 끝값이 다음 조각 시작값과 일치(연속 조건),
  • 첫 조각과 마지막 조각에서 경계조건 만족

을 연립으로 푼다. 미지수는 mm 배로 늘지만 조각 하나의 증폭률이 ek(b−a)/me^{k(b-a)/m} 으로 줄어든다. 위 k=40k=40 문제를 그대로 다중 사격으로 풀었다.

조각 수 mm조각당 증폭 ek/me^{k/m}연립계 조건수절점 최대오차
1 (단일 사격)2.4×10172.4\times10^{17}1.4×10171.4\times10^{17}끝값 4.3×1044.3\times10^4 어긋남
42.2×1042.2\times10^{4}1.8×1071.8\times10^{7}4.3×10−134.3\times10^{-13}
105.5×1015.5\times10^{1}4.4×1044.4\times10^{4}5.5×10−155.5\times10^{-15}
207.47.46.0×1036.0\times10^{3}2.3×10−142.3\times10^{-14}

조각 넷만으로 오차가 17자릿수 줄었다. 연립계는 블록 두 대각 구조라 O(m)O(m) 에 풀린다. 다중 사격법은 1960년대 초에 제안됐고(모리슨·라일리·차나로, 1962) 불리르슈·도이플하르트 등이 궤도 최적화 문제에 쓰며 다듬었으며, 지금도 직접 최적 제어(CasADi·acados 류의 다중 사격 이산화)의 핵심 구조로 살아 있다.

조각 수를 계속 늘리면 결국 “격자점마다 미지수, 이웃끼리 연속 조건”이 되는데, 이것이 유한차분법·직교 배치법 같은 전역 방법이다. SciPy solve_bvp, MATLAB bvp4c 는 배치법으로 구간 전체를 한 번에 풀고 잔차를 보고 격자를 적응시킨다. 실무에선 이쪽이 기본값이고, 사격법은 미지 초기값이 적고 문제가 순할 때, 혹은 이미 좋은 IVP 적분기가 있을 때 쓴다.

6. 실무 체크리스트

  • 근이 여럿일 수 있다. 비선형 BVP 는 해가 여럿이거나 없을 수 있다. 예컨대 브라투 문제 y′′+λey=0y'' + \lambda e^{y} = 0, y(0)=y(1)=0y(0)=y(1)=0 은 λ\lambda 가 임계값(약 3.51) 아래면 해가 둘이다. 초기 기울기를 넓게 훑어 F(s)F(s) 그래프부터 그려 보면 몇 개인지 보인다. λ\lambda 를 바꿔 가며 따라가려면 수치 연속법이 정석이다.
  • FF 에 적분 오차가 낀다. 근 찾기 허용오차를 적분기 허용오차보다 작게 잡으면 잡음을 쫓는다. 적분 허용오차를 근 찾기 허용오차보다 두세 자릿수 엄격하게.
  • 적분이 터지면 FF 가 정의되지 않는다. 나쁜 추측 ss 에서는 해가 유한 시간에 폭발한다. 근 찾기가 그 ss 를 밟지 않게 구간을 잡거나, 폭발을 큰 유한값으로 잘라 돌려준다.
  • 무한 구간은 잘라서. 블라시우스처럼 LL 을 키워 가며 답이 안 변하는지 본다. 감쇠 해의 점근형을 끝점 조건으로 쓰면 더 작은 LL 로 충분하다.

7. 관련 문서

8. Footnotes

  1. 1912년이면 적분기는 사람이었다. 사격 한 발이 며칠짜리 손계산이니, 대칭성 하나로 반복을 없애는 건 우아함이 아니라 생존이었다. ↩

  2. 조준이 아무리 정확해도 탄도가 카오스면 포탄은 엉뚱한 데 떨어진다. 포병 교범에 없는 교훈. ↩

검증 자료

이 문서의 주요 출처

  1. Ascher, Mattheij & Russell (1995), Numerical Solution of Boundary Value Problems for Ordinary Differential Equations, SIAM Classics in Applied Mathematics 13
  2. Stoer & Bulirsch (2002), Introduction to Numerical Analysis 3rd ed., §7.3 Shooting methods, Springer
  3. SciPy documentation, scipy.integrate.solve_bvp (collocation)
  4. Schlichting & Gersten (2017), Boundary-Layer Theory 9th ed., Springer
이 문서가 문제를 푸는 데 도움이 됐나요? 한 번의 클릭이 다음 검수 순서를 정합니다.

의견을 반영할게요. 감사합니다.

다음으로 읽기 뉴턴-랩슨법 약 5분 더 탐색 →