matlab使用教程(24)—常微分方程(ODE)求解器

1.常微分方程

        常微分方程 (ODE) 包含与一个自变量 t(通常称为时间)相关的因变量 y 的一个或多个导数。此处用于表示 y 关于 t 的导数的表示法对于一阶导数为 y ,对于二阶导数为 y ′′,依此类推。ODE 的阶数等于 y 在方程中出现的最高阶导数。
        例如,这是一个二阶 ODE:
y ′′ = 9 y
        在初始值问题中,从初始状态开始解算 ODE。利用初始条件 y 0 以及要在其中求得答案的时间段(t0,tf ),以迭代方式获取解。在每一步,求解器都对之前各步的结果应用一个特定算法。在第一个这样的时间步,初始条件将提供继续积分所需的必要信息。最终结果是,ODE 求解器返回一个时间步向量t = [ t 0 , t 1 , t 2 , ..., t f ] 以及在每一步对应的解 y = [y0 , y 1 , y 2 , ..., yf ]。

2.ODE 的类型

        MATLAB 中的 ODE 求解器可解算以下类型的一阶 ODE:
        • y ′ = f(t , y  )形式的显式 ODE。
        • M (t , y )y ′ = f (t , y  )形式的线性隐式 ODE,其中 M t , y 为非奇异质量矩阵。该质量矩阵可以是时间或状态依赖的矩阵,也可以是常量矩阵。线性隐式 ODE 涉及在质量矩阵中编码的一阶 y 导数的线性组合。
        线性隐式 ODE 可随时变换为显式形式 y′ = M^{-1}(t,y)f(t,y)。不过,将质量矩阵直接指定给 ODE 求解器可避免这种既不方便还可能带来大量计算开销的变换操作。
        • 如果 y′ 的某些分量缺失,则这些方程称为微分代数方程或 DAE,并且 DAE 方程组会包含一些代数变量。代数变量是导数未出现在方程中的因变量。可通过对方程求导来将 DAE 方程组重写为等效的一阶ODE 方程组,以消除代数变量。将 DAE 重写为 ODE 所需的求导次数称为微分指数。 ode15sode23t 求解器可解算微分指数为 1 的 DAE。
        • f( t , y , y ′ )= 0 形式的完全隐式 ODE。完全隐式 ODE 不能重写为显式形式,还可能包含一些代数变量。ode15i 求解器专为完全隐式问题(包括微分指数为 1 的 DAE)而设计。
        可通过使用 odeset 函数创建 options 结构体,来针对某些类型的问题为求解器提供附加信息。

3.ODE 方程组

        您可以指定需要解算的任意数量的 ODE 耦合方程,原则上,方程的数量仅受计算机可用内存的限制。如果方程组包含 n 个方程,
        则用于编写该方程组代码的函数将返回一个向量,其中包含 n 个元素,对应于 y 1 , y 2 , … , y n 值。例如,考虑以下包含两个方程的方程组
        用于编写该方程组代码的函数为
function dy = myODE(t,y)
dy(1) = y(2);
dy(2) = y(1)*y(2)-2;
end

4.高阶 ODE

        MATLAB ODE 求解器仅可解算一阶方程。您必须使用常规代换法,将高阶 ODE 重写为等效的一阶方程组
y 1 = y
y 2 = y
y 3 = y ′′
y n = y^{n-1} .
        这些代换将生成一个包含 n 个一阶方程的方程组

        例如,考虑三阶 ODE :y′′′ − y′′y + 1 = 0,并使用代换法

y 1 = y
y 2 = y
y 3 = y ′′
        生成等效的一阶方程组

        此方程组的代码则为 

function dydt = f(t,y)dydt(1) = y(2);dydt(2) = y(3);dydt(3) = y(1)*y(3)-1;
end

5.复数 ODE

        考虑复数 ODE 方程
y ′ = f (t , y ) ,
        其中 y = y 1 + iy 2。为解算该方程,需要将实部和虚部分解为不同的解分量,最后重新组合相应的结果。从概念上讲,这类似于
例如,如果 ODE 为 y ′ = yt + 2 i ,则可以使用函数文件来表示该方程:
function f = complexf(t,y)
f = y.*t + 2*i;
end
        然后,分解实部和虚部的代码为
