Main Content

odeset

ODE 및 PDE 솔버에 대한 options 구조체 생성 또는 수정

설명

예제

options = odeset(Name,Value,...)는 ODE 및 PDE 솔버에 대한 인수로 전달할 수 있는 options 구조체를 생성합니다. 이 options 구조체에서 명명된 옵션은 지정된 값을 가집니다. 모든 지정되지 않은 옵션은 디폴트 값을 가집니다. 예를 들어, options = odeset('RelTol',1e-3)RelTol1e-3으로 설정된 options 구조체를 반환합니다.

예제

options = odeset(oldopts,Name,Value,...)는 새로 지정된 이름-값 인수를 사용하여 기존 options 구조체 oldopts를 수정합니다. 이 경우 지정된 옵션의 이전 값이 모두 덮어쓰이고 새 옵션의 값이 구조체에 추가됩니다.

예제

options = odeset(oldopts,newopts)는 기존 options 구조체 oldopts를 새 options 구조체 newopts와 결합하여 수정합니다. []과 같지 않은 새 옵션은 모두 oldopts에서 대응되는 옵션을 덮어씁니다.

입력 인수가 없는 odeset은 가능한 옵션 이름과 이에 대한 가능한 값을 모두 표시합니다. 디폴트 값은 해당하는 경우 {}로 표시됩니다.

예제

모두 축소

RelTolAbsTol에 대한 값을 가지는 options 구조체를 만듭니다.

options = odeset('RelTol',1e-8,'AbsTol',1e-10);

기존 options 구조체에서 AbsTol의 값을 업데이트합니다.

options = odeset(options,'AbsTol',1e-9)
options = struct with fields:
              AbsTol: 1.0000e-09
                 BDF: []
              Events: []
         InitialStep: []
            Jacobian: []
           JConstant: []
            JPattern: []
                Mass: []
        MassSingular: []
            MaxOrder: []
             MaxStep: []
         NonNegative: []
         NormControl: []
           OutputFcn: []
           OutputSel: []
              Refine: []
              RelTol: 1.0000e-08
               Stats: []
          Vectorized: []
    MStateDependence: []
           MvPattern: []
        InitialSlope: []

두 options 구조체를 만듭니다.

opts_1 = odeset('RelTol',1e-8,'AbsTol',1e-9,'OutputFcn',@odeplot,'Stats','on');
opts_2 = odeset('Mass',@(t) [t 0; 0 -t],'MStateDependence','none',...
    'MassSingular','no','OutputFcn',@odephas2);

opts_2에 더 높은 선호도를 주어 options 구조체를 결합합니다. 두 구조체가 OutputFcn에 대해 다른 값을 가지므로 opts_2의 값이 opts_1의 값에 우선합니다.

opts = odeset(opts_1,opts_2)
opts = struct with fields:
              AbsTol: 1.0000e-09
                 BDF: []
              Events: []
         InitialStep: []
            Jacobian: []
           JConstant: []
            JPattern: []
                Mass: @(t)[t,0;0,-t]
        MassSingular: 'no'
            MaxOrder: []
             MaxStep: []
         NonNegative: []
         NormControl: []
           OutputFcn: @odephas2
           OutputSel: []
              Refine: []
              RelTol: 1.0000e-08
               Stats: 'on'
          Vectorized: []
    MStateDependence: 'none'
           MvPattern: []
        InitialSlope: []

입력 인수

모두 축소

기존 options 구조체로, odeset을 사용하여 이전에 생성된 구조체로 지정됩니다.

데이터형: struct

새 options 구조체로, odeset을 사용하여 이전에 생성된 구조체로 지정됩니다.

데이터형: struct

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: options = odeset('AbsTol',1e-3,'Reltol',1e-2,'Jacobian',@J,'Mass',M)은 절대 허용오차와 상대 허용오차에 대한 임계값, 야코비 행렬을 반환하는 함수, 그리고 숫자형 질량 행렬을 지정합니다.

