Main Content

경계값 문제 풀기

경계값 문제(BVP)에서의 목표는 지정된 특정 경계 조건까지 충족하는 상미분 방정식(ODE)의 해를 구하는 것입니다. 경계 조건은 적분 구간 내 두 개 이상의 위치에 있는 해의 값 간의 관계를 지정합니다. 가장 간단한 경우는 경계 조건이 구간의 시작과 끝(또는 경계)에 적용되는 것입니다.

MATLAB® BVP솔버 bvp4cbvp5c는 다음 형식의 연립상미분방정식을 처리하도록 설계되어 있습니다.

y'=f(x,y)

여기서

  • x는 독립 변수입니다.

  • y는 종속 변수입니다.

  • y′는 x에 대한 y의 도함수를 나타내며 dy/dx로도 표시합니다.

경계 조건

2점 BVP의 가장 간단한 사례에서는 ODE의 해가 구간 [a, b]에서 구해지고 다음 경계 조건을 충족해야 합니다.

g(y(a),y(b))=0.

주어진 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 함수를 사용하십시오. 솔버 bvp4cbvp5c는 이 구조체를 세 번째 입력 인수로 받습니다.

해에 대한 양호한 초기 추측값을 만드는 것은 과학이라기보다 예술에 가깝습니다. 그러나 몇 가지 일반적인 지침은 다음과 같습니다.

  • 해가 경계 조건을 충족해야 하므로 초기 추측값도 경계 조건을 충족해야 합니다. 문제에 알 수 없는 파라미터가 포함된 경우 파라미터에 대한 초기 추측값도 경계 조건을 충족해야 합니다.

  • 실제 문제나 예상되는 해에 대한 가능한 많은 정보를 초기 추측값에 적용해 보십시오. 예를 들어, 해가 진동하거나 해에 특정 개수의 부호 변경이 있을 것으로 예상되면 초기 추측값도 마찬가지여야 합니다.

  • 메시 점(해의 초기 추측값에 대한 x 좌표)을 배치해 보십시오. BVP 솔버가 풀이 과정에서 이 점을 조정하므로 너무 많은 메시 점을 지정할 필요는 없습니다. 해가 급격하게 변하는 지점 근처에 몇 개의 메시 점을 지정하는 것이 좋습니다.

  • 작은 구간에 알려진 간단한 해가 있는 경우에는 이 해를 큰 구간의 초기 추측값으로 사용하십시오. 종종 하나의 문제를 비교적 간단한 일련의 여러 문제로 취급해 풀 수 있는데, 이때 사용하는 방법을 연속법(Continuation)이라고 합니다. 일련의 간단한 문제들이 연속으로 연결되어 있으므로 한 문제의 해를 초기 추측값으로 사용하여 다음 문제를 풀 수 있습니다.

알 수 없는 파라미터 구하기

주로, BVP에는 다음과 같이 문제를 푸는 과정에서 결정되어야 하는 알 수 없는 파라미터 p가 포함됩니다. ODE와 경계 조건은 다음과 같습니다.

y'=f(x,y,p)g(y(a),y(b),p)=0

이 경우, 파라미터 p의 값을 결정할 수 있도록 경계 조건이 충분해야 합니다.

알 수 없는 모든 파라미터에 대한 초기 추측값을 솔버에 제공해야 합니다. bvpinit를 호출하여 구조체 solinit를 만드는 경우 초기 추측값을 세 번째 입력 인수 parameters에 벡터로 지정합니다.

solinit = bvpinit(x,v,parameters)

또한 ODE 수식과 경계 조건을 인코딩하는 함수 odefunbcfun에는 각각 세 번째 인수가 있어야 합니다.

dydx = odefun(x,y,parameters)
res = bcfun(ya,yb,parameters)

미분 방정식을 푸는 동안 솔버는 경계 조건을 충족하도록 알 수 없는 파라미터의 값을 조정합니다. 솔버는 이러한 알 수 없는 파라미터의 최종 값을 sol.parameters에 반환합니다.

특이 BVP(Singular BVP)

bvp4cbvp5c는 다음 형식의 특이 BVP 문제를 풀 수 있습니다.

y=1xSy+f(x,y),0=g(y(0),y(b)).

솔버는 다음 형식의 문제에 대한 미지의 파라미터도 구할 수 있습니다.

y=1xSy+f(x,y,p),0=g(y(0),y(b),p).

특이 문제는 b > 0인 구간 [0,b]에 있어야 합니다. bvpset을 사용하여 상수 행렬 S를 'SingularTerm' 옵션의 값으로서 솔버에 전달합니다. x = 0에서의 경계 조건은 매끄러운 해의 필수 조건 Sy(0) = 0과 모순되지 않아야 합니다. 해의 초기 추측값은 이 조건도 충족해야 합니다.

특이 BVP를 풀 때 함수 odefun(x,y)는 방정식에서 f(x, y) 항의 값만 반환해야 합니다. S를 포함한 항은 'SingularTerm' 옵션을 사용하여 별도로 솔버가 처리합니다.

BVP 솔버 선택