function fv = imaginaryODE(t,yv)
% Construct y from the real and imaginary components
y = yv(1) + i*yv(2);
% Evaluate the function
yp = complexf(t,y);
% Return real and imaginary in separate components
fv = [real(yp); imag(yp)];
end
        在运行求解器以获取解时,初始条件 y0 也会分解为实部和虚部,以提供每个解分量的初始条件。
y0 = 1+i;
yv0 = [real(y0); imag(y0)];
tspan = [0 2];
[t,yv] = ode45(@imaginaryODE, tspan, yv0);
        获得解后,将实部和虚部分量组合到一起可获得最终结果。
y = yv(:,1) + i*yv(:,2);

6.基本求解器选择

        ode45 适用于大多数 ODE 问题,一般情况下应作为您的首选求解器。但对于精度要求更宽松或更严格的问题而言, ode23 ode78 ode89 ode113 可能比 ode45 更加高效。
        一些 ODE 问题具有较高的计算刚度或难度。术语“刚度”无法精确定义,但一般而言,当问题的某个位置存在标度差异时,就会出现刚度。例如,如果 ODE 包含的两个解分量在时间标度上差异极大,则该方程可能是刚性方程。如果非刚性求解器(例如 ode45)无法解算某个问题或解算速度极慢,则可以将该问题视为刚性问题。如果您观察到非刚性求解器的速度很慢,请尝试改用 ode15s 等刚性求解器。在使用刚性求解器时,可以通过提供 Jacobian 矩阵或其稀疏模式来提高可靠性和效率。
        下表提供了关于何时使用每种不同求解器的一般指导原则。

 

7.ODE 示例和文件摘要

        有几个示例文件可用作大多数 ODE 问题的有用起点。要运行微分方程示例应用,以便轻松浏览和运行示例,请键入
odeexamples
        要打开单独的示例文件进行编辑,请键入
edit exampleFileName.m
        要运行示例,请键入
exampleFileName
        此表包含可用的 ODE 和 DAE 示例文件及其使用的求解器和选项的列表。其中包含示例子集的链接,这些示例也已直接发布在文档中。

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

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

相关文章

Springboot配置高级

临时属性设置 带属性数启动SpringBoot java –jar springboot.jar –-server.port80携带多个属性启动SpringBoot,属性间使用空格分隔 属性加载优先顺序 参看https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-fea…

pgadmin4中的备份与恢复

一,postgresql 数据的备份与恢复 (一)数据库备份与恢复 1,备份 windows环境 1> dump 逻辑备份 1,用管理员身份打开power shell 2,切换到本机 postgresql 安装目录下的 bin 目录: PS C…

GIT 常用指令

基础指令 $ git init #初始化仓库,在该文件夹创建的为workspace$ git add . #已暂存 [.通配符,全部添加]$ git commit -m "log add file" #提交到仓库,并写了日志 ”log add file“$ git status #查看状态,可查看被修改的文件…

Prometheus+Grafana+AlertManager监控SpringBoot项目并发送邮件告警通知

文章目录 PrometheusGrafanaAlertManager监控平台搭建新建SpringBoot项目为Prometheus提供指标新建项目,引入依赖新建接口,运行程序 推送指标到pushgateway 开始监控Grafana连接Prometheus数据源导入Grafana模板监控SpringBoot项目 邮件告警通知同系列文…

Windows如何部署Redis

一、简介 Redis (Remote Dictionary Server) 是一个由意大利人 Salvatore Sanfilippo 开发的 key-value 存储系统,具有极高的读写性能,读的速度可达 110000 次/s,写的速度可达 81000 次/s 。 二、下载 访问 https://github.com/tporadows…

字符串经典问题

1. 验证回文串 验证回文串 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s,如果它是 回文串 ,返回 t…

Vue2向Vue3过度核心技术computed计算属性

目录 1 computed计算属性1.1 概念1.2 语法1.3 注意1.4.案例1.5.代码准备 2 computed计算属性 VS methods方法2.1 computed计算属性2.2 methods计算属性2.3 计算属性的优势2.4 总结 3 计算属性的完整写法 1 computed计算属性 1.1 概念 基于现有的数据,计算出来的新属…

React Navigation 开发准备