오차 제어

모두 축소

상대 허용오차로, 'RelTol'과 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다. 이 허용오차는 각각의 해 성분 크기에 상대적인 오차를 측정합니다. 간단히 말해, 이는 절대 허용오차 AbsTol보다 작은 성분을 제외한 모든 해 성분에서 정확한 자릿수의 개수를 제어합니다.

각 스텝에서, ODE 솔버는 해의 i번째 성분에서 국소 오차 e를 추정합니다. 성공하려면, 상대 허용오차와 절대 허용오차에서 결정된 오차 범위를 둘 다 충족해야 합니다.

|e(i)| <= max(RelTol*abs(y(i)),AbsTol(i))

예: opts = odeset('RelTol',1e-5,'AbsTol',1e-7)

데이터형: single | double

절대 허용오차로, 'AbsTol'과 함께 양의 스칼라나 벡터가 쉼표로 구분되어 지정됩니다. 이 허용오차보다 작은 해의 값은 중요하지 않은 것으로 간주됩니다. 해 |y|AbsTol보다 작으면 솔버는 |y|의 정확한 자릿수를 구할 필요가 없습니다. 이러한 이유로, AbsTol의 값은 해 성분의 크기를 고려해야 합니다.

AbsTol이 벡터이면 해와 길이가 동일해야 합니다. AbsTol이 스칼라이면 값이 모든 해 성분에 적용됩니다.

각 스텝에서, ODE 솔버는 해의 i번째 성분에서 국소 오차 e를 추정합니다. 성공하려면, 상대 허용오차와 절대 허용오차에서 결정된 오차 범위를 둘 다 충족해야 합니다.

|e(i)| <= max(RelTol*abs(y(i)),AbsTol(i))

예: opts = odeset('RelTol',1e-5,'AbsTol',1e-7)

데이터형: single | double

해의 노름에 상대적인 오차 제어로, 'NormControl'과 함께 'on'이나 'off'가 쉼표로 구분되어 지정됩니다. NormControl'on'인 경우 솔버는 절댓값이 아닌 해의 노름을 사용하여 각 스텝에서 오차 e를 제어합니다.

norm(e(i)) <= max(RelTol*norm(y(i)),AbsTol(i))

예: opts = odeset('NormControl','on')

데이터형: char | string

솔버 출력값

모두 축소

음이 아닌 해 성분으로, 'NonNegative'와 함께 스칼라나 벡터가 쉼표로 구분되어 지정됩니다. 이 스칼라나 벡터는 어떤 해 성분이 음이 아니어야 하는지를 선택합니다.

참고

ode23sode15i에는 NonNegative를 사용할 수 없습니다. 또한 ode15s, ode23t, ode23tb에도, 질량 행렬이 있는 문제에는 사용할 수 없습니다.

예: opts = odeset('NonNegative',1)은 첫 번째 해 성분이 음이 아니어야 함을 지정합니다.

데이터형: single | double

출력 함수로, 'OutputFcn'과 함께 함수 핸들이 쉼표로 구분되어 지정됩니다. 각각의 성공한 시간 스텝 후, ODE 솔버는 출력 함수를 호출합니다. 출력값 없이 ODE 솔버를 호출하면 출력 함수가 기본적으로 @odeplot으로 설정됩니다. 이는 계산되는 모든 해 성분을 플로팅합니다. 그렇지 않은 경우 디폴트는 []입니다.

다음은 OutputFcn에 사용할 수 있는 내장 출력 함수입니다.

함수 이름설명
odeplot시간에 대한 모든 해 성분 플로팅
odephas2처음 2개 해 성분에 대한 2차원 위상 평면 플롯
odephas3처음 3개 해 성분에 대한 3차원 위상 평면 플롯
odeprint해와 시간 스텝 출력