MATLAB에는 BVP를 풀 수 있는 솔버 bvp4cbvp5c가 포함되어 있습니다. 대부분의 경우 이들 솔버를 서로 구분 없이 사용할 수 있습니다. 두 솔버의 주요 차이점은 bvp4c는 4차식을 구현하고 bvp5c는 5차식을 구현한다는 점입니다.

bvp5c 함수를 bvp4c 함수와 비교해 보면, 이 두 솔버 간에 허용오차가 의미하는 점만 다를 뿐 나머지 사용 방법은 동일합니다. S(x)가 해 y(x)의 근사치를 계산하면, bvp4c는 잔차 |S′(x)–f(x,S(x))|를 제어하게 됩니다. 이 접근 방식은 정확한 오차 |y(x) – S(x)|를 간접적으로 제어합니다. 정확한 오차를 직접 제어하려면 bvp5c를 사용하십시오.

솔버설명

bvp4c

bvp4c는 3단계 로바토 IIIa(Three-stage Lobatto IIIa) 식을 구현하는 유한 차분 코드입니다. 이는 선점(Collocation) 식으로, 적분 구간에서 일정한 4차 정확도를 가지며 C1 연속해를 제공하는 선점 다항식입니다. 메시 선택과 오차 제어는 연속해(Continuous Solution)의 잔차(Residual)를 기준으로 합니다.

선점 기법은 점들로 구성된 메시를 사용하여 적분 구간을 하위 구간으로 나눕니다. 솔버는 경계 조건에서 얻는 대수 방정식의 전역 시스템(Global System)을 풀어 수치 해를 구하고, 모든 하위 구간에 적용되는 선점 조건을 결정합니다. 그런 다음, 각 하위 구간에 대한 수치 해의 오차를 추정합니다. 해가 허용오차 조건을 충족하지 않을 경우 솔버는 이에 맞게 메시를 조정하고 위 절차를 반복합니다. 초기 메시의 점뿐만 아니라 메시 점에서 해의 초기 근삿값도 반드시 제공해야 합니다.

bvp5c

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는 알 수 없는 파라미터에 대해, 자명한 연립미분방정식을 인수로 사용합니다.

해 구하기

bvp4cbvp5c에서 구현되는 선점 방법은 적분 구간 [a,b]에서 C1 연속해를 생성합니다. 사용자는 헬퍼 함수 deval과, 솔버에서 반환되는 구조체 sol을 사용하여 [a,b] 내 임의 지점에서 근사해(Approximate Solution) S(x)를 구할 수 있습니다. 예를 들어, 점으로 구성된 메시 xint에서 해 sol을 구하려면 다음 명령을 사용하십시오.

Sxint = deval(sol,xint)

deval 함수가 벡터화됩니다. 벡터 xint에 대해 Sxinti번째 열은 해 y(xint(i))의 근삿값을 계산합니다.

BVP 예제와 파일

가장 일반적인 BVP 문제를 풀기 위한 탁월한 출발점이 될 수 있는 여러 예제 파일이 있습니다. 예제를 손쉽게 찾아 실행하려면 간단히 미분 방정식 예제 앱을 사용하십시오. 이 앱을 실행하려면 다음을 입력하십시오.

odeexamples
편집을 위해 개별 예제 파일을 열려면 다음을 입력하십시오.
edit exampleFileName.m
예제를 실행하려면 다음을 입력하십시오.
exampleFileName

다음 표에는 사용할 수 있는 BVP 예제 파일과, 이러한 예제 파일에서 사용하는 솔버 및 옵션 목록이 나와 있습니다.

예제 파일

사용된 솔버지정된 옵션

설명

예제 링크

emdenbvp

bvp4c 또는 bvp5c

  • 'SingularTerm'

엠덴 방정식(Emden's equation), 특이 BVP

특이 항을 갖는 BVP 풀기

fsbvp

bvp4c 또는 bvp5c

무한 구간의 포크너-스칸(Falkner-Skan) BVP

연속법(Continuation)을 사용하여 BVP 일관성 확인하기

mat4bvp

bvp4c 또는 bvp5c

마슈 방정식(Mathieu's equation)의 네 번째 고유함수

알 수 없는 파라미터가 있는 BVP 풀기

rcbvp

bvp4cbvp5c

  • 'FJacobian'

  • 'AbsTol'

  • 'RelTol'

  • 'Stats'

bvp4cbvp5c로 제어되는 오차를 비교하는 예제

bvp4c와 bvp5c 솔버 비교하기 (bvp4c)

bvp4c와 bvp5c 솔버 비교하기 (bvp5c)

shockbvp

bvp4c 또는 bvp5c

  • 'FJacobian'

  • 'BCJacobian'

  • 'Vectorized'

x = 0 근처에서 충격층을 포함하는 해

연속법(Continuation)을 사용하여 BVP 풀기

twobvp

bvp4c

정확히 2개의 해를 갖는 BVP

두 개의 해를 갖는 BVP 풀기

threebvp

bvp4c 또는 bvp5c

3점 경계값 문제

여러 경계 조건이 있는 BVP 풀기

참고 문헌

[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.

참고 항목

| | | | |