当前位置: 首页 > news >正文

matlab使用教程(27)—微分代数方程(DAE)求解

1.什么是微分代数方程?

        微分代数方程是一类微分方程,其中一个或多个因变量导数未出现在方程中。方程中出现的未包含其导数的变量称为代数变量,代数变量的存在意味着您不能将这些方程记为显式形式 y ′ = f t , y 。相反,您可以解算下列形式的 DAE:
        • ode15s ode23t 求解器可以使用奇异质量矩阵 M t , y y ′ = f t , y 来解算微分指数为 1 的线性隐式问题,包括以下形式的半显式 DAE
y ′ = f(t , y , z)
0 = g(t , y , z) .
        在此形式中,由于主对角线存在一个或多个零值,因此代数变量的存在会产生奇异质量矩
阵。
        默认情况下,求解器会自动检验质量矩阵的奇异性,以检测 DAE 方程组。如果您提前知道奇异性,则可将 odeset MassSingular 选项设为 'yes' 。对于 DAE,您还可以使用 odeset InitialSlope 属性为求解器提供 y 0 的初始条件估计值。除此之外,还可在调用求解器时指定 y 0 的常用初始条件。
        • ode15i 求解器可解算更通用的完全隐式形式的 DAE
f(t , y , y ′ )= 0 .
        在完全隐式形式下,代数变量的存在会产生奇异 Jacobian 矩阵。这是因为,由于至少有一个变量的导数没有出现在方程中,因此矩阵中的对应列必定全部为零值。
        ode15i 求解器要求您同时为 y 0 y 0 指定初始条件。此外,与其他 ODE 求解器不同, ode15i 要求为方程编码的函数能够接受额外输入: odefun(t,y,yp)
        DAE 会产生各种方程组,因为物理守恒定律通常具有类似 x + y + z = 0 这样的形式。如果已在方程中显式定义 x x' y y' ,则此守恒方程无需 z' 表达式便足以解算 z

2.一致的初始条件

        在解算 DAE 时,可以同时为 y 0 y 0 指定初始条件。 ode15i 求解器要求同时将这两个初始条件指定为输入参数。对于 ode15s ode23t 求解器, y 0 的初始条件是可选的(但可使用 odeset InitialSlope选项指定)。这两种情况下,您所指定的初始条件可能与正在尝试解算的方程不相符。彼此冲突的初始条件称为不一致。初始条件的处理因求解器而异:
        • ode15s ode23t - 如果您没有为 y 0 指定初始值,则求解器会自动基于您为 y 0 提供的初始条件计算一致的初始条件。如果您为 y 0 指定了不一致的初始条件,则求解器会将这些值作为估计值进行处理,尝试计算接近估计值的一致值,并继续解算该问题。
        • ode15i - 您为求解器提供的初始条件必须一致,并且 ode15i 不会检查所提供的值的一致性。辅助函数 decic 可计算满足这一要求的一致初始条件。

3.微分指数

        DAE 的特征是其作为奇异性度量的微分指数。通过对方程进行微分,可以消除代数变量,并且如果执行此操作的次数足够多,这些方程将呈现为显式 ODE 方程组。DAE 方程组的微分指数是为了将方程组表示为等效的显式 ODE 方程组必须执行的求导次数。因此,ODE 的微分指数为 0。
        微分指数为 1 的 DAE 示例如下
y(t) = k(t) .
        对于此方程,只需执行一次求导便可获得显式 ODE 形式
y ′ = k ′( t)  .
        微分指数为 2 的 DAE 示例如下
y 1 = y 2
0 = k(t)  y 1 .
        这些方程要求进行两次求导才能重写为显式 ODE 形式
y 1 = k ′ ( t)
y 2 = k ′′ ( t)  .
        ode15sode23t 求解器仅可解算微分指数为 1 的 DAE。如果您的方程微分指数为 2 或更高,则需要将方程重写为微分指数为 1 的等效 DAE 方程组。您可随时对 DAE 方程组求导并将其重写为微分指数为 1 的等效 DAE 方程组。请注意,如果您将代数方程替换为其导数,则可能已删除某些约束。如果这些方程不再包含原始约束,则数值解可能发生漂移。

