Main Content

ddesd

일반 지연의 지연 미분 방정식(DDE) 풀기

구문

sol = ddesd(ddefun,delays,history,tspan)
sol = ddesd(ddefun,delays,history,tspan,options)

인수

ddefun

미분 방정식 y′(t) = f(t,y(t),y(d(1),...,y(d(k)))의 우변을 구하는 함수 핸들입니다. 이 함수는 다음과 같은 형식이어야 합니다.

dydt = ddefun(t,y,Z)

여기서 t는 현재 t에 대응하고, y는 y(t)의 근삿값 열 벡터이고, Z(:,j)delays(t,y)의 성분 j로 주어진 지연 d(j)에 대한 y(d(j))의 근삿값입니다. 출력값은 f(t,y(t),y(d(1),...,y(d(k)))에 대응하는 열 벡터입니다.

delays

지연 d(j)로 구성된 열 벡터를 반환하는 함수 핸들입니다. 지연은 t와 y(t)에 따라 다를 수 있습니다. ddesdmin(d(j),t)를 사용하여 d(j) ≤ t인 요구 사항을 추가로 부여할 수 있습니다.

모든 지연 함수의 형식이 d(j) = t – τj인 경우에는 인수 delays를 상수 벡터 delays(j) = τj로 설정할 수 있습니다. 이 형식의 지연 함수를 사용하는 ddesddde23과 용법이 동일합니다.

history

history를 다음 3가지 방식 중 하나로 지정합니다.

  • t ≤ t0인 경우 y = history(t)가 해 y(t)를 열 벡터로 반환하는 t의 함수

  • y(t)가 상수인 경우 상수 열 벡터

  • 이 호출이 해당 적분을 계속하는 경우 이전 적분의 해 sol

tspan

t0=tspan(1)부터 tf=tspan(end)까지의 적분 구간입니다(t0 < tf).

options

적분 인수입니다(선택 사항). ddeset 함수를 사용하여 생성되는 구조체입니다. 자세한 내용은 ddeset을 참조하십시오.

설명

sol = ddesd(ddefun,delays,history,tspan)은 다음 DDE 시스템을

y(t)=f(t,y(t),y(d(1)),...,y(d(k)))

구간 [t0,tf]에서 적분합니다. 여기서 지연 d(j)는 t와 y(t)에 따라 다를 수 있고 t0 < tf입니다. 입력 인수 ddefundelays는 함수 핸들입니다. 자세한 내용은 함수 핸들 생성하기 항목을 참조하십시오.

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

ddesd는 해를 구조체 sol로 반환합니다. 보조 함수 deval과 출력 인수 sol을 사용하여 구간 tspan = [t0,tf]의 특정 지점 tint에서 해를 구합니다.

yint = deval(sol,tint)

ddesd가 반환한 구조체 sol은 다음 필드를 가집니다.

sol.x

ddesd에서 선택된 메시

sol.y

sol.x의 메시 점에서 y(x)에 대한 근삿값

sol.yp

sol.x의 메시 점에서 y′(x)에 대한 근삿값

sol.solver

솔버 이름 'ddesd'

sol = ddesd(ddefun,delays,history,tspan,options)는 디폴트 적분 속성을, ddeset에서 생성된 인수 options 값으로 대체한 뒤 위와 같이 문제를 풉니다. 자세한 내용은 ddeset 항목과 지연 미분 방정식 풀기 항목을 참조하십시오.

일반적으로 사용되는 옵션은 스칼라 상대 허용오차 'RelTol'(기본적으로 1e-3)과 절대 허용오차 'AbsTol'로 구성된 벡터(기본적으로 모든 성분은 1e-6임)입니다.

'Events' 옵션을 사용하여, 함수 g(t,y(t),y(d(1)),...,y(d(k)))가 0이 되는 곳을 찾기 위해 ddesd가 호출하는 함수를 지정합니다. 이 함수는 다음과 같은 형식이어야 합니다.

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

또한 각 이벤트를 테스트할 이벤트 함수를 포함해야 합니다. eventsk번째 이벤트 함수의 경우:

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

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

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

'Events' 옵션을 지정한 상태에서 이벤트가 발견되면 출력 구조체 sol은 다음 필드도 포함합니다.

sol.xe

모든 이벤트의 위치(즉, 이벤트 함수가 0이 되는 시간)를 요소로 갖는 행 벡터

sol.ye

행렬로, 이 행렬의 열은 sol.xe의 시간에 대응하는 해 값임

sol.ie

벡터로, sol.xe의 대응 시간에 발생한 이벤트에 대한 인덱스를 요소로 가짐

예제

다음 방정식은

sol = ddesd(@ddex1de,@ddex1delays,@ddex1hist,[0,5]);

함수 ddex1delays가 지정한 지연과 ddex1de로 계산한 미분 방정식을 사용하여 구간 [0,5]에서 DDE를 풉니다. 함수 ddex1hist가 t ≤ 0에 대한 내역을 구합니다. [0,5] 사이에서 간격이 균일한 점 100개에서의 해를 구합니다.

tint = linspace(0,5);
yint = deval(sol,tint);

다음을 사용하여 플로팅합니다.

plot(tint,yint);

이 문제는 상수 지연과 관련 있습니다. delay 함수의 형식은 다음과 같습니다.

function d = ddex1delays(t,y)
%DDEX1DELAYS  Delays for using with DDEX1DE.
d = [ t - 1
      t - 0.2];

또한 상수 지연에 대응하는 구문을 사용하여 문제를 풀 수 있습니다.

delays = [1, 0.2];
sol = ddesd(@ddex1de,delays,@ddex1hist,[0, 5]);

또는 dde23을 사용하여 문제를 풀 수 있습니다.

sol = dde23(@ddex1de,delays,@ddex1hist,[0, 5]);

지연 미분 방정식 풀이에 대한 다른 예제에 대해서는 ddex2ddex3 항목을 참조하십시오.

참고 문헌

[1] Shampine, L.F., “Solving ODEs and DDEs with Residual Control,” Applied Numerical Mathematics, Vol. 52, 2005, pp. 113-127.

참고 항목

| | | |