주요 콘텐츠

dde23

상수 지연(Constant Delay)의 지연 미분 방정식(DDE) 풀기

    설명

    sol = dde23(ddefun,delays,history,tspan)(여기서 tspan = [t0 tf])은 지연 미분 연립방정식 y(t)=f(t,y(t),y(tτ1),...,y(tτk))tspan으로 지정된 구간에서 적분합니다. 여기서 τ1, ..., τkdelays로 지정된 양의 상수 지연입니다.

    예제

    sol = dde23(ddefun,delays,history,tspan,options)ddeset 함수를 사용하여 생성된 구조체인 options로 정의된 적분 설정을 사용합니다. 예를 들어, 절대 허용오차와 상대 허용오차를 지정하려면 AbsTol 옵션과 RelTol 옵션을 사용하고 불연속 위치를 제공하려면 Jumps 옵션을 사용하십시오.

    예제

    예제

    모두 축소

    지연 미분 연립방정식을 풉니다.

    y1(t)=-2y1(t-2)+y2(t)y2(t)=y1(t)-2y2(t-1),

    여기서 y1(t)는 상수 해 내역 y1(t)=0.1을 갖고 y2(t)t0에 대한 상수 해 내역 y2(t)=0.5를 갖습니다. y1(t)에 적용된 시간 지연은 2이고 y2(t)에 적용된 시간 지연은 1입니다.

    DDE 시스템을 ddefun이라는 로컬 함수로 정의합니다.

    function dydt = ddefun(t,y,Z)
    ydelay1 = Z(:,1);
    ydelay2 = Z(:,2);
    dydt = [-2*ydelay1(1) + y(2);
            y(1) - 2*ydelay2(2)];
    end

    적분 구간을 [0 10]으로, 시간 지연을 벡터 [2; 1]로, 해 내역을 벡터 [0.1; 0.5]로 지정합니다. dde23을 사용하여 DDE를 풉니다.

    tspan = [0 10];
    delays = [2; 1];
    history = [0.1; 0.5];
    sol = dde23(@ddefun,delays,history,tspan);

    결과를 플로팅합니다.

    plot(sol.x,sol.y)

    Figure contains an axes object. The axes object contains 2 objects of type line.

    DDE를 풉니다.

    y(t)=-2y(t-1)(1+y(t)),

    여기서 t0에 대해 y(t)=t입니다.

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

    function dydt = ddefun(t,y,ydelay)          
    dydt = -2*ydelay*(1+y);
    end

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

    function h = history(t)
    h = t;
    end

    ddeset 함수로 적분기 options 구조체의 Events 필드를 지정하여 적분을 종료하지 않고 방정식의 영점을 찾습니다.

    function [position,isterminal,direction] = zeroEventsFcn(t,y,ydelay)
    position = y(1);
    isterminal = 0;
    direction = 0;
    end
    
    opts = ddeset(Events=@zeroEventsFcn);

    적분 구간을 [0 10]으로, 시간 지연을 1로 지정합니다. 그런 다음 dde23을 사용하여 DDE를 풉니다.

    tspan = [0 10];
    delays = 1;
    sol = dde23(@ddefun,delays,@history,tspan,opts);

    결과와 영점교차의 위치를 플로팅합니다.

    plot(sol.x,sol.y,sol.xe,sol.ye,"o")

    Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

    입력 인수

    모두 축소

    풀려는 지연 미분 연립방정식으로, 함수 핸들로 지정됩니다.

    스칼라 t와 열 벡터 y에 대한 함수 dydt = ddefun(t,y,Z)y(t)=f(t,y(t),y(tτ1),...,y(tτk))에 대응하는 single이나 double 데이터형의 열 벡터 dydt를 반환해야 합니다. 스칼라 t는 현재 t에 대응하고, 열 벡터 yy(t)의 근삿값이고, Z(:,j)τj = delays(j)에 대한 y(t-τj)의 근삿값입니다.

    예: @myFcn

    데이터형: function_handle

    시간 지연으로, 양의 벡터로 지정됩니다. delays 벡터는 양의 상수 지연 τ1, ..., τk를 나타냅니다.

    예: [1 0.2]

    데이터형: single | double

    tt0에서의 해 내역으로, 다음 값 중 하나로 지정됩니다.

    • 스칼라 t에 대해 y = history(t)가 열 벡터를 반환하도록 하는 함수 핸들

    • 상수 벡터 y(t)

    • 현재 dde23 함수 호출이 적분을 계속하는 경우 이전 적분의 해 구조체 sol

    예: @ddeHist

    예: [1; 0.4; 0.2]

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

    적분 구간으로, 초기 시간과 최종 시간을 나타내는, 요소를 2개 가진 벡터 [t0 tf]로 지정됩니다. t0tf 사이 특정 시간에서의 해를 구하려면 deval을 사용해야 합니다.

    예: [1 10]

    데이터형: single | double

    적분기 옵션으로, 구조체형 배열로 지정됩니다. ddeset 함수를 사용하여 options 구조체를 만들거나 수정할 수 있습니다.

    예: options = ddeset(RelTol=1e-5,Stats="on")1e-5의 상대 허용오차를 지정하고 솔버 통계량 표시를 활성화합니다.

    데이터형: struct

    출력 인수

    모두 축소

    계산할 해로, 구조체형 배열로 반환됩니다. 이 구조체를 deval 함수와 함께 사용하여 tspan으로 지정된 구간 내에 있는 임의의 지점에서 해를 계산합니다.

    sol 구조체는 다음 필드를 포함합니다.

    구조체 필드설명

    sol.x

    dde23에서 선택된 메시

    sol.y

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

    sol.yp

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

    sol.solver

    솔버 이름 'dde23'

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

    구조체 필드설명

    sol.xe

    이벤트가 발생한 지점. sol.xe(end)는 종료 이벤트(있을 경우)의 정확한 지점을 포함합니다.

    sol.ye

    sol.xe의 이벤트 시간에 대응되는 해

    sol.ie

    Events 옵션에 지정된 함수가 반환하는 벡터에 대한 인덱스. 이러한 값은 솔버가 감지한 이벤트를 나타냅니다.

    알고리즘

    dde23은 명시적 룽게-쿠타(Explicit Runge-Kutta) (2,3) 쌍과 ode23의 보간법을 사용하여 불연속 자취를 추적하고 적분합니다. 또한 시간 지연보다 긴 스텝의 반복을 사용합니다.

    참고 문헌

    [1] Shampine, Lawrence F., and S. Thompson. "Solving DDEs in MATLAB." Applied Numerical Mathematics 37, no. 4 (June 2001): 441–458. https://doi.org/10.1016/S0168-9274(00)00055-6.

    [2] Kierzenka, Jacek. "Tutorial on Solving DDEs with DDE23." MATLAB Central File Exchange. Updated September 1, 2016. https://www.mathworks.com/matlabcentral/fileexchange/3899-tutorial-on-solving-ddes-with-dde23.

    [3] Willé, David R., and Christopher T. H. Baker. "DELSOL—a Numerical Code for the Solution of Systems of Delay-Differential Equations." Applied Numerical Mathematics 9, no. 3 (April 1992): 223–234. https://doi.org/10.1016/0168-9274(92)90017-8.

    버전 내역

    R2006a 이전에 개발됨