当前位置: 首页 > 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…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...