경계값 문제

오류 제보

경계값 문제(boundary value problem, BVP)는 미분방정식의 해가 만족해야 할 조건이 정의역의 둘 이상의 지점(보통 구간의 양 끝)에 나뉘어 주어지는 문제다. 상미분방정식 1계 계로 쓰면

수치해석 읽는 데 약 8분 마지막 수정:

목차 13

1. 개요

경계값 문제
Boundary Value Problem (BVP)
대비초기값 문제 — 조건이 한쪽 끝에만
해의 존재보장되지 않음 (없거나, 무수히 많을 수 있다)
대표 해법사격법, 유한차분, 배치법
대표 코드COLSYS/COLNEW, bvp4c, solve_bvp, AUTO
핵심 개념조건수, 이분성(dichotomy), 연속법

초기값 문제는 출발점만 주고 “가 봐” 하는 것이고, 경계값 문제는 출발점과 도착점을 같이 주고 “그 사이 길을 내놔” 하는 것이다.

경계값 문제(boundary value problem, BVP)1는 미분방정식의 해가 만족해야 할 조건이 정의역의 둘 이상의 지점(보통 구간의 양 끝)에 나뉘어 주어지는 문제다. 상미분방정식 1계 계로 쓰면

y′(x)=f(x,y),a<x<b,g(y(a),y(b))=0\mathbf y'(x) = \mathbf f(x, \mathbf y), \quad a < x < b, \qquad \mathbf g\big(\mathbf y(a), \mathbf y(b)\big) = \mathbf 0

이고, 가장 흔한 꼴은 2계 방정식 u′′=f(x,u,u′)u'' = f(x,u,u') 에 u(a)=αu(a)=\alpha, u(b)=βu(b)=\beta 를 준 2점 경계값 문제다.

모든 조건이 한 점에 몰린 초기값 문제와 달리, 경계값 문제는 해가 존재하는지조차 국소 정보로 보장되지 않는다. 그래서 수치해석의 관심사도 “얼마나 정확하게” 이전에 “이 문제가 잘 놓였는가, 그리고 조건수가 얼마인가” 로 옮겨 간다. 보·현의 처짐, 경계층 유사해, 반응-확산 정상상태, 궤도 전이, 주기해 탐색, 분기 이론의 해 가지 추적이 전부 이 틀 안에 들어온다. 편미분방정식의 경계 처리는 경계 조건 문서가 다룬다. 이 문서는 상미분방정식 쪽이다.

2. 잘 놓였는가

2.1. 선형 문제 — 행렬 하나가 다 정한다

선형 계 y′=A(x)y+q(x)\mathbf y' = A(x)\mathbf y + \mathbf q(x) 에 선형 경계조건 Bay(a)+Bby(b)=βB_a\mathbf y(a) + B_b\mathbf y(b) = \boldsymbol\beta 를 주면, 기본행렬 Y(x)Y(x) (Y′=AYY' = AY, Y(a)=IY(a) = I)로 해를 y=Y(x)s+특수해\mathbf y = Y(x)\mathbf s + \text{특수해} 라 쓸 수 있다. 경계조건에 넣으면 미지수 s\mathbf s 에 대한 선형계

Q s=(우변),Q=Ba+Bb Y(b)Q\,\mathbf s = \text{(우변)}, \qquad Q = B_a + B_b\,Y(b)

가 남는다. QQ 가 가역이면 유일해, 특이하면 해가 없거나 무수히 많다. 이것이 경계값 문제판 프레드홀름 대안이고, 수치적 사격법은 바로 이 QQ 를 수치 적분으로 만들어 푸는 방법이다.

