Main Content

bvpset

경계값 문제(Boundary Value Problem)의 options 구조체 생성 또는 변경

구문

options = bvpset('name1',value1,'name2',value2,...)
options = bvpset(oldopts,'name1',value1,...)
options = bvpset(oldopts,newopts)
bvpset

설명

options = bvpset('name1',value1,'name2',value2,...)는 경계값 문제 솔버 bvp4c에 제공할 수 있는 구조체 options를 만듭니다. 이 솔버에는 명명된 속성의 값이 지정되어 있습니다. 지정되지 않은 속성은 디폴트 값이 유지됩니다. 모든 속성에 대해 속성을 고유하게 식별할 수 있는 선행 문자만 입력해도 됩니다. bvpset은 속성 이름의 대/소문자를 무시합니다.

options = bvpset(oldopts,'name1',value1,...)은 기존 options 구조체 oldopts를 변경합니다. 이 경우 이름/값 쌍으로 지정된 oldopts의 값이 모두 덮어쓰이고, 수정된 구조체가 출력 인수로 반환됩니다.

options = bvpset(oldopts,newopts)는 기존 options 구조체 oldopts를 새 options 구조체 newopts와 결합합니다. newopts에 설정된 모든 값은 oldopts의 대응값을 덮어씁니다.

입력 인수가 없는 bvpset은 모든 속성 이름과 해당 속성의 가능한 값을 표시하며 디폴트 값은 중괄호 {}로 나타냅니다.

함수 bvpget을 사용하여 options 구조체에서 특정 속성의 값을 쿼리할 수 있습니다.

BVP 속성

bvpset을 사용하면 경계값 문제 솔버 bvp4c의 속성을 지정할 수 있습니다. 다음과 같은 여러 범주의 속성을 설정할 수 있습니다.

허용오차(Error Tolerance) 속성

bvp4c는 선점(Collocation) 식을 사용하기 때문에, 수치 해는 연결 방정식(Collocation Equation)을 충족하는 점의 메시를 기반으로 합니다. 메시 선택과 오차 제어는 이 해의 잔차(Residual)를 기준으로 하며, 계산된 해 S(x)는 섭동 문제(Perturbed Problem) S′(x) = f(x,S(x)) + res(x)의 엄밀해(Exact Solution)입니다. 메시의 각 하위 구간에서, 해 res(i)i번째 성분에 있는 잔차의 노름(Norm)이 추정되며, 이 노름은 허용오차보다 작거나 같아야 합니다. 이 허용오차는 사용자가 정의하는 상대 허용오차 RelTol과 절대 허용오차 AbsTol의 함수입니다.

(res(i)/max(abs(f(i)),AbsTol(i)/RelTol))RelTol

다음 표에서는 허용오차 속성을 설명합니다.

BVP 허용오차 속성

속성

설명

RelTol

양의 스칼라 {1e-3}

잔차 벡터의 모든 성분에 적용되는 상대 허용오차입니다. f(x,y)의 크기에 상대적인 잔차의 측정값입니다. 디폴트 값인 1e-3은 0.1%의 정확도에 해당합니다.

계산된 해 S(x)는 S′(x) = F(x,S(x)) + res(x)의 엄밀해(Exact Solution)입니다. 메시의 각 하위 구간에서 잔차 res(x)는 다음을 충족시킵니다.

(res(i)/max(abs(F(i)),AbsTol(i)/RelTol))RelTol

AbsTol

양의 스칼라 또는 벡터 {1e-6}

잔차 벡터의 대응하는 성분에 적용되는 절대 허용오차입니다. AbsTol(i)은 임계값으로, 이보다 낮게 대응하는 성분의 값은 중요하지 않습니다. 스칼라 값으로 지정할 경우 모든 성분에 적용됩니다.

벡터화

다음 표에서는 BVP 벡터화 속성을 설명합니다. bvp4c에 사용되는 ODE 함수의 벡터화 방법은 ODE 솔버에 사용되는 벡터화 방법과 다릅니다.

  • bvp4c의 경우 첫 번째 인수는 물론 두 번째 인수에 대해서도 ODE 함수를 벡터화해야 하므로 F([x1 x2 ...],[y1 y2 ...])[F(x1,y1) F(x2,y2)...]를 반환합니다.

  • bvp4c의 경우 해석적 야코비 행렬이 제공되는 경우에도 벡터화가 유용합니다. 경직성 ODE 솔버(Stiff ODE Solver)의 경우 해석적 야코비 행렬이 사용되는 경우 벡터화가 무시됩니다.

벡터화 속성

속성

설명

Vectorized

on | {off}

이 속성을 on으로 설정하고 ODE 함수 F를 코딩하면 bvp4c를 통해 F([x1 x2 ...],[y1 y2 ...])[F(x1,y1) F(x2,y2) ...]로 반환됩니다. 즉, ODE 함수에서, 열 벡터로 구성된 배열 전체를 한 번에 솔버로 전달할 수 있습니다. 따라서 솔버의 함수 실행 횟수를 줄이고, 해를 구하는 시간을 크게 단축할 수 있습니다.

MATLAB® 배열 표기법에서는 일반적으로 ODE 함수를 쉽게 벡터화할 수 있습니다. 앞서 소개한 shockbvp 예제에서 shockODE 함수는 콜론 표기법을 첨자에 사용하고 배열 곱셈 연산자(.*)를 사용하여 벡터화되었습니다.

function dydx = shockODE(x,y,e)
pix = pi*x;
dydx = [ y(2,:)... 
-x/e.*y(2,:)-pi^2*cos(pix)-
pix/e.*sin(pix)];

해석적 편도함수(Analytical Partial Derivative)

