Main Content

상태 종속 지연을 갖는 DDE

이 예제에서는 ddesd를 사용하여 상태 종속 지연을 갖는 연립 DDE(지연 미분 방정식)를 푸는 방법을 보여줍니다. 이 DDE 시스템은 Enright와 Hayashi의 문헌 [1]에서 테스트 문제로 사용되었습니다.

연립방정식은 다음과 같습니다.

y1(t)=y2(t),

y2(t)=-y2(e1-y2(t))y2(t)2e1-y2(t).

t0.1에 대한 내역 함수는 다음과 같은 해석적 해입니다.

y1(t)=log(t),

y2(t)=1t.

방정식에서 시간 지연은 y 항에만 존재합니다. 지연은 두 번째 성분 y2(t)의 상태에만 종속되므로 방정식의 형식은 상태 종속 지연 연립방정식입니다.

MATLAB®에서 이 연립방정식을 풀려면 상태 종속 지연을 갖는 시스템을 위한 지연 미분 방정식 솔버 ddesd를 호출하기 전에 방정식, 지연 및 내역을 코딩해야 합니다. 필요한 함수를 이 예제와 같이 파일 끝에 로컬 함수로 포함시킬 수도 있고, MATLAB 경로에 있는 디렉터리에 이름이 지정된 별도의 파일로 저장할 수도 있습니다.

지연 코딩하기

먼저 시스템의 시간 지연을 정의하는 함수를 작성합니다. 이 연립방정식에 존재하는 유일한 지연은 -y2(e1-y2(t)) 항에 있습니다.

function d = dely(t,y)
d = exp(1 - y(2));
end

참고: 모든 함수는 예제 끝에 로컬 함수로 포함되어 있습니다.

방정식 코딩하기

이제 방정식을 코딩하는 함수를 만듭니다. 이 함수는 시그니처 dydt = ddefun(t,y,Z)를 사용해야 합니다. 여기서,

  • t는 시간입니다(독립 변수).

  • y는 해입니다(종속 변수).

  • Z(n,j)는 지연 yn(d(j))의 근삿값을 계산하며 여기서 지연 d(j)dely(t,y)의 성분 j로 지정됩니다.

이 입력값은 솔버에 의해 자동으로 함수로 전달되지만 변수 이름에 따라 방정식 코딩 방식이 달라집니다. 이 경우:

  • Z(2,1) y2(e1-y2(t))

function dydt = ddefun(t,y,Z)
dydt = [y(2);
       -Z(2,1)*y(2)^2*exp(1 - y(2))];
end

해 내역 코딩하기

다음으로 해 내역을 정의하는 함수를 만듭니다. 해 내역은 시간 tt0에 대한 해입니다.

function v = history(t) % history function for t < t0
v = [log(t); 
     1./t];
end

방정식 풀기

마지막으로 적분 구간 [t0 tf]를 정의하고 ddesd 솔버를 사용하여 DDE를 풉니다.

tspan = [0.1 5];
sol = ddesd(@ddefun, @dely, @history, tspan);

해 플로팅하기

해 구조체 sol에는 솔버가 취하는 내부 시간 스텝과 그러한 각 시간에서의 해를 포함하는 sol.x 필드와 sol.y 필드가 있습니다. (특정 지점의 해가 필요한 경우 deval을 사용하여 특정 지점의 해를 구할 수 있습니다.)

비교를 위해, 내역 함수를 사용하여 적분 구간 내의 해석적 해를 계산하고 시간에 대해 두 개의 해 성분을 플로팅합니다.

ta = linspace(0.1,5);
ya = history(ta);

plot(ta,ya,sol.x,sol.y,'o')
legend('y_1 exact','y_2 exact','y_1 ddesd','y_2 ddesd')
xlabel('Time t')
ylabel('Solution y')
title('D1 Problem of Enright and Hayashi')

Figure contains an axes object. The axes object with title D1 Problem of Enright and Hayashi, xlabel Time t, ylabel Solution y contains 4 objects of type line. One or more of the lines displays its values using only markers These objects represent y_1 exact, y_2 exact, y_1 ddesd, y_2 ddesd.

로컬 함수(Local Function)

여기 나열된 함수는 DDE 솔버 ddesd가 해를 계산하기 위해 호출하는 로컬 헬퍼 함수입니다. 또는 이러한 함수를 MATLAB 경로에 있는 디렉터리에 고유의 파일로 저장할 수도 있습니다.

function dydt = ddefun(t,y,Z) % equation being solved
dydt = [y(2); 
       -Z(2,1).*y(2)^2.*exp(1 - y(2))];
end
%-------------------------------------------
function d = dely(t,y) % delay for y
d = exp(1 - y(2));
end
%-------------------------------------------
function v = history(t) % history function for t < t0
v = [log(t); 
     1./t];
end
%-------------------------------------------

참고 문헌

[1] Enright, W.H. and H. Hayashi. “The Evaluation of Numerical Software for Delay Differential Equations.” In Proceedings of the IFIP TC2/WG2.5 working conference on Quality of numerical software: assessment and enhancement. (R.F. Boisvert, ed.). London, UK: Chapman & Hall, Ltd., pp. 179-193.

참고 항목

| | |

관련 항목