가장 짧은 반례가 u′′+λu=0u'' + \lambda u = 0, u(0)=u(1)=0u(0)=u(1)=0 이다. λ≠k2π2\lambda \ne k^2\pi^2 이면 해는 u≡0u\equiv0 하나, λ=π2\lambda = \pi^2 이면 Csin⁡πxC\sin\pi x 전부가 해다. 우변을 붙여 u′′+λu=r(x)u''+\lambda u = r(x) 로 만들면 λ=π2\lambda = \pi^2 에서는 ∫01r(x)sin⁡πx dx=0\int_0^1 r(x)\sin\pi x\,dx = 0 일 때만 해가 있다. 이 “특정 λ\lambda 에서만 0 아닌 해” 문제가 고유값 문제이고, 계통적으로 다루면 슈투름-리우빌 문제다.

2.2. 조건수 — 특이 직전이 진짜 문제

실무에서 무서운 건 정확히 특이한 경우가 아니라 거의 특이한 경우다. 위 문제를 중앙차분 N=100N=100 칸으로 이산화하고 λ\lambda 를 고유값 쪽으로 밀면서 행렬 조건수를 재면 이렇다.

λ\lambda199.89.869π2=9.8696…\pi^2 = 9.8696\ldots
조건수4.5×10³4.6×10⁴5.8×10⁵1.9×10⁸4.9×10⁷

조건수가 가장 큰 곳이 연속 고유값 π2\pi^2 가 아니라 9.869 라는 점이 재밌다. 이산 연산자의 첫 고유값은 4h2sin⁡2πh2=9.8688\frac{4}{h^2}\sin^2\frac{\pi h}{2} = 9.8688 이라 연속값보다 살짝 작고, 행렬은 연속 문제가 아니라 자기 고유값 근처에서 터진다. 경계값 문제의 수치 조건수를 볼 때는 이산화가 고유값을 얼마나 옮겼는지까지 봐야 한다.

연속 수준의 조건수는 해가 경계 데이터와 우변에 얼마나 민감한가로 정의되고, 그린 함수의 크기로 잰다(그린 함수). 마테이·애셔·러셀이 정리한 핵심 결과는 이분성(dichotomy) 이다 — 잘 조건화된 경계값 문제는 해 공간이 “왼쪽에서 오른쪽으로 감쇠하는 모드” 와 “오른쪽에서 왼쪽으로 감쇠하는 모드” 로 나뉘고, 경계조건이 각 모드를 감쇠가 시작되는 쪽 끝에서 고정한다. 이게 어긋나면(감쇠 모드를 반대편 끝에서 잡으려 하면) 문제는 지수적으로 나쁜 조건을 갖는다.

3. 수치 해법 지도

3.1. 사격법 — 경계값 문제를 초기값 문제로

모르는 초기조건을 추정하고 초기값 문제로 적분한 뒤, 반대편 경계의 불일치를 뉴턴-랩슨법으로 0으로 만든다. 코드가 짧고 기존 ODE 적분기를 재사용할 수 있는 것이 장점이다. 약점은 위의 이분성 그 자체다. 문제에 성장 모드가 있으면 그 모드가 적분 중에 eλ(b−a)e^{\lambda(b-a)} 배 증폭되어, 경계값 문제는 멀쩡해도 사격 계산이 먼저 망한다. 구간을 쪼개 각 조각을 따로 쏘는 다중 사격이 처방이다. 성공·실패 실측과 다중 사격의 구조는 사격법 문서에 있다.

3.2. 유한차분 — 전체를 한 번에

구간에 격자를 깔고 도함수를 차분으로 바꿔 모든 격자점의 미지수를 동시에 푼다. 2계 선형 문제에 중앙차분을 쓰면 삼중대각 행렬이 나오고 토머스 알고리즘으로 O(N)O(N) 에 풀린다. −u′′=π2sin⁡πx-u'' = \pi^2\sin\pi x, u(0)=u(1)=0u(0)=u(1)=0 으로 재 본 결과다.

NN10204080
최대 오차8.27×10⁻³2.06×10⁻³5.14×10⁻⁴1.29×10⁻⁴
행렬 조건수401616482593

