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

这篇具有很好参考价值的文章主要介绍了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) .
        在此形式中,由于主对角线存在一个或多个零值,因此代数变量的存在会产生奇异质量矩
阵。
matlab使用教程(27)—微分代数方程(DAE)求解,从0开始学Matlab,matlab,算法,机器学习
        默认情况下,求解器会自动检验质量矩阵的奇异性,以检测 DAE 方程组。如果您提前知道奇异性,则可将 odeset MassSingular 选项设为 'yes' 。对于 DAE,您还可以使用 odeset InitialSlope 属性为求解器提供 y 0 的初始条件估计值。除此之外,还可在调用求解器时指定 y 0 的常用初始条件。
        • ode15i 求解器可解算更通用的完全隐式形式的 DAE
f(t , y , y ′ )= 0 .
        在完全隐式形式下,代数变量的存在会产生奇异 Jacobian 矩阵。这是因为,由于至少有一个变量的导数没有出现在方程中,因此矩阵中的对应列必定全部为零值。
matlab使用教程(27)—微分代数方程(DAE)求解,从0开始学Matlab,matlab,算法,机器学习
        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解算程序的经典测试问题。方程组为:
matlab使用教程(27)—微分代数方程(DAE)求解,从0开始学Matlab,matlab,算法,机器学习
        hb1ode 将此 ODE 方程组解算为稳定状态,初始条件为有y1=1 、y2=0和y3=0 。但这些方程也满足线性守恒定律,
matlab使用教程(27)—微分代数方程(DAE)求解,从0开始学Matlab,matlab,算法,机器学习

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

matlab使用教程(27)—微分代数方程(DAE)求解,从0开始学Matlab,matlab,算法,机器学习

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

matlab使用教程(27)—微分代数方程(DAE)求解,从0开始学Matlab,matlab,算法,机器学习文章来源地址https://www.toymoban.com/news/detail-679200.html

        此方程组的微分指数为 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 设置选项:
        • 使用常量质量矩阵表示方程组的左侧。
matlab使用教程(27)—微分代数方程(DAE)求解,从0开始学Matlab,matlab,算法,机器学习
        • 将相对误差容限设为 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)求解,从0开始学Matlab,matlab,算法,机器学习

到了这里,关于matlab使用教程(27)—微分代数方程(DAE)求解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【线性代数及其应用 —— 第一章 线性代数中的线性方程组】-1.线性方程组

    所有笔记请看: 博客学习目录_Howe_xixi的博客-CSDN博客 https://blog.csdn.net/weixin_44362628/article/details/126020573?spm=1001.2014.3001.5502 思维导图如下:  内容笔记如下:

    2024年02月06日
    浏览(64)
  • 线性代数3:矢量方程

            欢迎回到系列文章的第三篇文章,内容是线性代数的基础知识,线性代数是机器学习背后的基础数学。在我之前的文章中,我介绍了梯队矩阵形式。本文将介绍向量、跨度和线性组合,并将这些新想法与我们已经学到的内容联系起来。本文最好与David C. Lay,Steve

    2024年01月17日
    浏览(38)
  • 线性代数——线性方程组

    学习高等数学和线性代数需要的初等数学知识 线性代数——行列式 线性代数——矩阵 线性代数——向量 线性代数——线性方程组 线性代数——特征值和特征向量 线性代数——二次型 本文大部分内容皆来自李永乐老师考研教材和视频课。 方程组 { a 11 x 1 + a 12 x 2 + ⋯ + a 1

    2024年02月16日
    浏览(53)
  • 线性代数(三) 线性方程组

    如何利用行列式,矩阵求解线性方程组。 用矩阵方程表示 齐次线性方程组:Ax=0; 非齐次线性方程组:Ax=b. 可以理解 齐次线性方程组 是特殊的 非齐次线性方程组 如何判断线性方程组的解 其中R(A)表示矩阵A的秩 B表示A的增广矩阵 n表示末知数个数 增广矩阵 矩阵的秩 秩r= 未知

    2024年02月13日
    浏览(61)
  • 线性代数之线性方程组

    目录 文章目录 一、具体型方程组  1. 解线性方程组     1.1 齐次线性方程组          1.1.1 解向量及其性质          1.1.2基础解系         1.1.3齐次线性方程组有非零解的充要条件及通解  1.2 非齐次线性方程组            1.2.1克拉默法则         1.2.2几个相关说法的等

    2024年02月20日
    浏览(58)
  • 线性代数思维导图--线性代数中的线性方程组(1)

    1.解线性方程组 2.线性方程组解的情况 3.线性方程组的两个基本问题 1.阶梯型矩阵性质 2.简化阶梯型矩阵(具有唯一性) 3.行化简算法 4.线性方程组的解 1.R^2中的向量 2.R^2中的几何表示 3.R^n中的向量 4.线性组合与向量方程 5.span{v},span{u,v}的几何解释 1.定义 2.定理 3.解的存在性

    2024年02月02日
    浏览(88)
  • 线性代数1:线性方程和系统

    Digital Collection (staedelmuseum.de) 图片来自施泰德博物馆         通过这些文章,我希望巩固我对这些基本概念的理解,同时如果可能的话,通过我希望成为一种基于直觉的数学学习方法为其他人提供额外的清晰度。如果有任何错误或机会需要我进一步阐述,请分享,我可以进

    2024年02月06日
    浏览(42)
  • 线性代数基础【4】线性方程组

    定理1 设A为mXn矩阵,则 (1)齐次线性方程组AX=0 只有零解的充分必要条件是r(A)=n; (2)齐次线性方程组AX=0 有非零解(或有无数个解)的充分必要条件是r(A)<n 推论1 设A为n阶矩阵,则 (1)齐次线性方程组AX=0只有零解的充分必要条件是|A|≠0; (2)齐次线性方程组AX=0有非零解(或有无数个解)的

    2024年02月01日
    浏览(69)
  • 线性代数(第四章)线性方程组

    4.1 线性方程组 ● 由二元一次方程的消元法,交换两个方程,用非零数乘以某个方程,某方程乘以k倍加到另一方程。这个与矩阵的初等行变换相似。 ● 将上面方程组的未知数去掉,将系数写在一个矩阵中。就可以表示该方程组。并可以通过矩阵的初等行变换求解。 4.2 线性

    2024年04月26日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包