사용자 지정 출력 함수를 작성하는 경우 다음과 같은 형식이어야 합니다.

status = myOutputFcn(t,y,flag)

또한, 출력 함수는 다음 플래그에 적절히 대응해야 합니다.

플래그설명
'init'

적분을 시작하기 전에, 출력 함수가 초기화될 수 있도록 솔버는 myOutputFcn([tspan(1) tspan(end)],y0,'init')를 호출합니다. 여기서 tspany0은 ODE 솔버에 대한 입력 인수입니다.

[]

출력값이 요청된 각 적분 스텝 후에 솔버가 status = myOutputFcn(t,y,[])을 호출합니다. 여기서 t에는 해당 스텝 동안 출력값이 생성된 점이 포함되고, y에는 t에 있는 점의 수치 해가 포함됩니다. t가 벡터인 경우 yi번째 열은 ti번째 요소에 대응합니다.

  • length(tspan) > 2이면 tspan의 모든 지점에서 출력값이 생성됩니다.

  • length(tspan) = 2이면 Refine 옵션에 따라 출력값이 생성됩니다.

myOutputFcn은 상태값 0 또는 1을 반환해야 합니다. status = 1인 경우에는 솔버가 적분을 중단합니다. 이 메커니즘을 사용하여 중지 버튼을 구현하는 등의 작업을 할 수 있습니다.

'done'

적분이 완료될 때 솔버가 myOutputFcn([],[],'done')을 호출하여 출력 함수가 정리 작업을 수행할 수 있게 합니다.

데이터형: function_handle

출력 함수에 대해 선택된 성분 항목으로, 'OutputSel'과 함께 인덱스 벡터가 쉼표로 구분되어 지정됩니다. 이 벡터는 출력 함수에 전달할 해의 성분을 지정합니다.

예: opts = odeset('OutputFcn',@myFcn,'OutputSel',[1 3])은 출력 함수에 해의 첫 번째 성분과 세 번째 성분을 전달합니다.

해 세분화 인자로, 'Refine'과 함께 스칼라가 쉼표로 구분되어 지정됩니다. 이 스칼라는 각 스텝에서 출력 지점의 개수가 몇 배만큼 늘어나야 되는지를 알리는 인자를 지정합니다.

대부분의 솔버에 대한 Refine의 디폴트 값은 1이지만, ode45는 디폴트 값 4를 사용하고, ode78ode89는 디폴트 값 8을 사용합니다. 이들 솔버는 큰 스텝을 취하는 경향성을 보완하기 위해 더 큰 디폴트 값을 사용합니다.

  • 세분화 인자가 1인 경우 솔버는 각 스텝의 끝에서만 해를 반환합니다.

  • 세분화 인자가 n > 1인 경우 솔버는 각 스텝을 n개 더 적은 구간으로 세분화하고 각 지점에서 해를 반환합니다.

세분화 인자에 대해 추가로 생성된 값은 연속적 확장 공식을 통해 계산됩니다. 이는 계산 시간을 크게 늘리지 않으면서 계산이 이루어지는 시간 스텝 사이에 정확한 해를 구할 목적으로 ODE 솔버에서 사용하는 특화된 식입니다.

참고

length(tspan) > 2인 경우나 ODE 솔버가 구조체로 해를 반환하는 경우에는 Refine이 적용되지 않습니다.

예: opts = odeset('Refine',5)는 출력 점의 개수를 5배만큼 늘립니다.

솔버 통계량으로, 'Stats'와 함께 'on'이나 'off'가 쉼표로 구분되어 지정됩니다. 'on'을 지정한 경우 솔버는 해를 구한 후 다음과 같은 정보를 표시합니다.

  • 성공한 스텝 횟수

  • 실패한 시도 횟수

  • f(t,y)를 계산하기 위해 ODE 함수가 호출된 횟수

