MATLAB 数学应用 微分方程 时滞微分方程 具有常时滞的DDE「建议收藏」

MATLAB 数学应用 微分方程 时滞微分方程 具有常时滞的DDE「建议收藏」本文讲述了如何使用dde23对具有常时滞的DDE(时滞微分方程)方程组求解。方程组为:y1′(t)=y1(t−1)y’_1(t)=y_1(t−1)y1′​(t)=y1​(t−1)y2′(t)=y1(t−1)+y2(t−0.2)y’_2(t)=y_1(t-1)+y_2(t-0.2)y2′​(t)=y1​(t−1)+y2​(t−0.2)y3′(t)=y2(t)y’_3(t)=y_2(t)y3′​(t)=y2​(t).t≤0的历史解函数是常量y1(t)=y2(t)=y3(t)=1y_1(t)=y

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

本文讲述了如何使用 dde23 对具有常时滞的DDE(时滞微分方程)方程组求解。

方程组为:

y 1 ′ ( t ) = y 1 ( t − 1 ) y’_1(t)=y_1(t−1) y1(t)=y1(t1)

y 2 ′ ( t ) = y 1 ( t − 1 ) + y 2 ( t − 0.2 ) y’_2(t)=y_1(t-1)+y_2(t-0.2) y2(t)=y1(t1)+y2(t0.2)

y 3 ′ ( t ) = y 2 ( t ) y’_3(t)=y_2(t) y3(t)=y2(t).

t≤0 的历史解函数是常量 y 1 ( t ) = y 2 ( t ) = y 3 ( t ) = 1 y_1(t)=y_2(t)=y_3(t)=1 y1(t)=y2(t)=y3(t)=1

方程中的时滞仅存在于 y 项中,并且时滞本身是常量,因此各方程构成常时滞方程组。

要在 MATLAB 中求解此方程组,您需要先编写方程组、时滞和历史解的代码,然后再调用时滞微分方程求解器 dde23,该求解器适用于具有常时滞的方程组。您可以将所需的函数作为局部函数包含在文件末尾,或者将它们作为单独的命名文件保存在 MATLAB 路径上的目录中。

编写时滞代码

首先,创建一个向量来定义方程组中的时滞。此方程组有两种不同时滞:

  • 在第一个分量 y 1 ( t − 1 ) y_1(t−1) y1(t1) 中时滞为 1。
  • 在第二个分量 y 2 ( t − 0.2 ) y_2(t−0.2) y2(t0.2) 中时滞为 0.2。

dde23 接受时滞的向量参数,其中每个元素是一个分量的常时滞。

lags = [1 0.2];

编写方程代码

现在,创建一个函数来编写方程的代码。此函数应具有签名 dydt = ddefun(t,y,Z),其中:

t 是时间(自变量)。

y 是解(因变量)。

Z(:,j) 用于逼近时滞 y ( t − τ j ) y(t−τ_j) y(tτj),其中常时滞 τ j τ_j τj 由 lags(j) 给定。

求解器会自动将这些输入传递给该函数,但是变量名称决定如何编写方程代码。在这种情况下:

  • Z ( : , 1 )   →     y 1 ( t − 1 ) Z(:,1) →  y_1(t−1) Z(:,1)y1(t1)
  • Z ( : , 2 )   →     y 2 ( t − 0.2 ) Z(:,2) →  y_2(t−0.2) Z(:,2)y2(t0.2)
function dydt = ddefun(t,y,Z)
  ylag1 = Z(:,1);
  ylag2 = Z(:,2);

  dydt = [ylag1(1); 
          ylag1(1)+ylag2(2); 
          y(2)];
end

注意:所有函数都作为局部函数包含在示例的末尾。

编写历史解代码

接下来,创建一个函数来定义历史解。历史解是时间 t ≤ t 0 t≤t_0 tt0 的解。

function s = history(t)
  s = ones(3,1);
end

求解方程

最后,定义积分区间 [ t 0     t f ] [t_0  t_f] [t0tf] 并使用 dde23 求解器对 DDE 求解。

tspan = [0 5];
sol = dde23(@ddefun, lags, @history, tspan);