4.施加非负性

        odeset 的大多数选项与 DAE 求解器 ode15s ode23t ode15i 一起使用时能按预期工 作。然而,一个明显的例外是使用 NonNegative (第 11-33 页) 选项。 NonNegative 选项不支持应用于具有质量矩阵的问题的隐式求解器( ode15s ode23t ode23tb)。因此,您不能使用此选项对DAE 问题施加非负性约束,DAE 问题一定有奇异质量矩阵。

5.将 Robertson 问题作为半显式微分代数方程 (DAE) 求解

        此示例将 ODE 方程组重新表示为微分代数方程组 (DAE)。hb1ode.m 中的 Robertson 问题是刚性 ODE解算程序的经典测试问题。方程组为:
        hb1ode 将此 ODE 方程组解算为稳定状态,初始条件为有y1=1 、y2=0和y3=0 。但这些方程也满足线性守恒定律,

        在解和初始条件方面,守恒定律为 

        通过使用守恒定律确定y3的状态,该方程组可以重写为 DAE 方程组。这会将问题重新表示为 DAE 方程组  

        此方程组的微分指数为 1,因为只需y3的一个导数就能使其成为 ODE 方程组。因此,在解算该方程组之前,不需要进行更多变换。函数 robertsdae 为此 DAE 方程组编码。将 robertsdae.m 保存在您的当前文件夹中,以运行该示例。
function out = robertsdae(t,y)
out = [-0.04*y(1) + 1e4*y(2).*y(3)
0.04*y(1) - 1e4*y(2).*y(3) - 3e7*y(2).^2
y(1) + y(2) + y(3) - 1 ];
        hb1dae.m 中提供了用这种方法表示 Robertson 问题的完整示例代码。
        使用 ode15s 解算 DAE 方程组。根据守恒定律,显然需要一致的 y0 初始条件。使用 odeset 设置选项:
        • 使用常量质量矩阵表示方程组的左侧。
        • 将相对误差容限设为 1e-4
        • 使用 1e-10 的绝对误差作为第二个解分量,因为标度范围与其他分量相差很大。
        • 将 'MassSingular' 选项保留其默认值 'maybe' ,以测试 DAE 的自动检测。
y0 = [1; 0; 0];
tspan = [0 4*logspace(-6,6)];
M = [1 0 0; 0 1 0; 0 0 0];
options = odeset('Mass',M,'RelTol',1e-4,'AbsTol',[1e-6 1e-10 1e-6]);
[t,y] = ode15s(@robertsdae,tspan,y0,options);
y(:,2) = 1e4*y(:,2);
semilogx(t,y);
ylabel('1e4 * y(:,2)');
title('Robertson DAE problem with a Conservation Law, solved by ODE15S');
运行结果如下:

相关文章:

matlab使用教程(27)—微分代数方程(DAE)求解

1.什么是微分代数方程? 微分代数方程是一类微分方程,其中一个或多个因变量导数未出现在方程中。方程中出现的未包含其导数的变量称为代数变量,代数变量的存在意味着您不能将这些方程记为显式形式 y ′ f t , y 。相反,您可以…...

vue3组合式api <script setup> props 父子组件的写法

父组件传入子组个的变量&#xff0c; 子组件是无法直接修改的&#xff0c; 只能通过 emit的方式&#xff0c; 让父组件修改&#xff0c; 之后子组件更新 <template><div class"parent">我是父组件<son :msg"msg" :obj"obj" chan…...

Compose - 自定义作用域限制函数

一、概念 在 Compose 中对于作用域的应用特别多。比如 weight 修饰符只能用在 RowScope 或者 ColumnScope 作用域中&#xff0c;item 组件只能用在 LazyListScope 作用域中。 标准库中的作用域函数如 apply()、let() 会以不同方式持有和返回上下文对象&#xff0c;调用它们时 L…...

【Flutter】Flutter 使用 photo_view 实现图片查看器