음함수 솔버는 해에 대한 다음 추가 정보를 표시합니다.

  • 편도함수 행렬 f/y가 구성된 횟수

  • LU 분해 횟수

  • 선형 시스템의 해 개수

예: opts = odeset('Stats','on')

데이터형: char | string

스텝 크기

모두 축소

제안된 초기 스텝 크기로, 'InitialStep'과 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다. InitialStep은 솔버가 시도하는 첫 번째 스텝 크기의 상한을 설정합니다.

초기 스텝 크기를 지정하지 않은 경우 솔버는 초기 시간 지점 tspan(1)에서 해의 기울기에 따라 초기 스텝 크기를 지정합니다. 모든 해 성분의 기울기가 0인 경우에는 너무 큰 스텝 크기를 솔버가 시도할 수 있습니다. 이러한 상황이 발생한 것을 감지한 경우나 솔버가 적분 시작 시 중요한 동작을 확인하도록 하려면 InitialStep을 사용하여 적절한 초기 스텝 크기를 제공하십시오.

예: opts = odeset('InitialStep',1e-3)은 초기 스텝 크기에 대한 상한으로 1e-3을 설정합니다.

최대 스텝 크기로, 'MaxStep'과 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다. MaxStep은 솔버가 취하는 스텝 크기에 대한 상한을 설정합니다. 예를 들어, 수식에 주기적인 동작이 있는 경우 MaxStep을 그 주기의 분수값으로 설정하면 솔버가 관심 영역을 건너 뛸 정도로 크게 스텝을 확대하지 않습니다.

  • 단순히 더 많은 출력 지점을 구할 목적으로 MaxStep을 사용하지는 마십시오. 이렇게 하면 적분이 상당히 느려질 수 있습니다. 대신, Refine 옵션을 사용하십시오. 그러면 낮은 계산 비용으로 추가 지점을 계산할 수 있습니다.

  • 해의 정확성을 높이기 위한 목적으로 MaxStep을 사용하지 마십시오. 해의 정확성이 충분히 높지 않다면 RelTol 값을 줄이고 해를 사용하여 AbsTol에 적합한 값을 파악하십시오.

  • 적분 구간에서 한 번만 발생하는 일부 동작을 솔버가 건너 뛰지 못하게 할 목적으로 MaxStep을 사용하지는 마십시오. 동작이 발생하는 시간을 알고 있는 경우 구간을 둘로 분할하여 솔버를 두 번 호출합니다. 이러한 동작이 발생하는 시간을 모르는 경우에는 RelTolAbsTol을 줄여 보십시오. 이 경우 MaxStep은 최후의 수단으로만 사용하십시오.

예: opts = odeset('MaxStep',1e-2)

이벤트 위치

모두 축소

이벤트 함수로, 'Events'와 함께 함수 핸들(예: @myEventsFcn)이 쉼표로 구분되어 지정됩니다.

함수 시그니처

ODE: 함수 핸들로 지정된 이벤트 함수의 일반적인 형식은 다음과 같아야 합니다.

[value,isterminal,direction] = myEventsFcn(t,y)

PDE: 함수 핸들로 지정된 이벤트 함수의 일반적인 형식은 다음과 같아야 합니다.

[value,isterminal,direction] = myEventsFcn(m,t,xmesh,umesh)

두 경우 모두 value, isterminal, directioni번째 요소가 i번째 이벤트 함수에 대응하는 벡터입니다.

  • value(i)i번째 이벤트 함수의 값입니다.

  • 이 이벤트 함수의 0에서 적분이 종료되는 경우에는 isterminal(i) = 1입니다. 그렇지 않은 경우에는 0입니다.

  • 모든 0을 찾으려는 경우에는 direction(i) = 0(디폴트 값)입니다. +1 값은 이벤트 함수가 증가하는 곳의 0만 찾고, -1은 이벤트 함수가 감소하는 곳의 0만 찾습니다.

