Main Content

ddensd

중립(Neutral) 유형의 지연 미분 방정식(DDE) 풀기

설명

예제

sol = ddensd(ddefun,dely,delyp,history,tspan)

y '(t) = f(t, y(t), y(dy1),..., y(dyp), y '(dyp1),..., y '(dypq))(1)
형식을 갖는 중립 유형의 지연 미분 방정식 시스템을 적분합니다.

  • t는 시간을 나타내는 독립 변수입니다.

  • dyi는 p개의 해 지연입니다.

  • dypj는 q개의 도함수 지연입니다.

sol = ddensd(ddefun,dely,delyp,history,tspan,options)는 디폴트 적분 파라미터를 options(ddeset 함수에서 생성된 구조체)에 지정된 파라미터로 바꿉니다.

예제

모두 축소

Paul이 제시한 다음과 같은 중립 DDE를 $0 \le t \le \pi$에 대해 풉니다.

$$y'(t) = 1 + y(t) - 2y(t/2)^2 - y'(t-\pi)$$

해 내역은 $t \le 0$에 대해 $y(t) = \cos(t)$입니다.

편집기에서 새 프로그램 파일을 만듭니다. 이 파일에는 메인 함수와 4개의 로컬 함수가 포함됩니다.

1계 DDE를 ddefun이라는 로컬 함수로 정의합니다.

function yp = ddefun(t,y,ydel,ypdel) 
    yp = 1 + y - 2*ydel^2 - ypdel;
end

해 지연을 dely라는 로컬 함수로 정의합니다.

function dy = dely(t,y) 
    dy = t/2;
end

도함수 지연을 delyp라는 로컬 함수로 정의합니다.

function dyp = delyp(t,y) 
    dyp = t-pi;
end

해 내역을 history라는 로컬 함수로 정의합니다.

function y = history(t)
    y = cos(t);
end

적분 구간을 정의하고 ddensd를 사용하여 DDE를 풉니다. 이 코드를 메인 함수에 추가합니다.

tspan = [0 pi];
sol = ddensd(@ddefun,@dely,@delyp,@history,tspan);

$0$$\pi$ 사이에서 간격이 균일한 점 100개에서의 해를 구합니다. 이 코드를 메인 함수에 추가합니다.

tn = linspace(0,pi);
yn = deval(sol,tn);

결과를 플로팅합니다. 이 코드를 메인 함수에 추가합니다.

plot(tn,yn);
xlim([0 pi]);
ylim([-1.2 1.2]);
xlabel('time t');
ylabel('solution y');

전체 프로그램을 실행하여 해를 계산하고 플롯을 표시합니다. 파일 ddex4.m에는 이 예제에 대한 전체 코드가 포함되어 있습니다. 명령줄에 edit ddex4를 입력하면 편집기에서 코드를 볼 수 있습니다.

입력 인수

모두 축소

도함수로, 구문이 yp = ddefun(t,y,ydel,ypdel)인 함수 핸들로 지정됩니다. 다음 표에는 ddefun 인수에 대한 설명이 나와 있습니다.

ddefun 인수설명
t시간 t의 현재 값을 나타내는 스칼라 값입니다.
y 수식 1에서 y(t)를 나타내는 벡터입니다. 이 벡터의 크기는 n×1입니다. 여기서 n은 풀려는 시스템의 방정식 개수입니다.
ydelydel(:,i)가 y(dyi)를 나타내는 행렬입니다. 이 행렬의 크기는 n×p입니다. 여기서 n은 풀려는 시스템의 방정식 개수이며 p수식 1에서 y(dy)의 항 개수입니다.
ypdelypdel(:,j)가 y '(dypj)를 나타내는 행렬입니다. 이 행렬의 크기는 n×q입니다. 여기서 n은 풀려는 시스템의 방정식 개수이며 q수식 1의 y (dyp)의 항 개수입니다.
ypddefun이 반환한 결과입니다. n×1 벡터이며, 이 벡터의 요소는 수식 1의 우변을 나타냅니다.

해 지연으로, 함수 핸들로 지정되며 수식 1에서 dy1,..., dyp로 반환됩니다. 또는 벡터 형식의 상수값으로 지연을 전달할 수도 있습니다.

dely를 함수 핸들로 지정한 경우 구문은 dy = dely(t,y)여야 합니다. 다음 표에는 이 함수의 인수에 대한 설명이 나와 있습니다.

dely 인수설명
t시간 t의 현재 값을 나타내는 스칼라 값입니다.
y수식 1에서 y(t)를 나타내는 벡터입니다. 이 벡터의 크기는 n×1입니다. 여기서 n은 풀려는 시스템의 방정식 개수입니다.
dydely 함수가 반환한 벡터로, 이 벡터의 값은 수식 1에서 해 지연 dyi입니다. 이 벡터의 크기는 p×1입니다. 여기서 p는 방정식에서 해 지연의 개수입니다. 각 요소는 t보다 작거나 같아야 합니다.

형식이 dyi = t - τi인 상수 해 지연을 지정하려면 dely가 벡터여야 합니다. 여기서 dely(i) = τi입니다. 이 벡터의 각 값은 0보다 크거나 같아야 합니다.

dy가 문제에 없는 경우에는 dely[]로 설정합니다.

데이터형: function_handle | single | double

도함수 지연으로, 함수 핸들로 지정되며 수식 1에서 dyp1,..., dypq로 반환됩니다. 또는 벡터 형식의 상수값으로 지연을 전달할 수도 있습니다.

delyp가 함수 핸들인 경우 구문은 dyp = delyp(t,y)여야 합니다. 다음 표에는 이 함수의 인수에 대한 설명이 나와 있습니다.

