matlab使用教程(34)—求解时滞微分方程(2)

1.具有状态依赖时滞的 DDE

        以下示例说明如何使用 ddesd 对具有状态依赖时滞的 DDE(时滞微分方程)方程组求解。Enright 和Hayashi [1] 将此 DDE 方程组用作测试问题。方程组为:
        方程中的时滞仅出现在 y 项中。时滞仅取决于第二个分量 y 2 t 的状态,因此这些方程构成状态依赖时滞方程组。
        要在 MATLAB® 中求解此方程组,您需要先编写方程组、时滞和历史解的代码,然后再调用时滞微分方程求解器 ddesd,该求解器适用于具有状态依赖时滞的方程组。您可以将所需的函数作为局部函数包含在文件末尾(如本处所示),或者将它们作为单独的命名文件保存在 MATLAB 路径上的目录中。

1.1编写时滞代码

function d = dely(t,y)
d = exp(1 - y(2));
end

1.2编写方程代码

现在,创建一个函数来编写方程的代码。此函数应具有签名 dydt = ddefun(t,y,Z) ,其中:
function dydt = ddefun(t,y,Z)
dydt = [y(2);-Z(2,1)*y(2)^2*exp(1 - y(2))];
end

1.3编写历史解代码

        接下来,创建一个函数来定义历史解。历史解是时间 t t 0 的解。
function v = history(t) % history function for t < t0
v = [log(t); 1./t];
end

1.4求解方程

        最后,定义积分区间并使用 ddesd 求解器对 DDE 求解。
tspan = [0.1 5];
sol = ddesd(@ddefun, @dely, @history, tspan);

1.5对解进行绘图

        解结构体 sol 具有字段 sol.x sol.y,这两个字段包含求解器在这些时间点所用的内部时间步和对应的解。(如果您需要在特定点的解,可以使用 deval 来计算在特定点的解。)使用历史解函数绘制两个解分量对时间的图,以计算积分区间内的解析解来进行比较。
ta = linspace(0.1,5);
ya = history(ta);
plot(ta,ya,sol.x,sol.y,'o')
legend('y_1 exact','y_2 exact','y_1 ddesd','y_2 ddesd')
xlabel('Time t')
ylabel('Solution y')
title('D1 Problem of Enright and Hayashi')

1.6局部函数

        此处列出了 DDE 求解器 ddesd 为计算解而调用的局部辅助函数。您也可以将这些函数作为它们自己的文件保存在 MATLAB 路径上的目录中。
function dydt = ddefun(t,y,Z) % equation being solved
dydt = [y(2); -Z(2,1).*y(2)^2.*exp(1 - y(2))];
end
%-------------------------------------------
function d = dely(t,y) % delay for y
d = exp(1 - y(2));
end
%-------------------------------------------
function v = history(t) % history function for t < t0
v = [log(t); 1./t];
end

2具有不连续性的心血管模型 DDE

        此示例说明如何使用 dde23 对具有不连续导数的心血管模型求解。此示例最初由 Ottesen [1] 提出。方程组为:
        该方程组受外周压的巨大影响,外周压会从 R = 1 . 05 急剧减少到 R = 0 . 84 ,从 t = 600 处开始。因此,该方程组在 t = 600 处的低阶导数具有不连续性。常历史解由以下物理参数定义
        要在 MATLAB® 中求解此方程组,您需要先编写方程组、参数、时滞和历史解的代码,然后再调用时滞微分方程求解器 dde23,该求解器适用于具有常时滞的方程组。您可以将所需的函数作为局部函数包含在文件末尾(如本处所示),或者将它们作为单独的命名文件保存在 MATLAB 路径上的目录中。

2.1定义物理参数

首先,将问题的物理参数定义为结构体中的字段。
p.ca = 1.55;
p.cv = 519;
p.R = 1.05;
p.r = 0.068;
p.Vstr = 67.9;
p.alpha0 = 93;
p.alphas = 93;
p.alphap = 93;
p.alphaH = 0.84;
p.beta0 = 7;
p.betas = 7;
p.betap = 7;
p.betaH = 1.17;
p.gammaH = 0;

tau = 4;

2.2编写方程代码