이벤트 함수에 추가 입력값을 전달하는 방법을 보려면 함수를 파라미터화하기 항목을 참조하십시오.

이벤트 출력

이벤트 함수를 지정하는 경우 다음과 같이 세 개의 추가 출력 인수를 사용하여 솔버를 호출할 수 있습니다.

[t,y,te,ye,ie] = odeXY(odefun,tspan,y0,options)

솔버에서 반환하는 3개의 추가 출력값은 감지된 이벤트에 대응됩니다.

  • te는 이벤트가 발생한 시간으로 구성된 열 벡터입니다.

  • yete의 이벤트 시간에 대응되는 해 값입니다.

  • ie는 이벤트 함수가 반환하는 벡터에 대한 인덱스입니다. 이러한 값은 솔버가 감지한 이벤트를 나타냅니다.

또는, 다음과 같이 단일 출력값을 사용하여 솔버를 호출할 수도 있습니다.

sol = odeXY(odefun,tspan,y0,options)

이 경우, 이벤트 정보는 구조체에 sol.te, sol.ye, sol.ie로 저장됩니다.

진단

ODE/PDE 솔버에서 이벤트 함수와 함께 사용하는 근 구하기 메커니즘에는 다음과 같은 제한 사항이 있습니다.

  • 적분의 첫 번째 스텝에서 종료 이벤트가 발생하면 솔버가 이 이벤트를 종료 이벤트가 아닌 것으로 등록하고 적분을 계속합니다.

  • 첫 번째 스텝에서 둘 이상의 종료 이벤트가 발생할 경우 첫 번째 이벤트만 등록되고 솔버가 적분을 계속합니다.

  • 0은 스텝 간 부호 교차 지점으로 결정됩니다. 따라서, 스텝 간 부호 교차 지점이 짝수 개인 경우 0을 놓칠 수 있습니다.

솔버 스텝이 이벤트를 지나치는 경우 RelTolAbsTol을 줄여 정확도를 높여 보십시오. 또는, MaxStep을 설정하여 스텝 크기에 상한을 적용하십시오. tspan을 조정해도 솔버에서 취하는 스텝은 변경되지 않습니다.

예제

  • 공이 튀어 오르는 것과 천체의 궤도를 감지하는 ODE 이벤트 함수의 예제는 ODE 이벤트 위치 항목을 참조하십시오.

  • 진동하는 해의 영점교차를 감지하는 PDE 이벤트 함수의 예제는 이벤트 기록으로 진동 PDE 풀기 항목을 참조하십시오.

데이터형: function_handle

야코비 행렬(Jacobian Matrix)

모두 축소

야코비 행렬로, 'Jacobian'과 함께 야코비 행렬을 계산하는 행렬, 셀형 배열 또는 함수가 쉼표로 구분되어 지정됩니다. 야코비 행렬은 미분 방정식을 정의하는 함수의 편도함수로 구성된 행렬입니다.

J=fy=[f1y1f1y2f2y1f2y2]

야코비 행렬은 fy에 대해 계산된 값이 있는 상수 행렬 또는 일반적인 형식을 갖는 행렬 요소 계산 함수로 지정할 수 있습니다.

dfdy = Fjac(t,y)

경직성(Stiff) ODE 솔버(ode15s, ode23s, ode23t, ode23tb, ode15i)의 경우 야코비 행렬에 대한 정보를 제공하는 것이 안정성과 효율성적인 측면에서 매우 중요합니다. 야코비 행렬을 제공하지 않을 경우, ODE 솔버가 유한 차분을 사용하여 수치적으로 야코비 행렬의 근사치를 계산합니다.

ode15i에만 해당: Jacobian 옵션은 fyfy' 모두에 대한 행렬을 지정해야 합니다. 이들 행렬은 2개의 상수 행렬로 구성된 셀형 배열 {fy,fy'}로 제공하거나 다음과 같은 일반적인 형식을 갖는 행렬 계산 함수로 제공할 수 있습니다.

