Main Content

ddeset

지연 미분 방정식(DDE) options 구조체 생성 또는 변경

구문

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

설명

options = ddeset('name1',value1,'name2',value2,...)는 명명된 속성이 지정된 값을 가지는 적분기 options 구조체인 options를 만듭니다. 지정되지 않은 속성은 디폴트 값을 가집니다. 속성을 고유하게 식별할 수 있는 선행 문자만 입력해도 됩니다. ddeset은 속성 이름의 대/소문자를 무시합니다.

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

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

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

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

DDE 속성

다음 섹션에서는 ddeset를 사용하여 설정할 수 있는 속성에 대해 설명합니다. 다음은 속성의 몇몇 범주입니다.

오차 제어 속성

각 스텝에서 DDE 솔버는 오차 e를 추정합니다. dde23 함수는 국소 절단 오차(Local Truncation Error)를 추정하며, 다른 솔버는 잔차(Residual)를 추정합니다. 어느 경우든 이 오차는 지정된 상대 허용오차 RelTol 및 지정된 절대 허용오차 AbsTol의 함수인 허용오차보다 작거나 같아야 합니다.

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

루틴 문제의 경우 솔버는 요청된 정확성과 대략 같은 정도의 정확성을 제공합니다. '긴' 구간을 적분하는 문제 및 적당히 불안정한 문제에 대해서는 정확성이 떨어집니다. 어려운 문제는 디폴트 값보다 더 엄밀한 허용오차를 요구할 수 있습니다. 상대 정확도를 위해서는 RelTol을 조정해야 합니다. 절대 허용오차의 경우 해 성분의 스케일링이 중요합니다. |y|AbsTol보다 다소 작은 경우 솔버는 y의 정확한 자릿수를 가져와야 하는 제약 조건을 적용받지 않습니다. 해 성분의 스케일을 확인하려면 문제를 두 번 이상 풀어야 할 수 있습니다.

일반적으로 이는 임계값 AbsTol(i)보다 작은 성분을 제외한 모든 해 성분에서 정확한 RelTol 자릿수가 필요한 경우일 수 있습니다. y(i)의 작은 성분에 관심이 없는 경우에도 더 관심이 있는 성분을 정확히 계산할 수 있도록 y(i)에서 정확한 자릿수를 가져올 만큼 충분히 작은 AbsTol(i)을 지정해야 할 수 있습니다.

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

DDE 오차 제어 속성

속성

설명

RelTol

양의 스칼라 {1e-3}

해 벡터 y의 모든 성분에 적용되는 상대 허용오차입니다. 이는 각 해 성분의 크기에 상대적인 오차의 측정값입니다. 일반적으로 이는 임계값 AbsTol(i)보다 작은 성분을 제외한 모든 해 성분에서 정확한 자릿수의 개수를 제어합니다. 디폴트 값인 1e-3은 0.1%의 정확도에 해당합니다.

각 적분 스텝에서 추정 오차는 |e(i)|max(RelTol*abs(y(i)),AbsTol(i))를 충족합니다.

AbsTol

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

해 벡터의 개별 성분에 적용되는 절대 허용오차입니다. AbsTol(i)는 임계값으로, 이보다 낮은 i번째 해 성분의 값은 중요하지 않습니다. 절대 허용오차는 해가 0에 도달할 때 정확성을 결정합니다. y(i)의 작은 성분에 관심이 없는 경우에도 더 관심이 있는 성분을 정확히 계산할 수 있도록 y(i)에서 정확한 자릿수를 가져올 만큼 충분히 작은 AbsTol(i)을 지정해야 할 수 있습니다.

AbsTol이 벡터인 경우 AbsTol의 길이는 해 벡터 y의 길이와 같아야 합니다. AbsTol이 스칼라인 경우 값은 y의 모든 성분에 적용됩니다.

NormControl

on | {off}

해의 노름에 상대적인 오차를 제어합니다. 이 속성을 on으로 설정하여 솔버가 norm(e)<= max(RelTol*norm(y),AbsTol)을 사용하여 각 적분 스텝에서 오차를 제어하도록 요청합니다. 기본적으로 솔버는 더 엄격한 성분별 오차 제어를 사용합니다.

