Main Content

중립(Neutral) 유형의 DDE

이 예제에서는 ddensd를 사용하여 중립 DDE(지연 미분 방정식)를 푸는 방법을 보여줍니다. 여기서 지연은 도함수 항에 나타납니다. 문제는 원래 Paul의 문헌 [1]에 나와 있습니다.

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

y(t)=1+y(t)-2y(t2)2-y(t-π).

내역 함수는 t0에 대해 y(t)=cos(t)입니다.

방정식의 y 항에 시간 지연이 있기 때문에 방정식을 중립 DDE라고 합니다. 시간 지연이 y 항에만 있는 경우에는 시간 지연의 형식에 따라 방정식은 상수 DDE이거나 상태 종속 DDE가 됩니다.

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

지연 코딩하기

먼저 방정식의 지연을 정의하는 함수를 작성합니다. 방정식에서 지연이 있는 첫 번째 항은 y(t2)입니다.

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

방정식에서 지연이 있는 다른 항은 y(t-π)입니다.

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

이 예제에서는 y에 대한 하나의 지연과 y에 대한 하나의 지연만 존재합니다. 지연이 더 있는 경우에는 함수가 스칼라 대신 벡터를 반환하도록 동일한 함수 파일에서 지연을 추가할 수 있습니다.

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

방정식 코딩하기

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

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

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

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

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

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

  • ydel y(t2)

  • ypdel y(t-π)

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

해 내역 코딩하기

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

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

방정식 풀기

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

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

해 플로팅하기

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

0pi 사이에서 간격이 균일한 점 100개에서의 해를 구합니다.

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

해석적 해에 대해 계산된 해와 내역을 플로팅합니다.

th = linspace(-pi,0);
yh = history(th);
ta = linspace(0,pi);
ya = cos(ta);

plot(th,yh,tn,yn,'o',ta,ya)
legend('History','Numerical','Analytical','Location','NorthWest')
xlabel('Time t')
ylabel('Solution y')
title('Example of Paul with 1 Equation and 2 Delay Functions')
axis([-3.5 3.5 -1.5 1.5])

Figure contains an axes object. The axes object with title Example of Paul with 1 Equation and 2 Delay Functions, xlabel Time t, ylabel Solution y contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent History, Numerical, Analytical.

로컬 함수(Local Function)

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

function yp = ddefun(t,y,ydel,ypdel) % equation being solved
    yp = 1 + y - 2*ydel^2 - ypdel;
end
%-------------------------------------------
function dy = dely(t,y) % delay for y
    dy = t/2;
end
%-------------------------------------------
function dyp = delyp(t,y) % delay for y'
    dyp = t-pi;
end
%-------------------------------------------
function y = history(t) % history function for t < 0
    y = cos(t);
end
%-------------------------------------------

참고 문헌

[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.

참고 항목

| | |

관련 항목