现在,创建一个函数来编写方程的代码。此函数应具有签名 dydt = ddefun(t,y,Z,p) ,其中:
        求解器自动将前三个输入传递给函数,变量名称决定如何编写方程代码。调用求解器时,参数结构体 p 将传递给函数。在本例中,时滞表示为:
function dydt = ddefun(t,y,Z,p)if t <= 600p.R = 1.05;elsep.R = 0.21 * exp(600-t) + 0.84;end ylag = Z(:,1);Patau = ylag(1);Paoft = y(1);Pvoft = y(2);Hoft = y(3);dPadt = - (1 / (p.ca * p.R)) * Paoft ...+ (1/(p.ca * p.R)) * Pvoft ...+ (1/p.ca) * p.Vstr * Hoft;dPvdt = (1 / (p.cv * p.R)) * Paoft...- ( 1 / (p.cv * p.R)...+ 1 / (p.cv * p.r) ) * Pvoft;Ts = 1 / ( 1 + (Patau / p.alphas)^p.betas );Tp = 1 / ( 1 + (p.alphap / Paoft)^p.betap );dHdt = (p.alphaH * Ts) / (1 + p.gammaH * Tp) ...- p.betaH * Tp;dydt = [dPadt; dPvdt; dHdt];
end

2.3编写历史解代码

接下来,创建一个向量来定义三个分量 P a P v H 的常历史解。历史解是时间 t t 0 的解。
P0 = 93;
Paval = P0;
Pvval = (1 / (1 + p.R/p.r)) * P0;
Hval = (1 / (p.R * p.Vstr)) * (1 / (1 + p.r/p.R)) * P0;
history = [Paval; Pvval; Hval];
2.4 求解方程
        使用 ddeset 来指定在 t = 600 处存在不连续性。最后,定义积分区间 并使用 dde23 求解器对 DDE 求解。使用匿名函数指定 ddefun 以传入参数结构体 p
options = ddeset('Jumps',600);
tspan = [0 1000];
sol = dde23(@(t,y,Z) ddefun(t,y,Z,p), tau, history, tspan, options);

2.4对解进行绘图

        解结构体 sol 具有字段 sol.x sol.y,这两个字段包含求解器在这些时间点所用的内部时间步和对应的解。(如果您需要在特定点的解,可以使用 deval 来计算在特定点的解。)绘制第三个解分量(心率)对时间的图。
plot(sol.x,sol.y(3,:))
title('Heart Rate for Baroreflex-Feedback Mechanism.')
xlabel('Time t')
ylabel('H(t)')

2.5局部函数

        此处列出了 DDE 求解器 dde23 为计算解而调用的局部辅助函数。您也可以将这些函数作为它们自己的文件保存在 MATLAB 路径上的目录中。
function dydt = ddefun(t,y,Z,p) % equation being solvedif t <= 600p.R = 1.05;elsep.R = 0.21 * exp(600-t) + 0.84;end ylag = Z(:,1);Patau = ylag(1);Paoft = y(1);Pvoft = y(2);Hoft = y(3);dPadt = - (1 / (p.ca * p.R)) * Paoft ...+ (1/(p.ca * p.R)) * Pvoft ...+ (1/p.ca) * p.Vstr * Hoft;dPvdt = (1 / (p.cv * p.R)) * Paoft...- ( 1 / (p.cv * p.R)...+ 1 / (p.cv * p.r) ) * Pvoft;Ts = 1 / ( 1 + (Patau / p.alphas)^p.betas );Tp = 1 / ( 1 + (p.alphap / Paoft)^p.betap );dHdt = (p.alphaH * Ts) / (1 + p.gammaH * Tp) ...- p.betaH * Tp;dydt = [dPadt; dPvdt; dHdt];
end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/593537.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[GN] Spring Security 和 SHiro的配置使用

文章目录 SHiroSpring Security SHiro Shrio安全框架更灵活和简单&#xff0c;代码易读使用简单 但授权第三方登录需要手动实现 配置shrio的核心内容 安全管理器 realm Configuration public class ShiroConfig {//0.配置shrioFilterBean("shiroFilter")public Sh…

9Proxy,跨境电商一站式解决方案