[dfdy, dfdp] = Fjac(t,y,yp)

해석적 야코비 행렬 전체를 제공하기가 힘든 매우 큰 시스템의 경우, JPattern 속성을 사용하여 야코비 행렬의 희소성 패턴을 전달하십시오. 솔버는 희소성 패턴을 사용하여 희소 형식의 야코비 행렬을 계산합니다.

예: opts = odeset('Jacobian',@Fjac)는 야코비 행렬을 계산하는 함수 Fjac를 지정합니다.

예: opts = odeset('Jacobian',[0 1; -2 1])은 상수 야코비 행렬을 지정합니다.

예: opts = odeset('Jacobian',{A,Ap})ode15i에 사용할 2개의 상수 야코비 행렬을 지정합니다.

데이터형: single | double | cell | function_handle

야코비 행렬의 희소성 패턴으로, 'JPattern'과 함께 희소 행렬이 쉼표로 구분되어 지정됩니다. 희소 행렬은 1을 포함하며, 이때 야코비 행렬에는 0이 아닌 요소가 있을 수 있습니다. ODE 솔버는 희소성 패턴을 사용하여 희소 형식의 야코비 행렬을 수치적으로 생성합니다. 연립 ODE의 크기가 커서 해석적 야코비 행렬을 제공할 수 없는 경우 이 옵션을 사용하면 실행 시간을 향상시킬 수 있습니다.

ode15i에만 해당: 2개의 희소 행렬을 포함하는 셀형 배열 {dfdyPattern, dfdypPattern}을 사용하여 JPattern 옵션을 설정하십시오. 여기서 2개의 희소 행렬은 fyfy'에 대한 희소성 패턴을 나타냅니다.

참고

Jacobian을 사용하여 야코비 행렬을 지정할 경우 솔버는 JPattern에 대한 설정을 모두 무시합니다.

예: opts = odeset('JPattern',S)는 희소 행렬 S를 사용하여 야코비 행렬의 희소성 패턴을 지정합니다.

예: opts = odeset('JPattern',{dFdy, dFdyp})ode15i에 사용할 상수 야코비 행렬의 희소성 패턴 2개를 지정합니다.

데이터형: double | cell

벡터화된 함수 토글로, 'Vectorized'와 함께 'off''on'이 쉼표로 구분되어 지정됩니다. 이 옵션을 사용하여 ODE 솔버에 함수가 두 번째 인수를 받고 이 인수에 대해 벡터를 반환하도록 작성되었음을 알릴 수 있습니다. 즉, f(t,[y1 y2 y3...])[f(t,y1) f(t,y2) f(t,y3) ...]을 반환합니다. 한 번에 하나씩 값을 계산하는 것에 비해, 이렇게 벡터화를 통해 솔버가 야코비 행렬의 모든 열을 계산하는 데 필요한 함수 실행 횟수를 줄이고 해를 구하는 시간을 크게 단축할 수 있습니다. 벡터화를 지원하는 요소별 연산자에 대한 설명은 배열 연산과 행렬 연산 항목을 참조하십시오.

ode15i에만 해당: 요소를 2개 가진 셀형 배열을 사용하여 Vectorized 옵션을 설정하십시오. f(t,[y1,y2,...],yp)[f(t,y1,yp), f(t,y2,yp), ...]를 반환하면 첫 번째 요소를 'on'으로 설정하십시오. f(t,y,[yp1,yp2,...])[f(t,y,yp1), f(t,y,yp2), ...]를 반환할 경우에는 두 번째 요소를 'on'으로 설정하십시오. 이 경우 Vectorized의 디폴트 값은 {'off','off'}입니다.

참고

Jacobian을 사용하여 야코비 행렬을 지정할 경우 솔버는 Vectorized에 대한 'on' 설정을 무시합니다.

