Main Content

중립(Neutral) 유형의 초기값 DDE

이 예제는 ddensd를 사용하여 시간 종속 지연을 갖는 초기값 DDE(지연 미분 방정식) 시스템을 푸는 방법을 보여줍니다. 이 예제는 원래 Jackiewicz의 문헌 [1]에 나와 있습니다.

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

y(t)=2cos(2t)y(t2)2cos(t)+log(y(t2))-log(2cos(t))-sin(t).

시간 지연이 t0에서 0이므로 이 방정식은 초기 DDE입니다. 따라서 해를 계산하는 데 해 내역은 필요하지 않으며 다음과 같이 초기값만 필요합니다.

y(0)=1,

y(0)=s.

s2+log(s)-log(2)=0의 해입니다. 이 방정식을 충족하는 s의 값은 s1=2s2=0.4063757399599599입니다.

방정식의 시간 지연이 y 항에 있으므로 이 방정식을 중립 DDE라고 합니다.

MATLAB®에서 이 방정식을 풀려면 중립 방정식의 솔버인 지연 미분 방정식 솔버 ddensd를 호출하기 전에 방정식과 지연을 코딩해야 합니다. 필요한 함수를 이 예제와 같이 파일 끝에 로컬 함수로 포함시킬 수도 있고, MATLAB 경로에 있는 디렉터리에 별도의 파일로 저장할 수도 있습니다.

지연 코딩하기

먼저 방정식의 지연을 정의하는 익명 함수를 작성합니다. yy 둘 다 t2 형식의 지연을 가지므로 하나의 함수 정의만 필요합니다. 이 지연 함수는 나중에 솔버로 두 번 전달되는데 한 번은 y에 대한 지연을 나타내고 한 번은 y에 대한 지연을 나타냅니다.

delay = @(t,y) t/2; 

방정식 코딩하기

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

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

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

  • ydely에 대한 지연을 포함합니다.

  • ypdely=dydt에 대한 지연을 포함합니다.

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

  • ydely(t2)

  • ypdel y(t2)

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

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

방정식 풀기

마지막으로 적분 구간 [t0 tf]와 초기값을 정의한 다음 ddensd 솔버를 사용하여 DDE를 풉니다. 초기값을 네 번째 입력 인수에 셀형 배열로 지정하여 솔버에 전달합니다.

tspan = [0 0.1];
y0 = 1;
s1 = 2;
sol1 = ddensd(@ddefun, delay, delay, {y0,s1}, tspan);

이번에는 초기 조건에 대한 s의 또 다른 값을 사용하여 다시 방정식을 풉니다.

s2 = 0.4063757399599599;
sol2 = ddensd(@ddefun, delay, delay, {y0,s2}, tspan);

해 플로팅하기

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

두 해를 플로팅하여 결과를 비교합니다.

plot(sol1.x,sol1.y,sol2.x,sol2.y);
legend('y''(0) = 2','y''(0) = .40637..','Location','NorthWest');
xlabel('Time t');
ylabel('Solution y');
title('Two Solutions of Jackiewicz''s Initial-Value NDDE');

Figure contains an axes object. The axes object with title Two Solutions of Jackiewicz's Initial-Value NDDE, xlabel Time t, ylabel Solution y contains 2 objects of type line. These objects represent y'(0) = 2, y'(0) = .40637...

로컬 함수(Local Function)

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

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

참고 문헌

[1] Jackiewicz, Z. “One step Methods of any Order for Neutral Functional Differential Equations.” SIAM Journal on Numerical Analysis. Vol. 21, Number 3. 1984. pp. 486–511.

참고 항목

| | |

관련 항목