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 概念 基于现有的数据,计算出来的新属…

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

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

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 通信端口,采用即插即用模式,无需繁琐的配置,减轻现场安装调试的工作量。为了满足…

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

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

POSTGRESQL 如何用系统函数来诊断权限问题

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…

2023MySQL+MyBatis知识点整理

文章目录 主键 外键 的区别?什么是范式?什么是反范式?什么是事务?MySQL事务隔离级别?MySQL事务默认提交模式?MySQL中int(1)和int(10)的区别MySQL 浮点数会丢失精度吗?MySQL支持哪几种时间类型&a…

springcloud3 GateWay章节-Nacos+gateway动态路由负载均衡4

一 工程结构 1.1 工程 1.2 搭建gatewayapi工程 1.pom文件 <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency><!--gateway--&g…

复习之web服务器--apache

PS&#xff1a;Vim复制小技巧 一、实验环境 两台虚拟机 (nodea,nodeb)配置ip搭建软件仓库关闭selinux [rootftp Desktop]# hostnamectl set-hostname nodea.westos.org [rootftp Desktop]# hostname nodea.westos.org [rootftp Desktop]# ifconfig enp1s0: flags4163<UP,B…

大数据开发要学习什么?学完又能做什么

学习大数据需要掌握什么语言基础&#xff1f; 1、Java基础 大数据框架90%以上都是使用Java开发语言&#xff0c;所以如果要学习大数据技术&#xff0c;首先要掌握Java基础语法以及JavaEE方向的相关知识。 2、MySQL数据库 这是学习大数据必须掌握的知识之一。数据的操作语言是…

Vue2向Vue3过度核心技术组件通信

目录 1 组件基础知识scoped解决样式冲突1.1 默认情况&#xff1a;1.2 代码演示1.3 scoped原理1.4 总结 2 组件基础知识data必须是一个函数2.1 data为什么要写成函数2.2 代码演示2.3 总结 3 组件通信3.1 什么是组件通信&#xff1f;3.2 组件之间如何通信3.3 组件关系分类3.4 通信…

为什么使用Nacos而不是Eureka(Nacos和Eureka的区别)

文章目录 前言一、Eureka是什么&#xff1f;二、Nacos是什么&#xff1f;三、Nacos和Eureka的区别3.1 支持的CAP3.2连接方式3.3 服务异常剔除3.4 操作实例方式 总结 前言 为什么如今微服务注册中心用Nacos相对比用Eureka的多了&#xff1f;本文章将介绍他们之间的区别和优缺点…

【element-ui】el-dialog改变宽度

dialog默认宽度为父元素的50%&#xff0c;这就导致在移动端会非常的窄&#xff0c;如图1&#xff0c;需要限定宽度。 解决方法&#xff1a;添加custom-class属性&#xff0c;然后在style中编写样式&#xff0c;注意&#xff0c;如果有scoped限定&#xff0c;需要加::v-deep &l…

浅谈Spark的RDD、部署模式

一、RDD Spark RDD&#xff08;弹性分布式数据集&#xff09;&#xff0c;弹性是指Spark可以通过重新计算来自动重建丢失的分区。 从本质上讲&#xff0c;RDD 是数据元素的不可变分布式集合&#xff0c;跨集群中的节点进行分区&#xff0c;可以与提供转换和操作的低级 API 并行…