NN 을 두 배로 할 때마다 오차가 1/4 — 2차 수렴이다. 조건수가 O(h−2)O(h^{-2}) 로 자라는 건 2계 미분 연산자의 숙명이지만, 이 정도로는 배정밀도에서 정확도를 해치지 않는다. 사격법과 달리 성장 모드가 양쪽 경계조건에 동시에 묶이므로 이분성이 맞는 문제면 안정하다. 고차 정확도는 리처드슨 외삽이나 결손 보정(deferred correction)으로 얻는다.

3.3. 배치법 — 현대 범용 코드의 주류

해를 구간별 다항식으로 놓고 각 구간 안의 몇몇 점(가우스점)에서 미분방정식을 정확히 만족시킨다. 가우스점 kk 개 배치는 격자점에서 O(h2k)O(h^{2k}) 초수렴을 내는 암시적 룽게-쿠타법과 같은 것이다. 애셔·크리스티안센·러셀의 COLSYS(1981)와 후속 COLNEW 가 고전이고, MATLAB bvp4c(키에르젠카·샴파인 2001, 3단 로바토 배치 = 구간별 3차 C¹ 다항식)와 SciPy solve_bvp 가 같은 계열이다. 이들은 격자점 오차가 아니라 연속 해의 잔차를 재서 격자를 적응적으로 고치는데, 이것이 경계층·내부층을 자동으로 찾아가게 만든다. 원리와 초수렴 실측은 직교 배치법에 있다.

사격법유한차분배치법
구현 난도낮음낮음~중간높음(라이브러리 사용)
성장 모드약함(다중 사격으로 보완)강함강함
적응 격자적분기 내부만손으로잔차 기반 자동
비선형뉴턴 + IVP 반복뉴턴 + 희소 선형계뉴턴 + 블록 띠 행렬

4. 비선형 문제와 해의 가지

비선형 경계값 문제는 해가 0개·1개·여러 개 모두 가능하고, 어느 해로 수렴할지는 초기 추정이 정한다. 표준 예제가 1차원 브라투(Bratu) 문제

u′′+λeu=0,u(0)=u(1)=0u'' + \lambda e^{u} = 0, \qquad u(0) = u(1) = 0

이다. 0<λ<λc≈3.51380 < \lambda < \lambda_c \approx 3.5138 에서는 해가 두 개(낮은 가지·높은 가지), λ=λc\lambda = \lambda_c 에서는 하나, 그 위로는 해가 없다. λc\lambda_c 는 두 가지가 만나는 안장-마디 분기점이고, 그 근처에서 뉴턴법의 야코비안이 특이에 가까워져 수렴이 무너진다.

이런 문제는 λ\lambda 를 조금씩 바꿔 가며 직전 해를 초기 추정으로 쓰는 연속법으로 푼다. 접힘점을 넘어가려면 λ\lambda 대신 해 곡선의 호 길이를 매개변수로 삼는 의사 호장 연속법이 필요하다. AUTO-07p 가 정확히 이 일을 배치법 위에서 한다. 덤으로 미지 매개변수(고유값, 주기, 자유경계의 위치)가 있는 문제는 그 매개변수를 p′=0p' = 0 인 상태변수로 추가하고 경계조건을 하나 더 주면 표준형으로 바뀐다 — 주기해 탐색에서 주기 TT 를 구간 길이로 정규화하는 것이 같은 요령이다.

5. 특이 섭동 — 경계층이 숨어 있을 때