솔버 출력 속성

솔버 출력 속성을 사용하여 솔버가 생성하는 출력값을 제어할 수 있습니다.

DDE 솔버 출력 속성

속성

설명

OutputFcn

함수 핸들 {@odeplot}

이 출력 함수는 모든 성공적인 적분 스텝 후에 솔버가 호출할 수 있는 함수입니다. 출력 함수를 지정하려면 'OutputFcn'을 함수 핸들로 설정해야 합니다. 예를 들면 다음과 같습니다.

options = ddeset('OutputFcn',...
@myfun)

이는 'OutputFcn'을 함수 myfun에 대한 핸들인 @myfun으로 설정합니다. 자세한 내용은 함수 핸들 생성하기 항목을 참조하십시오.

이 출력 함수는 다음과 같은 형식이어야 합니다.

status = myfun(t,y,flag)

함수를 파라미터화하기에는 필요한 경우 myfun에 추가 파라미터를 제공하는 방법이 설명되어 있습니다.

솔버는 지정된 출력 함수를 다음 플래그와 함께 호출합니다. 참고로, 호출 구문은 플래그에 따라 다릅니다. 함수는 적절히 응답해야 합니다.

  • init — 적분을 시작하기 전에 솔버가 myfun([tspan(1) tspan(end)],y0,'init')를 호출하여 출력 함수를 초기화합니다. 여기서 tspan은 솔버의 입력 인수입니다. y0은 해의 초기값(history(t0) 값 또는 initialY 옵션에 지정된 값)입니다.

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

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

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

이와 같은 범용 출력 함수를 사용하거나, 편집하여 자신만의 출력 함수를 만들 수 있습니다. 자세한 내용을 보려면 명령줄에 help functionname을 입력하십시오.

  • odeplot - 시계열 플로팅(출력 인수 없이 솔버를 호출하고 출력 함수를 지정하지 않은 경우의 디폴트 값)

  • odephas2 - 2차원 위상 평면 플로팅

  • odephas3 - 3차원 위상 평면 플로팅

  • odeprint - 솔버가 계산할 때 해 출력

OutputSel

인덱스 벡터

인덱스의 벡터로, 솔버가 출력 함수에 전달하는 해 벡터의 성분을 지정합니다. 예를 들어, odeplot 출력 함수를 사용하여 해의 첫 번째 성분과 세 번째 성분만 플로팅하려면 다음을 사용할 수 있습니다.

options = ddeset...
('OutputFcn',@odeplot,...
'OutputSel',[1 3]);

기본적으로 솔버는 해의 모든 성분을 출력 함수에 전달합니다.

Stats

on | {off}

솔버의 계산 통계량 표시 여부를 지정합니다. 기본적으로 Statsoff입니다. on인 경우 문제를 푼 후에 솔버에 다음이 표시됩니다.

  • 성공한 스텝 횟수

  • 실패한 시도 횟수

  • DDE 함수가 호출된 횟수

스텝 크기 속성

스텝 크기 속성을 통해 솔버가 시도하는 첫 번째 스텝의 크기를 지정할 수 있습니다. 이는 문제의 스케일을 더 잘 인식하는 데 잠재적으로 도움이 됩니다. 또한 각 후속 시간 스텝 크기의 경계를 지정할 수 있습니다.

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

DDE 스텝 크기 속성

속성

설명

InitialStep

양의 스칼라

제안된 초기 스텝 크기입니다. InitialStep은 솔버가 시도하는 첫 번째 스텝 크기의 상한을 설정합니다. InitialStep을 설정하지 않은 경우 솔버는 초기 시간 tspan(1)에서 해의 기울기에 따라 초기 스텝 크기를 지정합니다. 초기 스텝 크기는 최단 지연의 제한을 받습니다. 모든 해 성분의 기울기가 0인 경우에는 너무 큰 스텝 크기를 프로시저가 시도할 수 있습니다. 이런 경우에 해당하거나, 또는 솔버가 적분 시작 시 중요한 동작을 결정하게 하려는 경우에는, 적합한 InitialStep을 제공하여 코드 시작에 사용되도록 해야 합니다.