delyp 인수설명
t시간 t의 현재 값을 나타내는 스칼라 값입니다.
y수식 1에서 y(t)를 나타내는 벡터입니다. 이 벡터의 크기는 n×1입니다. 여기서 n은 풀려는 시스템의 방정식 개수입니다.
dypdelyp 함수가 반환한 벡터로, 이 벡터의 값은 수식 1에서 도함수 지연 dypj입니다. 이 벡터의 크기는 q×1이어야 합니다. 여기서 q는 방정식에서 해 지연 dypj의 개수입니다. dyp의 각 요소는 t보다 작아야 합니다. 이 제한의 한 예외는 다음과 같습니다. 초기값 DDE를 풀고 있는 경우 dyp의 값은 t = t0일 때 t와 같을 수 있습니다. 자세한 내용은 초기값 중립 지연 미분 방정식 항목을 참조하십시오.

형식이 dypj = t - τj인 상수 도함수 지연을 지정하려면 delyp는 벡터여야 합니다. 여기서 delyp(j) = τj입니다. 이 벡터의 각 값은 0보다 커야 합니다. 중립 유형의 DDE에 대한 초기값 문제를 풀 때 예외적으로 이 제한이 적용되지 않습니다. 그 경우에 delyp의 값은 t = t0일 때 0일 수 있습니다. 자세한 내용은 초기값 중립 지연 미분 방정식 항목을 참조하십시오.

dyp가 문제에 없는 경우에는 delyp[]로 설정합니다.

데이터형: function_handle | single | double

해 내역(Solution History)으로, 함수 핸들, 열 벡터, 이전 적분의 sol 구조체, 셀형 배열 중 하나로 지정됩니다. 이 인수는 t ≤ t0일 때의 해입니다.

  • 내역이 시간의 흐름에 따라 변하는 경우 해 내역을 구문이 y = history(t)인 함수 핸들로 지정합니다. 이 함수는 t <= t0에 대한 해 y(t)의 근삿값 n×1 벡터를 반환합니다. 이 벡터의 길이 n은 풀려는 시스템의 방정식 개수입니다.

  • y(t)가 상수인 경우 history를 상수 값의 n×1 벡터로 지정할 수 있습니다.

  • ddensd를 호출하여 t0에 대한 이전 적분을 계속하는 경우 내역을 이전 적분의 출력 인수 sol로 지정할 수 있습니다.

  • 초기값 DDE를 풀고 있는 경우 내역을 셀형 배열 {y0, yp0}으로 지정합니다. 첫 번째 요소 y0은 초기값 y(t0)으로 구성된 열 벡터입니다. 두 번째 요소 yp0은 요소가 초기 도함수 y '(t0)인 열 벡터입니다. 벡터들은 서로 일치해야 하고, t0에서 수식 1 항목을 충족해야 합니다. 자세한 내용은 초기값 중립 지연 미분 방정식 항목을 참조하십시오.

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

적분 구간으로, 벡터 [t0 tf]로 지정됩니다. 첫 번째 요소 t0은 t의 초기값입니다. 두 번째 요소 tf는 t의 최종 값입니다. t0의 값은 tf보다 작아야 합니다.

데이터형: single | double

적분 파라미터(옵션)로, ddeset 함수가 생성하여 반환한 구조체로 지정됩니다. 일반적으로 사용되는 속성은 'RelTol', 'AbsTol', 'Events' 옵션 중에서만 선택할 수 있도록 합니다. options 지정에 대한 자세한 내용은 ddeset 함수 도움말 페이지를 참조하십시오.

출력 인수

모두 축소

해로, 다음 필드를 포함하는 구조체로 반환됩니다.

sol.xddensd에서 선택된 메시입니다.
sol.y메시 점에서 y(t)에 대한 근삿값입니다.
sol.yp메시 점에서 y '(t)에 대한 근삿값입니다.
sol.solver솔버 'ddensd'를 식별하는 문자형 벡터입니다.

soldeval 함수에 전달하여 특정 지점에서 해를 구할 수 있습니다. 예를 들어, y = deval(sol, 0.5*(sol.x(1) + sol.x(end)))는 적분 구간의 중간점에서 해를 구합니다.

세부 정보

모두 축소

초기값 중립 지연 미분 방정식

초기값 DDE는 모든 i 및 j에 대해 dyi≥t0 및 dypj≥t0을 가집니다. t = t0일 때 모든 지연 항은 y(dyi) = y(t0)과 y '(dypj) = y '(t0)으로 축소됩니다.

y '(t0) = f(t0, y(t0), y(t0),..., y(t0), y '(t0),..., y '(t0))(2)
t > t0인 경우 모든 도함수 지연은 dyp < t를 충족해야 합니다.

초기값 중립 DDE를 풀 때 ddensd에 y '(t0)를 제공해야 합니다. 이를 위해 history를 셀형 배열 {Y0,YP0}으로 지정해야 합니다. 여기서 Y0은 초기값 y(t0)으로 구성된 열 벡터이고 YP0은 초기 도함수 y '(t0)으로 구성된 열 벡터입니다. 벡터들은 서로 일치해야 하고, t0에서 수식 2 항목을 충족해야 합니다.

알고리즘

이 솔버에 사용된 알고리즘에 대한 자세한 내용은 Shampine [2] 항목을 참조하십시오.

참고 문헌

[1] Paul, C.A.H. “A Test Set of Functional Differential Equations.” Numerical Analysis Reports. No. 243. Manchester, UK: Math Department, University of Manchester, 1994.

[2] Shampine, L.F. “Dissipative Approximations to Neutral DDEs.” Applied Mathematics & Computation. Vol. 203, Number 2, 2008, pp. 641–648.

버전 내역

R2012b에 개발됨

참고 항목

| | |