【Flutter】Flutter 使用 photo_view 实现图片查看器 文章目录 一、前言二、photo_view 简介三、安装与基本使用四、使用 PhotoViewGallery 展示多张图片五、完整示例六、总结 一、前言 大家好&#xff0c;我是小雨青年&#xff0c;今天我要给大家介绍一个在 Flutter 中非常实…...

电脑组装教程分享!

案例&#xff1a;如何自己组装电脑&#xff1f; 【看到身边的小伙伴组装一台自己的电脑&#xff0c;我也想试试。但是我对电脑并不是很熟悉&#xff0c;不太了解具体的电脑组装步骤&#xff0c;求一份详细的教程&#xff01;】 电脑已经成为我们日常生活中不可或缺的一部分&a…...

【云原生之Docker实战】使用Docker部署flatnotes笔记工具

【云原生之Docker实战】使用Docker部署flatnotes笔记工具 一、flatnotes介绍1.1 flatnotes简介1.2 flatnotes特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载flatnotes…...

XSSchallenge1-20

test1 第一题直接在test插入XSS代码即可 test2 第二关对内容进行”“包裹 这里可以采用”>来绕过 test3 代码审计发现这里用了htmlspecialchars函数&#xff0c;这个函数对<>和’ “等进行了转义&#xff0c;这里可以用事件来绕过 test4 这里用了str_replace&a…...

centos 7的超详细安装教程

打开虚拟机&#xff0c;创建一个新电脑 我们选择经典&#xff0c;然后选择下一步 我们选择稍后安装&#xff0c;我们在后面进行改设备 因为centos系统是linux系统的一个版本&#xff0c;所有我们选择linux&#xff0c;版本选择centos 7 64位&#xff0c;然后就是点击下一步 这一…...

代码随想录算法训练营第五十二天 | 300.最长递增子序列,674. 最长连续递增序列,718. 最长重复子数组

代码随想录算法训练营第五十二天 | 300.最长递增子序列&#xff0c;674. 最长连续递增序列&#xff0c;718. 最长重复子数组 300.最长递增子序列674. 最长连续递增序列718. 最长重复子数组 300.最长递增子序列 题目链接 视频讲解 给你一个整数数组 nums &#xff0c;找到其中最…...

计算机图形软件(三)6-6 小结

小结 这一章概括了图形软件系统的主要特点。某些软件系统&#xff0c;如 CAD 软件包和绘图程序&#xff0c;其为特定应用而设计。另外一些软件系统则提供可以在诸如 C的程序设计语言中使用的一个通用图形子程序库&#xff0c;用来为任何应用生成图片。 ISO和AN…...

Flink常用函数

1、比较函数 <> > > < < 注意&#xff1a;select nullnull; 返回为nullIS NULL 、 IS NOT NULL --非空判断value1 IS DISTINCT FROM value2、value1 IS NOT DISTINCT FROM value2、 --不同于value1 BETWEEN [ ASYMMETRIC | S OR 、AND、NOT boolean…...

stable diffusion实践操作-embedding(TEXTUAL INVERSION)

本文专门开一节写图生图相关的内容&#xff0c;在看之前&#xff0c;可以同步关注&#xff1a; stable diffusion实践操作 可以理解为提示词的集合&#xff0c;可以省略大量的提示词。后缀safetensors&#xff0c;大小几十kb 正文 1、功能 可以理解为提示词的集合&#xff0…...