MaxStep

양의 스칼라
{0.1*
abs(t0-tf)
}

솔버 스텝 크기의 상한입니다. 미분 방정식에 주기 계수 또는 해가 있는 경우 MaxStep을 주기의 일정 비(예: 1/4)로 설정하는 것이 좋습니다. 그러면 솔버가 시간 스텝을 너무 크게 확대하지 않으며 관심 기간을 스텝 오버(건너뛰기)하지 않습니다. 다음의 경우 MaxStep을 줄이지 마십시오.

  • 해가 충분히 정확하지 않은 듯한 경우. 그 대신 상대 허용오차 RelTol을 줄이고 방금 계산한 해를 사용하여 절대 허용오차 벡터 AbsTol에 대한 적절한 값을 지정합니다. (허용오차 속성에 대한 설명은 오차 제어 속성 항목을 참조하십시오.)

  • 솔버가 시뮬레이션 구간 동안 한 번만 발생하는 일부 동작을 스텝 오버하지 않도록 하려는 경우. 변경이 발생하는 시간을 알고 있는 경우 시뮬레이션 구간을 둘로 분할하여 솔버를 두 번 호출합니다. 변경이 발생하는 시간을 모르는 경우에는 허용오차 RelTolAbsTol을 줄여 보십시오. MaxStep은 마지막 수단으로 사용합니다.

이벤트 위치 속성

일부 DDE 문제에서 특정 이벤트의 횟수는 중요합니다. 문제를 푸는 과정에서 솔버가 전환점의 위치를 사용자 정의 함수의 0부터 및/또는 0까지 지정하여 해당 이벤트를 발견할 수 있습니다.

다음 표에서는 Events 속성을 설명합니다.

DDE 이벤트 속성

속성

설명

Events

함수 핸들

이벤트 함수를 하나 이상 포함하는 함수 핸들입니다. dde23ddesd의 경우 이 함수는 다음 구문을 가집니다.

[value,isterminal,direction] = events(t,y,YDEL)

ddensd의 경우 구문은 다음과 같습니다.

[value,isterminal,direction] = events(t,y,YDEL,YPDEL)

출력 인수 value, isterminaldirectioni번째 요소가 i번째 이벤트 함수에 대응하는 벡터입니다.

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

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

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

    이벤트 함수를 지정하고 이벤트가 발견된 경우에는 솔버가 해 구조체 sol에 3개의 추가 필드를 반환합니다.

  • sol.xe는 이벤트가 발생하는 시간으로 구성된 행 벡터입니다.

  • sol.ye는 행렬로, 이 행렬의 열은 sol.xe의 시간에 대응하는 해 값입니다.

  • sol.ie는 벡터로, sol.xe의 대응하는 시간에 발생한 이벤트에 대한 인덱스를 요소로 가집니다.

상미분 방정식 문제를 푸는 데 이벤트 함수를 사용하는 예제를 보려면 ODE 이벤트 위치 항목을 참조하십시오.

불연속 속성

솔버 함수는 내역 또는 방정식 계수에 불연속이 있는 문제를 풀 수 있습니다. 다음 속성을 사용하여 해당 솔버에 서로 다른 초기값 및 (dde23의 경우) 알려진 불연속의 위치를 제공할 수 있습니다. 자세한 내용은 DDE에서의 불연속 항목을 참조하십시오.

다음 표에서는 불연속 속성을 설명합니다.

DDE 불연속 속성

속성

설명

Jumps

벡터

불연속의 위치입니다. 내역 또는 해가 저계 도함수(Low-order Derivative)에 비약 불연속(Jump Discontinuity)을 가질 수 있는 점 t입니다. 이는 dde23 솔버에만 적용됩니다.

InitialY

벡터

해의 초기값입니다. 기본적으로 해의 초기값은 초기 지점에서 history가 반환한 값입니다. InitialY 속성의 값으로 서로 다른 초기값을 제공합니다.

예제

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

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

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

ddeget(options,'RelTol')

ans =

  1.0000e-004

확장 기능

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

버전 내역

R2006a 이전에 개발됨

참고 항목

| | |