예: opts = odeset('JPattern',S,'Vectorized','on')은 함수가 벡터화되고 야코비 행렬의 희소성 패턴을 설정하도록 지정합니다.

예: opts = odeset('JPattern',{dy,dyp},'Vectorized',{'on','on'})은 함수가 yyp에 대해 벡터화되고 ode15i에 사용할 야코비 행렬의 희소성 패턴도 설정하도록 지정합니다.

데이터형: char | cell | string

질량 행렬과 DAE(ode15i에는 적용되지 않음)

모두 축소

질량 행렬로, 'Mass'와 함께 행렬이나 함수 핸들이 쉼표로 구분되어 지정됩니다. ODE 솔버는 M(t,y)y'=f(t,y) 형식의 질량 행렬을 포함하는 문제를 풀 수 있습니다. 여기서 M(t,y)는 비희소(Full) 형식이거나 희소 형식일 수 있는 질량 행렬입니다(ode23s 솔버는 상수 질량 행렬로 구성된 방정식만 풀 수 있음).

  • 질량 행렬이 정칙 행렬인 경우, 이 방정식은 y'=M1f(t,y)로 단순화되며 ODE는 모든 초기값에 대한 해를 가집니다. 하지만, M(t,y)y'=f(t,y)를 사용하여 모델을 질량 행렬로 직접 나타내는 것이 더욱 간편하고 자연스러운 경우가 많으며, 역행렬 계산을 수행하지 않으면 문제를 푸는 데 필요한 저장 공간과 실행 시간이 줄어듭니다.

  • M(t,y)가 특이 행렬인 경우, 이 문제는 연립 미분대수 방정식(DAE)입니다. DAE는 y0이 일관된 경우, 즉 M(t0,y0)yp0 = f(t0,y0)을 만족하는 하는 초기 기울기 yp0이 존재하는 경우에만 해를 가집니다. 여기서 yp0InitialSlope 옵션을 사용하여 지정됩니다. DAE는 이에 상응하는 연립 ODE로 이 시스템을 단순화하는 데 필요한 도함수의 개수를 나타내는 DAE의 미분 지수로 특징지을 수 있습니다. 인덱스 1의 DAE의 경우, 모순 없는 초기 조건을 갖는 초기값 문제를 푸는 것은 ODE를 푸는 것과 매우 비슷합니다. ode15s 솔버와 ode23t 솔버는 인덱스 1의 DAE를 풀 수 있습니다. DAE를 풀 때는, 질량 행렬이 대각 행렬(반명시적(semi-explicit) DAE)이 되도록 문제를 만드는 것이 유리합니다.

모든 경우를 통틀어, 시간 종속적이거나 상태 종속적인, 즉 일정하지 않은 질량 행렬에는 추가 옵션을 사용해야 합니다.

  • M(t)y'=f(t,y) 형식의 문제에는 MStateDependence 옵션을 'none'으로 설정합니다. 그러면 솔버가 t에 대한 단일 입력 인수를 사용하여 질량 행렬 함수를 호출합니다.

  • 질량 행렬이 y에 종속적이면 MStateDependence'weak'(디폴트 값)나 'strong'으로 설정합니다. 두 경우 모두 솔버가 2개의 입력값 (t,y)를 사용하여 질량 행렬 함수를 호출하지만, 'weak' 옵션을 설정하면 대수방정식을 풀 때 음함수 솔버가 근삿값을 사용합니다.

  • 시스템에 상태 종속성이 강한 질량 행렬 M(t,y)를 갖는 방정식이 많이 있는 경우, MvPattern을 희소 행렬 S로 설정하여 희소성 패턴을 지정합니다.

예: 예제 파일 fem2odebatonode에서는 질량 행렬에 대한 각기 다른 여러 사용법을 보여줍니다.

데이터형: single | double | function_handle

