延迟微分方程数值解(matlab求解)
科学研究中,我们有时会碰到求延迟微分方程数值解的问题,本文探讨了如何用matlab软件求解延迟微分方程。
所谓延迟微分方程,指微分方程中信号不是同时发生的,除了当前时刻信号的值,还含有信号以前时刻的值。
本文将探讨如下问题:
(1)典型延迟微分方程的数值求解
(2)变时间延迟方程求解
(3)中立型延迟微分方程求解
1.典型延迟微分方程的数值求解
延迟微分方程组的一般形式为:
其中,
为状态变量 x(t) 的延迟常数
隐式Runge-Kutta算法dde23()
描述微分方程和延迟模型
例1:用数值法求解下述延迟微分方程组
初始状态:
选择状态变量:
转换成标准形式:
写出对应的M-函数描述:
function f=c7exdde(t,x,z)
f=[1-3*x(1)-z(2,1)-0.2*z(1,2)^3-z(1,2);x(3);4*x(1)-2*x(2)-3*x(3)]
延迟微分方程求解语句:
lags=[1 0.5];tx=dde23(@c7exdde,lags,zeros(3,1),[0,10]);
plot(tx.x,tx.y(2,:))
匿名函数也可描述延迟微分方程:
例2:非零初值问题
如果前面例1的微分方程初始值非零,若已知该微分方程三个状态变量的历史函数分别为:
试重新求解该延迟微分方程。
f=@(t,x,Z)[1-3*x(1)-Z(2,1)-0.2*Z(1,2)^3-Z(1,2);
x(3);
4*x(1)-2*x(2)-3*x(3)];
f2=@(t,x)[exp(2.1*t); sin(t); cos(t)];
lags=[1 0.5]; tx=dde23(f,lags,f2,[0,10]);
plot(tx.x,tx.y(2,:))
2.变时间延迟微分方程的求解
如果时间延迟不是常数,matlab 求解函数为:
其中参数有三个函数(或句柄):微分方程函数、变时间延迟函数、初始值函数
例3:求解变延迟微分方程:
代码:
tau=@(t,x)[t-0.2*abs(sin(t)); t-0.8];
f=@(t,x,Z)[-2*x(2)-3*Z(1,1);
-0.05*x(1)*x(3)-2*Z(2,2)+2;
0.3*x(1)*x(2)*x(3)+cos(x(1)*x(2))+2*sin(0.1*t^2)];
sol=ddesd(f,tau,zeros(3,1),[0,10]);
plot(sol.x,sol.y)
例4:复杂延迟微分方程的求解
代码:
tau=@(t,x)[t-0.2*abs(sin(t)); 0.77*t];
f=@(t,x,Z)[-2*x(2)-3*Z(1,1);
-0.05*x(1)*x(3)-2*Z(2,2)+2;
0.3*x(1)*x(2)*x(3)+cos(x(1)*x(2))+2*sin(0.1*t^2)];
sol=ddesd(f,tau,zeros(3,1),[0,10]);
plot(sol.x,sol.y)
3.中立型延迟微分方程的求解
中立型延迟微分方程:
它含有导数以前的值。
MATLAB 求解函数:
例5:求解中立型延迟微分方程
其中:
代码:
A1=[-13,3,-3; 106,-116,62; 207,-207,113]; u=1;
A2=diag([0.02,0.03,0.04]); B=[0; 1; 2];
f=@(t,x,z1,z2)A1*z1+A2*z2+B*u; x0=zeros(3,1);
sol=ddensd(f,0.15,0.5,x0,[0,15]); plot(sol.x,sol.y)
]; u=1;
A2=diag([0.02,0.03,0.04]); B=[0; 1; 2];
f=@(t,x,z1,z2)A1z1+A2z2+B*u; x0=zeros(3,1);
sol=ddensd(f,0.15,0.5,x0,[0,15]); plot(sol.x,sol.y)
![在这里插入图片描述](https://img-blog.csdnimg.cn/4a54de6e9f3a415ba8abbffca2edeec5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p6c5bee5YGa6aKY5a62,size_20,color_FFFFFF,t_70,g_se,x_16)