εu′′+u′=0\varepsilon u'' + u' = 0, u(0)=0u(0)=0, u(1)=1u(1)=1 처럼 최고차 항에 작은 계수가 붙으면 해는 대부분 거의 상수이다가 한쪽 끝의 폭 O(ε)O(\varepsilon) 짜리 층에서 급변한다(특이 섭동). 등간격 격자로는 h≪εh \ll \varepsilon 이 될 때까지 진동하거나 층을 놓친다. 처방은 세 가지다.

  • 층 안에 격자를 몰아넣는다. 시시킨(Shishkin) 격자 같은 구간별 등간격 격자는 ε\varepsilon 에 무관한 수렴을 보장한다.
  • 풍상 차분을 쓴다. 진동은 사라지지만 정확도가 1차로 떨어지고 층이 번진다(수치확산).
  • 잔차 기반 적응 코드에 맡긴다. bvp4c 류가 알아서 층을 찾지만, 초기 격자가 너무 성기면 층의 존재 자체를 못 본다. 이럴 때는 큰 ε\varepsilon 에서 시작해 연속법으로 줄여 간다.

이 문제는 강성 방정식과 쌍둥이다. 초기값 문제의 강성이 “빠른 감쇠 모드” 이듯, 경계값 문제의 경계층은 “한쪽 끝에서 빠르게 감쇠하는 모드” 이고, 그래서 강성에 강한 암시적 배치 공식이 경계값 문제 코드의 기본 엔진이 됐다.2

6. 실무 요령

  1. 1계 계로 쓰고, 경계조건 개수를 센다. nn 차원 1계 계에는 독립 조건 nn 개(+미지 매개변수 수)가 필요하다. 개수가 안 맞으면 라이브러리가 엉뚱한 오류를 낸다.
  2. 초기 추정이 해를 고른다. 해가 여럿일 수 있는 문제에서 “수렴했다” 는 “원하는 해를 찾았다” 가 아니다.3
  3. 야코비안을 해석적으로 준다. 유한차분 야코비안은 경계층 근처에서 부정확해 뉴턴 수렴을 망친다. 자동 미분이 좋은 타협이다.
  4. 허용오차와 격자 상한을 같이 본다. 적응 코드가 격자 상한에 닿아 멈췄다면 그 답은 수렴한 답이 아니다.
  5. 물리 검산. 보존량(에너지·질량)이 맞는지, ε\varepsilon 을 바꿨을 때 층 두께가 ε\varepsilon 에 비례하는지 확인한다.

7. 관련 문서

8. Footnotes

  1. “경계값” 과 “경곗값” 은 둘 다 쓰인다. 표준어 규정은 사이시옷을 붙인 쪽을 들지만 이 바닥은 대부분 “경계값” 으로 검색하고 교과서도 그렇게 쓴다. 검색이 국룰을 이겼다. ↩

  2. 그래서 경계값 문제 코드의 소스를 열어 보면 내부가 거의 암시적 룽게-쿠타다. 이름만 다르고 엔진은 같은 걸 쓰는, 업계에선 흔한 일이다. ↩

  3. 브라투 문제에서 초기 추정을 u≡0u\equiv0 으로 주면 낮은 가지, 크게 부풀린 포물선을 주면 높은 가지로 간다. 같은 코드, 같은 λ\lambda, 다른 답. 라이브러리 탓이 아니다. ↩

다음으로 읽기 분기 이론 같은 분류 · 수치해석 →
○ 공개 검수 대기 AI 보조 작성 표시 기준 보기
검증 자료

이 문서의 주요 출처

  1. U. M. Ascher, R. M. M. Mattheij, R. D. Russell, Numerical Solution of Boundary Value Problems for Ordinary Differential Equations (SIAM Classics, 1995)
  2. J. Kierzenka, L. F. Shampine (2001), A BVP solver based on residual control and the MATLAB PSE, ACM Trans. Math. Softw. 27(3), 299-316
  3. U. Ascher, J. Christiansen, R. D. Russell (1981), Collocation software for boundary-value ODEs, ACM Trans. Math. Softw. 7(2), 209-222
  4. SciPy documentation, scipy.integrate.solve_bvp
이 문서가 문제를 푸는 데 도움이 됐나요? 한 번의 클릭이 다음 검수 순서를 정합니다.

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