文章目录 跨境电商什么是跨境电商跨境电商的机遇跨境电商技术支撑 海外代理IP什么是海外代理IP海外代理IP的作用如何选择海外代理IP 9Proxy9Proxy的优势9Proxy的解决方案价格汇总搜索引擎优化市场调查多重核算数据抓取广告技术 价格上手体验注册登录下载安装数据采集 总结福利 …

idea开发 java web 配电室后台管理系统bootstrap框架web结构java编程计算机网页

一、源码特点 java 配电室后台管理系统是一套完善的完整信息系统&#xff0c;结合java web开发和bootstrap UI框架完成本系统 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主 要采用B/S模式开发。 前段主要技术 cs…

武汉星起航:深耕全球市场,拓展国际影响力,共赢未来跨境新篇章

在瞬息万变的跨境电商领域&#xff0c;武汉星起航凭借其敏锐的创新意识和卓越的执行力&#xff0c;为行业注入了新的活力。作为一家追求卓越、勇于创新的企业&#xff0c;武汉星起航深知创新是成功的关键。公司通过不断探索新的商业模式、引入先进技术和优化运营流程&#xff0…

瑞吉外卖实战学习--12、分类管理的修改和删除接口实现

分类管理的修改和删除的接口实现 前言获取接口的方法修改接口的连接请求方式和参数删除接口的连接请求方式和参数 实现接口 前言 本篇实现分类的管理的修改和删除接口&#xff0c;在平时项目中最常用的就是增删改查接口&#xff0c;通过页面来的到请求的接口和方法然后通过创建…

C++数据结构与算法——二叉树公共祖先问题

C第二阶段——数据结构和算法&#xff0c;之前学过一点点数据结构&#xff0c;当时是基于Python来学习的&#xff0c;现在基于C查漏补缺&#xff0c;尤其是树的部分。这一部分计划一个月&#xff0c;主要利用代码随想录来学习&#xff0c;刷题使用力扣网站&#xff0c;不定时更…

深度学习方法;乳腺癌分类

乳腺癌的类型很多&#xff0c;但大多数常见的是浸润性导管癌、导管原位癌和浸润性小叶癌。浸润性导管癌(IDC)是最常见的乳腺癌类型。这些都是恶性肿瘤的亚型。大约80%的乳腺癌是浸润性导管癌(IDC)&#xff0c;它起源于乳腺的乳管。 浸润性是指癌症已经“侵袭”或扩散到周围的乳…

车载电子电器架构 —— 软件下载

车载电子电器架构 —— 软件下载 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无…

SSM框架学习——Eclipse创建Spring MVC maven项目

Spring MVC项目创建 什么是Spring MVC Spring MVC是Spring内置的&#xff0c;实现了Web MVC设计模式的框架。 它解决了Web开发过程中很多的问题&#xff0c;例如参数接收、表单验证等。另外它采用松散耦合可插拔组件等结构&#xff0c;具有相对较高的灵活性和扩展性。 Spri…

铸铁平台的平面度

铸铁平台的平面度是指平台的表面平整程度&#xff0c;即平台表面与其理论平面之间的最大偏差。平台的平面度通常使用国际标准符号GD&T中的平面度符号&#xff08;ⓨ&#xff09;表示&#xff0c;单位为毫米&#xff08;mm&#xff09;或微米&#xff08;μm&#xff09;。 …

类与对象(一)

目录 一、类的引入和定义 二、类的访问限定符及封装 1&#xff09;访问限定符 2&#xff09;封装 三、类的作用域和实例化 1&#xff09;类的作用域 2&#xff09;实例化 四、类的大小 1&#xff09;类的大小计算方式 2&#xff09;特殊的类的大小 五、this指针 1&…

WEB漏洞挖掘详细教程--用户输入合规性(sql注入测试)

前置教程&#xff1a;WEB漏洞挖掘&#xff08;SRC&#xff09;详细教程--信息收集篇-CSDN博客 WEB漏洞挖掘&#xff08;SRC&#xff09;详细教程--身份认证与业务一致性-CSDN博客 WEB漏洞挖掘&#xff08;SRC&#xff09;详细教程--业务数据篡改-CSDN博客 2.4 用户输入合规性…