질량 행렬의 상태 종속성으로, 'MStateDependence와 함께 'weak', 'strong', 'none' 중 하나가 쉼표로 구분되어 지정됩니다.

  • M(t)y'=f(t,y) 형식의 문제에는 MStateDependence 옵션을 'none'으로 설정합니다. 그러면 솔버가 t에 대한 단일 입력 인수를 사용하여 질량 행렬 함수를 호출합니다.

  • 질량 행렬이 y에 종속적이면 MStateDependence'weak'(디폴트 값)나 'strong'으로 설정합니다. 두 경우 모두 솔버가 2개의 입력값 (t,y)를 사용하여 질량 행렬 함수를 호출하지만, 'weak' 옵션을 설정하면 대수방정식을 풀 때 음함수 솔버가 근삿값을 사용합니다.

예: opts = odeset('Mass',@M,'MStateDependence','none')은 질량 행렬 Mt에만 종속되도록 지정합니다.

데이터형: char | string

질량 행렬의 희소성 패턴으로, 'MvPattern'과 함께 희소 행렬이 쉼표로 구분되어 지정됩니다. 이 옵션을 사용하여 행렬 y[M(t,y)v]의 희소성 패턴을 지정합니다. 희소 행렬 S는 임의의 k에 대해 M(t,y)(i,k) 성분이 y의 성분 j에 따라 달라지는 경우 S(i,j) = 1이 됩니다.

참고

MStateDependence'strong'인 경우 MvPatternode15s, ode23tode23tb에서 사용합니다.

예: opts = odeset('MStateDependence','strong','MvPattern',S)

특이 질량 행렬 토글로, 'MassSingular'와 함께 'maybe', 'yes', 'no' 중 하나로 쉼표로 구분되어 지정됩니다. 디폴트 값 'maybe'로 설정하면 솔버는 질량 행렬이 특이 행렬인지 테스트하여 문제가 DAE인지 여부를 테스트합니다. 시스템이 DAE임을 알고 있는 경우에는 'yes'를 지정하고, 시스템이 DAE가 아닌 경우에는 'no'를 지정하여 이 확인 작업을 수행하지 마십시오.

데이터형: char | string

일관된 초기 기울기로, 'InitialSlope'와 함께 벡터가 쉼표로 구분되어 지정됩니다. DAE를 풀 때는 ode15s 솔버와 ode23t 솔버에 이 옵션을 사용하십시오. 지정된 벡터는 M(t0,y0)y'0=f(t0,y0)을 충족하는 초기 기울기 y'0이 됩니다. 지정된 초기 조건에 모순이 있으면 솔버는 이들을 추측값으로 처리하고, 추측값에 가까운 모순 없는 값을 계산하려고 시도하면서 계속 문제를 풉니다.

데이터형: single | double

ode15sode15i에만 해당

모두 축소

식의 최대 차수로, 'MaxOrder'와 함께 15 사이의 정수가 쉼표로 구분되어 지정됩니다. 이 옵션을 사용하여 가변 차수 솔버 ode15sode15i가 사용하는 수치 미분 공식(NDF)이나 후진 미분 공식(BDF)에 사용되는 최대 차수를 지정합니다.

ode15s에 사용할 후진 미분 공식(BDF) 토글로, 'BDF'와 함께 'off''on'이 쉼표로 구분되어 지정됩니다. 디폴트 수치 미분 공식(NDF)이 일반적으로 BDF보다 더 효율적이지만, 이 두 공식은 서로 밀접하게 연관되어 있습니다.

예: opts = odeset('BDF','on','MaxOrder',4)는 최대 차수가 4인 BDF를 ode15s가 사용할 수 있도록 설정합니다.

데이터형: char | string

출력 인수

모두 축소

options 구조체입니다. optionsode45, ode23, ode113, ode15s, ode23s, ode23t, ode23tb, 또는 ode15i의 네 번째 입력 인수로 사용할 수 있습니다.

확장 기능

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

버전 내역

R2006a 이전에 개발됨