需要 React Native 使用 React Navigation 的话,我们需要首先安装如下几个包: npm install react-navigation/native npm install react-native-screens react-native-safe-area-context开发之前做一些处理 如果您使用的是 Mac 并针对 iOS 进行开发&am…

探索AIGC人工智能(Midjourney篇)(一)

文章目录 案例图片 Midjourney注册 创建Discord账号 下载客户端 添加Midjourney到自己的服务器 用Midjourney画一只会飞的鸭子 Midjourney绘画指令 Midjourney绘画指令_激发Midjourney的创造力 Midjourney绘画指令_Seed指令 Midjourney光线关键词,打造震撼…

leetcode做题笔记98. 验证二叉搜索树

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 思路一:递归 …

软件宇宙中的星体:软件群星的闪耀

软件宇宙中的星体:软件群星的闪耀 引言 在当今信息时代,软件已经成为人类社会不可或缺的一部分。无论是移动应用、桌面软件、云计算平台,还是嵌入式系统,各种类型的软件构成了一个庞大而复杂的宇宙。这些软件就如同群星一样&…

MySQL 安装配置

MySQL 安装配置 MySQL 是最流行的关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。 MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 MySQL由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL…

XGBoost,NVIDIA是什么

目录 XGBoost 算法层面 什么是 XGBoost GBDT是什么 GBDT中的GB 为何选择 XGBoost? XGBoost 的优势和属性 XGBoost 和数据科学家 为何 XGBoost 在 GPU 上表现更出色 XGBoost RAPIDS GPU 加速的 XGBoost NVIDIA是什么 使用 Spark XGBoost 的 GPU 加速端…

晨控CK-GW208与三菱L系列PLC以TCP通讯手册

晨控CK-GW208是一款支持标准工业以太网协议的IO-LINK主站网关,方便用户快速便捷的集成到 PLC 等控制系统中。 CK-GW208主站网关集成 8 路 IO-LINK 通信端口,采用即插即用模式,无需繁琐的配置,减轻现场安装调试的工作量。为了满足…

如何撰写具有传播力的品牌软文?

企业为了能将自己的品牌宣传推广出去,不论是在品牌初创还是成熟阶段都会撰写很多的新闻软文稿件发布在各大媒体平台上,为的就是能起到持续宣传和影响的效果! 软文不但要求短小精悍,更注重内容的精准。不管是什么类型的文章&#…

android - fragment 数据丢失?状态丢失?

最佳答案 一些状态丢失的例子: 1. 假设您有一个按钮和一个 TextView 。在代码中,你已经定义了初始值为 0 的整数 i,它通过单击按钮递增 1,并且它的值显示在 TextView 中。假设你已经按下按钮 5 次,那么 textview 将被设置为 0。也…

数据库选型<1>

数据库选型 1.SQL与NoSQL1.SQL2.NoSQL 2.各种数据存储的适应场景1.MySQL 3.构建MySQL开发环境 1.SQL与NoSQL 1.SQL 关系型数据库 MySQLOracleSQL serverPostGreSQL 关系型数据库的特点 数据结构化存储在二维表中(新增JSON存储方式,也有nosql的特点)支持事务的原子…

从按下电源键到进入系统,CPU在干什么?

本专栏更新速度较慢,简单讲讲计算机的那些事,简单讲讲那些特别散乱杂的知识,欢迎各位朋友订阅专栏 非常感谢一路相伴的大佬们 浅淡计算机系列第2篇 目录 通电 保护模式和实模式 内存管理单元MMU 逻辑地址?物理地址&#xff1…

MyBatis:使用注解让数据库操作更简单

目录 一、简介 二、配置 三、基于注解的基本使用 四、测试 总结 一、简介 在Java开发中,数据库操作是一个常见而重要的任务。为了方便地执行SQL语句,获取结果集,处理异常等,我们通常需要使用JDBC(Java Database …

【SA8295P 源码分析】25 - QNX Ethernet MAC 驱动 之 emac_isr_thread_handler 中断处理函数源码分析

【SA8295P 源码分析】25 - QNX Ethernet MAC 驱动 之 emac_isr_thread_handler 中断处理函数源码分析 一、emac 中断上半部:emac_isr()二、emac 中断下半部:emac_isr_thread_handler()2.1 emac 中断下半部:emac_isr_sw()系列文章汇总见:《【SA8295P 源码分析】00 - 系列文章…