기본적으로 bvp4c 솔버는 차이가 유한한 모든 편도함수의 근사치를 계산합니다. 미분 방정식의 해석적 편도함수 ∂f/∂y와 경계 조건의 해석적 편도함수 ∂bc/∂ya와 ∂bc/∂yb를 제공하면 bvp4c가 보다 효율적으로 실행됩니다. 알 수 없는 파라미터와 관련된 문제의 경우 파라미터에 대해 편도함수 ∂f/∂p와 편도함수 ∂bc/∂p를 제공해야 합니다.

다음 표에서는 해석적 편도함수 속성을 설명합니다.

BVP 해석적 편도함수 속성

속성

설명

FJacobian

함수 핸들

f(x,y)의 해석적 편도함수를 계산하는 함수 핸들입니다. y′ = f(x,y)를 풀 때 dfdy = fjac(x,y)가 야코비 행렬 ∂f/∂y를 실행하는 경우라면 이 속성을 @fjac로 설정합니다. 알 수 없는 파라미터 p와 관련된 문제의 경우, [dfdy,dfdp] = fjac(x,y,p)는 편도함수 ∂f/∂p를 반환해야 합니다. 상수 편도함수(Constant Partial Derivative)가 있는 문제의 경우라면 이 속성을 dfdy의 값 또는 셀형 배열 {dfdy,dfdp}로 설정합니다.

BCJacobian

함수 핸들

bc(ya,yb)의 해석적 편도함수를 계산하는 함수 핸들입니다. [dbcdya,dbcdyb] = bcjac(ya,yb)가 편도함수 ∂bc/∂ya와 편도함수 ∂bc/∂yb를 실행하는 경우라면 경계 조건 bc(ya,yb)에 대해 이 속성을 @bcjac로 설정합니다. 알 수 없는 파라미터 p와 관련된 문제의 경우, [dbcdya,dbcdyb,dbcdp] = bcjac(ya,yb,p)는 편도함수 ∂bc/∂p를 반환해야 합니다. 상수 편도함수가 있는 문제의 경우라면 이 속성을 셀형 배열 {dbcdya,dbcdyb} 또는 셀형 배열 {dbcdya,dbcdyb,dbcdp}로 설정합니다.

특이 BVP(Singular BVP)

bvp4c

y=Syx+f(x,y,p)

형식이고 구간 [0,b]에 있는 특이 문제(Singular Problem)를 풀 수 있습니다. 여기서 b > 0입니다. 이러한 문제의 경우 상수 행렬(Constant Matrix) S를 SingularTerm의 값으로 지정합니다. 이 형식의 방정식에서 odefun은 f(x,y,p) 항만 실행합니다. 여기서 p는 알 수 없는 파라미터(있는 경우)를 나타냅니다.

특이 BVP(Singular BVP) 속성

속성

설명

SingularTerm

상수 행렬

특이 BVP의 특이 항(Singular Term)입니다. 다음 형식의 방정식에 대해 상수 행렬 S로 설정합니다.

y=Syx+f(x,y,p)

형식이고 구간 [0,b]에 있는 특이 문제(Singular Problem)를 풀 수 있습니다. 여기서 b > 0입니다.

메시 크기(Mesh Size) 속성

bvp4c는 연립대수방정식을 풀어 각 메시 점에서의 BVP에 대한 수치 해를 구합니다. 연립대수방정식의 크기는 미분 방정식의 개수(n)와 현재 메시의 메시 점 개수(N)에 따라 결정됩니다. 허용된 메시 점 개수가 소진되면 계산이 중지되며, bvp4c가 경고 메시지를 표시하고 그때까지 찾은 해를 반환합니다. 이 해는 허용오차를 충족하지 않지만 완화된 허용오차, 또는 증가된 Nmax 값을 사용한 계산에 사용할 훌륭한 초기 추측값을 제공할 수도 있습니다.

다음 표에서는 메시 크기 속성을 설명합니다.

BVP 메시 크기 속성

속성

설명

Nmax

양의 정수 {floor(1000/n)}

BVP의 해를 구할 때 허용되는 최대 메시 점 개수입니다. 여기서 n은 문제의 미분 방정식 개수입니다. Nmax의 디폴트 값은 연립대수방정식의 크기를 약 1,000개의 방정식으로 제한합니다. 여러 개의 미분 방정식으로 이루어진 연립방정식의 경우 Nmax의 디폴트 값은 정확한 해를 구하기에 충분해야 합니다.

해 통계량(Solution Statistic) 속성

Stats 속성을 사용하면 해 통계량을 확인할 수 있습니다.

다음 표에서는 해 통계량 속성을 설명합니다.

BVP 해 통계량(BVP Solution Statistic) 속성

속성

설명

Stats

on | {off}

계산과 관련된 통계량을 표시할지 여부를 지정합니다. stats 속성이 on이면 bvp4c는 문제를 푼 후에 다음을 표시합니다.

  • 메시의 점 개수

  • 해의 최대 잔차(Maximum Residual Of The Solution)

  • f(x,y)를 실행하기 위해 미분 방정식 함수 odefun을 호출한 횟수

  • bc(y(a),y(b))를 실행하기 위해 경계 조건 함수 bcfun을 호출한 횟수

예제

bvp4c의 상대 허용오차를 디폴트 값 1e-3에서 1e-4로 변경하는 options 구조체를 만들려면 다음을 입력합니다.

options = bvpset('RelTol',1e-4);

'RelTol'의 값을 options에서 복구하려면 다음을 입력합니다.

bvpget(options,'RelTol')

ans =

  1.0000e-004

확장 기능

스레드 기반 환경
MATLAB®의 backgroundPool을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool을 사용해 코드 실행 속도를 높일 수 있습니다.

버전 내역

R2006a 이전에 개발됨

참고 항목

| | | |