对解进行绘图

解结构体 sol 具有字段 sol.x 和 sol.y,这两个字段包含求解器在这些时间点所用的内部时间步和对应的解。(如果您需要在特定点的解,可以使用 deval 来计算在特定点的解。)

绘制三个解分量对时间的图。

plot(sol.x,sol.y,'-o')
xlabel('Time t');
ylabel('Solution y');
legend('y_1','y_2','y_3','Location','NorthWest');

在这里插入图片描述

局部函数

此处列出了 DDE 求解器 dde23 为计算解而调用的局部辅助函数。您也可以将这些函数作为它们自己的文件保存在 MATLAB 路径上的目录中。

function dydt = ddefun(t,y,Z) % equation being solved
  ylag1 = Z(:,1);
  ylag2 = Z(:,2);

  dydt = [ylag1(1); 
          ylag1(1)+ylag2(2); 
          y(2)];
end
%-------------------------------------------
function s = history(t) % history function for t <= 0
  s = ones(3,1);
end
%-------------------------------------------
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188171.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 常见的7种排序算法

    常见的7种排序算法1、冒泡排序最简单的一种排序算法。假设长度为n的数组arr,要按照从小到大排序。则冒泡排序的具体过程可以描述为:首先从数组的第一个元素开始到数组最后一个元素为止,对数组中相邻的两个元素进行比较,如果位于数组左端的元素大于数组右端的元素,则交换这两个元素在数组中的位置,此时数组最右端的元素即为该数组中所有元素的最大值。接着对该数组剩下的n-1个元素进行冒泡排序,直到整个数组有序排列。算法的时间复…

    2022年7月26日
    7
  • scrollwidth和clientwidth_vue监听页面滚动

    scrollwidth和clientwidth_vue监听页面滚动本文并非原创,只是真心觉得好,特别是图解的很到位,我在js中经常会用到,就记下来,与大家分享。HTML:scrollLeft,scrollWidth,clientWidth,offsetWidth到底指的哪到哪的距离之完全详解scrollHeight:获取对象的滚动高度。scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离scrollTo

    2025年10月6日
    3
  • Redis客户端连接时崩溃

    Redis客户端连接时崩溃文章目录1.Redis客户端连接崩溃1.Redis客户端连接崩溃把protected-model设置为no

    2022年5月6日
    38
  • linux中解压rar文件

    linux中解压rar文件linux平台默认是不支持RAR文件的解压,需要安装linux版本的RAR压缩软件,下载地址为:http://www.rarlab.com/download.htm下载之后进行解压之后,进入rar目录,运行make指令进行安装:[root@localhostrar]#lsacknow.txtlicense.txtorder.htmrarfiles.lstrar.txt

    2022年7月15日
    13
  • 远程服务器虚拟显示器(Ubuntu 20.04 LTS)[通俗易懂]

    远程服务器虚拟显示器(Ubuntu 20.04 LTS)[通俗易懂]远程服务器虚拟显示器(Ubuntu20.04LTS)1.准备工作2.安装软件包3.修改配置文件4.卸载虚拟显示器1.准备工作安装sshsever并开启,确保虚拟显示器配置失败后,无法正常显示,仍可以通过ssh连接至服务器sudoapt-getinstallopenssh-server查看ssh服务已经开启,并可以远程ssh连接至服务器ps-e|grepssh测试远程连接2.安装软件包sudoapt-getinstall

    2022年8月21日
    6
  • 进程之间的通信方式「建议收藏」

    进程之间的通信方式「建议收藏」进程间通信方式一般有以下几种:1、管道,匿名管道,命名管道2、信号3、信号量4、消息队列5、共享内存6、socket管道管道数据只能单向流动,所以如果要实现双向通信,就要创建2个管道管道分为匿名管道和命名管道匿名管道只能在父子进程关系之间使用命名管道,可以在不关联的两个进程之间使用,因为它创建了一个类型为管道的设备文件,使用这个设备文件就可以通信。管道只能承载无格式的字节流信号信号是进程之间唯一的异步通信机制,信号的主要来源主要有硬件来源(入键盘操作ctrl+C)

    2022年10月11日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号