경계값 문제 풀기
경계값 문제(BVP)에서의 목표는 지정된 특정 경계 조건까지 충족하는 상미분 방정식(ODE)의 해를 구하는 것입니다. 경계 조건은 적분 구간 내 두 개 이상의 위치에 있는 해의 값 간의 관계를 지정합니다. 가장 간단한 경우는 경계 조건이 구간의 시작과 끝(또는 경계)에 적용되는 것입니다.
MATLAB® BVP솔버 bvp4c
와 bvp5c
는 다음 형식의 연립상미분방정식을 처리하도록 설계되어 있습니다.
여기서
x는 독립 변수입니다.
y는 종속 변수입니다.
y′는 x에 대한 y의 도함수를 나타내며 dy/dx로도 표시합니다.
경계 조건
2점 BVP의 가장 간단한 사례에서는 ODE의 해가 구간 [a, b]에서 구해지고 다음 경계 조건을 충족해야 합니다.
주어진 BVP에 대한 경계 조건을 지정하려면 다음을 수행해야 합니다.
res = bcfun(ya,yb)
형식의 함수를 작성하거나 알 수 없는 파라미터가 포함된 경우에는res = bcfun(ya,yb,p)
형식을 사용합니다. 이 함수를 솔버에 두 번째 입력 인수로 제공합니다. 함수는res
를 반환하며 이는 경계점에서 해의 잔차 값입니다. 예를 들어, y(a) = 1이고 y(b) = 0인 경우 경계 조건 함수는 다음과 같습니다.function res = bcfun(ya,yb) res = [ya(1)-1 yb(1)]; end
해에 대한 초기 추측값으로 메시의 첫 번째 점과 마지막 점은 경계 조건이 적용되는 점을 지정합니다. 위 경계 조건의 경우
bvpinit(linspace(a,b,5),yinit)
를 지정하여 a와 b에서의 경계 조건을 적용할 수 있습니다.
MATLAB에서 BVP 솔버는 다음을 포함한 다른 유형의 문제도 다룰 수 있습니다.
알 수 없는 파라미터 p
해의 특이점
다중 점 조건(적분 구간을 여러 영역으로 구분하는 내부 경계)
다중 점 경계 조건의 경우 경계 조건은 적분 구간에서 세 개 이상의 지점에 적용됩니다. 예를 들어, 구간의 시작, 중간 및 끝에서 해가 0이 되어야 할 수 있습니다. 여러 경계 조건을 지정하는 방법에 대한 자세한 내용은 bvpinit
를 참조하십시오.
해의 초기 추측값
초기값 문제와 달리 경계값 문제에는 다음의 경우가 있을 수 있습니다.
해가 없음
유한개의 해
무한개의 많은 해
필요한 해에 대한 추측값을 제공하는 것은 BVP를 푸는 과정의 중요한 부분입니다. 이 추측값의 품질은 솔버 성능은 물론, 계산 성공 여부에도 중요한 요소로 작용할 수 있습니다.
해의 초기 추측값에 대한 구조체를 만들려면 bvpinit
함수를 사용하십시오. 솔버 bvp4c
와 bvp5c
는 이 구조체를 세 번째 입력 인수로 받습니다.
해에 대한 양호한 초기 추측값을 만드는 것은 과학이라기보다 예술에 가깝습니다. 그러나 몇 가지 일반적인 지침은 다음과 같습니다.
해가 경계 조건을 충족해야 하므로 초기 추측값도 경계 조건을 충족해야 합니다. 문제에 알 수 없는 파라미터가 포함된 경우 파라미터에 대한 초기 추측값도 경계 조건을 충족해야 합니다.
실제 문제나 예상되는 해에 대한 가능한 많은 정보를 초기 추측값에 적용해 보십시오. 예를 들어, 해가 진동하거나 해에 특정 개수의 부호 변경이 있을 것으로 예상되면 초기 추측값도 마찬가지여야 합니다.
메시 점(해의 초기 추측값에 대한 x 좌표)을 배치해 보십시오. BVP 솔버가 풀이 과정에서 이 점을 조정하므로 너무 많은 메시 점을 지정할 필요는 없습니다. 해가 급격하게 변하는 지점 근처에 몇 개의 메시 점을 지정하는 것이 좋습니다.
작은 구간에 알려진 간단한 해가 있는 경우에는 이 해를 큰 구간의 초기 추측값으로 사용하십시오. 종종 하나의 문제를 비교적 간단한 일련의 여러 문제로 취급해 풀 수 있는데, 이때 사용하는 방법을 연속법(Continuation)이라고 합니다. 일련의 간단한 문제들이 연속으로 연결되어 있으므로 한 문제의 해를 초기 추측값으로 사용하여 다음 문제를 풀 수 있습니다.
알 수 없는 파라미터 구하기
주로, BVP에는 다음과 같이 문제를 푸는 과정에서 결정되어야 하는 알 수 없는 파라미터 p가 포함됩니다. ODE와 경계 조건은 다음과 같습니다.
이 경우, 파라미터 p의 값을 결정할 수 있도록 경계 조건이 충분해야 합니다.
알 수 없는 모든 파라미터에 대한 초기 추측값을 솔버에 제공해야 합니다. bvpinit
를 호출하여 구조체 solinit
를 만드는 경우 초기 추측값을 세 번째 입력 인수 parameters
에 벡터로 지정합니다.
solinit = bvpinit(x,v,parameters)
또한 ODE 수식과 경계 조건을 인코딩하는 함수 odefun
과 bcfun
에는 각각 세 번째 인수가 있어야 합니다.
dydx = odefun(x,y,parameters) res = bcfun(ya,yb,parameters)
미분 방정식을 푸는 동안 솔버는 경계 조건을 충족하도록 알 수 없는 파라미터의 값을 조정합니다. 솔버는 이러한 알 수 없는 파라미터의 최종 값을 sol.parameters
에 반환합니다.
특이 BVP(Singular BVP)
bvp4c
와 bvp5c
는 다음 형식의 특이 BVP 문제를 풀 수 있습니다.
솔버는 다음 형식의 문제에 대한 미지의 파라미터도 구할 수 있습니다.
특이 문제는 b > 0인 구간 [0,b]에 있어야 합니다. bvpset
을 사용하여 상수 행렬 S를 'SingularTerm'
옵션의 값으로서 솔버에 전달합니다. x = 0에서의 경계 조건은 매끄러운 해의 필수 조건 Sy(0) = 0과 모순되지 않아야 합니다. 해의 초기 추측값은 이 조건도 충족해야 합니다.
특이 BVP를 풀 때 함수 odefun(x,y)
는 방정식에서 f(x, y) 항의 값만 반환해야 합니다. S를 포함한 항은 'SingularTerm'
옵션을 사용하여 별도로 솔버가 처리합니다.
BVP 솔버 선택
MATLAB에는 BVP를 풀 수 있는 솔버 bvp4c
와 bvp5c
가 포함되어 있습니다. 대부분의 경우 이들 솔버를 서로 구분 없이 사용할 수 있습니다. 두 솔버의 주요 차이점은 bvp4c
는 4차식을 구현하고 bvp5c
는 5차식을 구현한다는 점입니다.
bvp5c
함수를 bvp4c
함수와 비교해 보면, 이 두 솔버 간에 허용오차가 의미하는 점만 다를 뿐 나머지 사용 방법은 동일합니다. S(x)가 해 y(x)의 근사치를 계산하면, bvp4c
는 잔차 |S′(x)–f(x,S(x))|를 제어하게 됩니다. 이 접근 방식은 정확한 오차 |y(x) – S(x)|를 간접적으로 제어합니다. 정확한 오차를 직접 제어하려면 bvp5c
를 사용하십시오.
솔버 | 설명 |
---|---|
선점 기법은 점들로 구성된 메시를 사용하여 적분 구간을 하위 구간으로 나눕니다. 솔버는 경계 조건에서 얻는 대수 방정식의 전역 시스템(Global System)을 풀어 수치 해를 구하고, 모든 하위 구간에 적용되는 선점 조건을 결정합니다. 그런 다음, 각 하위 구간에 대한 수치 해의 오차를 추정합니다. 해가 허용오차 조건을 충족하지 않을 경우 솔버는 이에 맞게 메시를 조정하고 위 절차를 반복합니다. 초기 메시의 점뿐만 아니라 메시 점에서 해의 초기 근삿값도 반드시 제공해야 합니다. | |
bvp5c 는 4단계 로바토 IIIa(Four-stage Lobatto IIIa) 식을 구현하는 유한 미분 코드입니다. 이는 선점(Collocation) 식으로, [a,b]에서 일정한 5차 정확도를 가지며 C1 연속해(Continuous Solution)를 제공하는 선점 다항식(Collocation Polynomial)입니다. 이 식은 묵시적 룽게-쿠타(Implicit Runge-Kutta Formula) 공식으로 구현됩니다. bvp5c 는 대수 방정식을 직접 푸는 반면 bvp4c 는 해석적 응축(Analytical Condensation)을 사용합니다. bvp4c 는 알 수 없는 파라미터를 직접 처리하는 반면 bvp5c 는 알 수 없는 파라미터에 대해, 자명한 연립미분방정식을 인수로 사용합니다. |
해 구하기
bvp4c
와 bvp5c
에서 구현되는 선점 방법은 적분 구간 [a,b]에서 C1 연속해를 생성합니다. 사용자는 헬퍼 함수 deval
과, 솔버에서 반환되는 구조체 sol
을 사용하여 [a,b] 내 임의 지점에서 근사해(Approximate Solution) S(x)를 구할 수 있습니다. 예를 들어, 점으로 구성된 메시 xint
에서 해 sol
을 구하려면 다음 명령을 사용하십시오.
Sxint = deval(sol,xint)
deval
함수가 벡터화됩니다. 벡터 xint
에 대해 Sxint
의 i
번째 열은 해 y(xint(i))
의 근삿값을 계산합니다.
BVP 예제와 파일
가장 일반적인 BVP 문제를 풀기 위한 탁월한 출발점이 될 수 있는 여러 예제 파일이 있습니다. 예제를 손쉽게 찾아 실행하려면 간단히 미분 방정식 예제 앱을 사용하십시오. 이 앱을 실행하려면 다음을 입력하십시오.
odeexamples
edit exampleFileName.m
exampleFileName
다음 표에는 사용할 수 있는 BVP 예제 파일과, 이러한 예제 파일에서 사용하는 솔버 및 옵션 목록이 나와 있습니다.
예제 파일 | 사용된 솔버 | 지정된 옵션 | 설명 | 예제 링크 |
---|---|---|---|---|
|
|
| 엠덴 방정식(Emden's equation), 특이 BVP | |
|
| — | 무한 구간의 포크너-스칸(Falkner-Skan) BVP | |
|
| — | 마슈 방정식(Mathieu's equation)의 네 번째 고유함수 | |
|
|
|
| bvp4c와 bvp5c 솔버 비교하기 ( bvp4c와 bvp5c 솔버 비교하기 ( |
|
|
| x = 0 근처에서 충격층을 포함하는 해 | |
|
| — | 정확히 2개의 해를 갖는 BVP | |
|
| — | 3점 경계값 문제 |
참고 문헌
[1] Ascher, U., R. Mattheij, and R. Russell. “Numerical Solution of Boundary Value Problems for Ordinary Differential Equations.” Philadelphia, PA: SIAM, 1995, p. 372.
[2] Shampine, L.F., and J. Kierzenka. "A BVP Solver based on residual control and the MATLAB PSE." ACM Trans. Math. Softw. Vol. 27, Number 3, 2001, pp. 299–316.
[3] Shampine, L.F., M.W. Reichelt, and J. Kierzenka. "Solving Boundary Value Problems for Ordinary Differential Equations in MATLAB with bvp4c." MATLAB File Exchange, 2004.
[4] Shampine, L.F., and J. Kierzenka. "A BVP Solver that Controls Residual and Error." J. Numer. Anal. Ind. Appl. Math. Vol. 3(1-2), 2008, pp. 27–41.