代码随想录二刷day03

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣203. 移除链表元素二、力扣707. 设计链表三、力扣206. 反转链表 前言 一、力扣203. 移除链表元素 /*** Definition for singly-linked list.* public…...

初出茅庐的小李博客之STM32F103C8T6音乐控制器实战教程【1】

STM32F103C8T6音乐控制器实战教程[1] USB简单介绍&#xff1a; "USB"代表通用串行总线&#xff08;Universal Serial Bus&#xff09;&#xff0c;是一种用于连接计算机及其外部设备的标准接口。USB接口允许各种设备&#xff08;如打印机、存储设备、键盘、鼠标、摄…...

苍穹外卖01-项目概述、环境搭建

项目概述、环境搭建 课程内容 软件开发整体介绍苍穹外卖项目介绍开发环境搭建导入接口文档Swagger 项目整体效果展示&#xff1a; 管理端-外卖商家使用用户端-点餐用户使用当我们完成该项目的学习&#xff0c;可以培养以下能力&#xff1a; 1. 软件开发整体介绍 作为一名软…...

图床项目进度(二)——动态酷炫首页

前言&#xff1a; 前面的文章我不是说我简单copy了站友的一个登录页吗&#xff0c;我感觉还是太单调了&#xff0c;想加一个好看的背景。 但是我前端的水平哪里够啊&#xff0c;于是在网上找了找制作动态背景的插件。 效果如下图。 如何使用 这个插件是particles.js 安装…...

Java“魂牵”京东商品详情描述数据,京东商品详情API接口,京东API接口申请指南

要通过京东的API获取商品详情描述数据&#xff0c;您可以使用京东开放平台提供的接口来实现。以下是一种使用Java编程语言实现的示例&#xff0c;展示如何通过京东开放平台API获取商品详情&#xff1a; 首先&#xff0c;确保您已注册成为京东开放平台的开发者&#xff0c;并创…...

Flink SQL你用了吗?

分析&回答 Flink 1.1.0&#xff1a;第一次引入 SQL 模块&#xff0c;并且提供 TableAPI&#xff0c;当然&#xff0c;这时候的功能还非常有限。Flink 1.3.0&#xff1a;在 Streaming SQL 上支持了 Retractions&#xff0c;显著提高了 Streaming SQL 的易用性&#xff0c;使…...

【位运算】leetcode面试题:消失的两个数字

一.题目描述 消失的两个数字 二.思路分析 本题难度标签是困难&#xff0c;但实际上有了只出现一次的数字iii这道题的铺垫&#xff0c;本题的思路还是很容易想到的。 温馨提示&#xff1a;阅读本文前可以先查看我的【位运算】专栏的第一篇文章&#xff0c;其中包含位运算这类…...

Vue2 集成 CodeMirror 实现公式编辑、块状文本编辑,TAG标签功能

效果图 安装codemirror依赖 本示例为Vue2项目&#xff0c;安装低版本的依赖 npm i codemirror5.65.12 npm i vue-codemirror4.0.6 实现 实现代码如下&#xff0c;里边涉及到的变量和函数自行替换即可&#xff0c;没有其他复杂逻辑。 <template><div class"p…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

goreplay

1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具&#xff0c;可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长&#xff0c;测试它所需的工作量也会呈指数级增长。GoRepl…...

Linux入门(十五)安装java安装tomcat安装dotnet安装mysql

安装java yum install java-17-openjdk-devel查找安装地址 update-alternatives --config java设置环境变量 vi /etc/profile #在文档后面追加 JAVA_HOME"通过查找安装地址命令显示的路径" #注意一定要加$PATH不然路径就只剩下新加的路径了&#xff0c;系统很多命…...

IP选择注意事项

IP选择注意事项 MTP、FTP、EFUSE、EMEMORY选择时&#xff0c;需要考虑以下参数&#xff0c;然后确定后选择IP。 容量工作电压范围温度范围擦除、烧写速度/耗时读取所有bit的时间待机功耗擦写、烧写功耗面积所需要的mask layer...

代理服务器-LVS的3种模式与调度算法

作者介绍&#xff1a;简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们上一章介绍了Web服务器&#xff0c;其中以Nginx为主&#xff0c;本章我们来讲解几个代理软件&#xff1a…...

年度峰会上,抖音依靠人工智能和搜索功能吸引广告主

上周早些时候举行的第五届年度TikTok World产品峰会上&#xff0c;TikTok推出了一系列旨在增强该应用对广告主吸引力的功能。 新产品列表的首位是TikTok Market Scope&#xff0c;这是一个全新的分析平台&#xff0c;为广告主提供整个考虑漏斗的全面视图&#xff0c;使他们能够…...