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

matlab使用教程(25)—常微分方程(ODE)选项

1.ODE 选项摘要

        解算 ODE 经常要求微调参数、调整误差容限或向求解器传递附加信息。本主题说明如何指定选项以及每个选项与哪些微分方程求解器兼容。

1.1 选项语法

        使用 odeset 函数创建 options 结构体,然后将其作为第四个输入参数传递给求解器。例如,要调整相对和绝对误差容限,请使用以下命令:
opts = odeset('RelTol',1e-2,'AbsTol',1e-5);
[t,y] = ode45(@odefun,tspan,y0,opts);
        如果您使用不带输入参数的 odeset 命令,MATLAB 将显示每个选项的可能值列表,并以花括号 {} 表示默认值。
        odeget 函数可以查询现有结构体中的选项值,您可以用该函数来根据条件动态更改选项值。例如,以下代码检测 Stats 是否设置为 'on' ,并根据需要更改其值:
if isempty(odeget(opts,'Stats'))
odeset(opts,'Stats','on')
end

1.2 选项与每个求解器的兼容性

        在 odeset 中,有些选项是通用的,可与任何求解器兼容,还有一些选项是特定于求解器的。下表总结了每个选项与不同求解器之间的兼容性。

        * 只有在解算不涉及质量矩阵的问题时,才对 ode15s ode23t ode23tb 求解器使用 NonNegative 参数。
        ** ode15i 的事件函数必须接受 yp 的第三个输入参数。

1.3 用法示例

        MATLAB 包含几个示例文件,说明了如何使用各种选项。例如,键入 edit ballode 查看使用 'Events' 指定事件函数的示例,或键入 edit batonode 查看使用 'Mass' 指定质量矩阵的示例。有关示例文件及其使用的选项的完整总结,请参阅 “ODE 示例和文件摘要” 。

2.ODE 事件位置

2.1 什么是事件位置?

        某些 ODE 方程组的解算难度部分在于确定停止求解的合适时间。积分区间中的最终时间可能由具体事件(而非数字)进行定义。从树上落下的苹果便是一个示例。ODE 求解器应当在苹果落地后立即停止,但您事前并不知道该事件会在何时发生。与之相似地,有些问题所涉及的事件则不会终止求解。沿行星轨道运行的卫星便是一个示例。这种情况下,您可能不希望提前停止积分,但仍希望检测到卫星每次围绕较大天体完成一个运行周期的时刻。
        在 ODE 的求解过程中,使用事件函数来检测发生特定事件的时刻。事件函数采用您指定的表达式,并在该表达式等于零时检测事件。它们还能在检测到事件时提示 ODE 求解器停止积分。

2.2 编写事件函数

        使用 odeset 函数的 'Events' 选项指定事件函数。事件函数必须具有一般形式
[value,isterminal,direction] = myEventsFcn(t,y)
        在 ode15i 的情况下,事件函数还必须接受 yp 的第三个输入参数。
        输出参数 value isterminal direction 均为向量,其第 i 个元素与第 i 个事件相对应:
        • value(i) 是描述第 i 个事件的数学表达式。当 value(i) 等于零时发生事件。
        • 如果当第 i 个事件发生时停止积分,则 isterminal(i) = 1 。否则为 0
        • 如果需要查找全零值(默认值),则 direction(i) = 0 。值为 +1 时仅在事件函数递增的位置查找零,值为 -1 时仅在事件函数递减的位置查找零。指定 direction = [] 将对所有事件使用默认值 0。再次考虑苹果从树上落下的情形。表示落体的 ODE 为
        初始条件为 y 0 = 1 y ′ 0 = 0 。您可以使用事件函数来确定 y t = 0 的时刻,即苹果落地的时刻。对于此问题,检测苹果何时落地的事件函数为
function [position,isterminal,direction] = appleEventsFcn(t,y)
position = y(1); % The value that we want to be zero
isterminal = 1; % Halt integration
direction = 0; % The zero can be approached from either direction
end

2.3 事件信息

        如果指定了事件函数,则使用三个额外的输出参数调用 ODE 求解器,如下所示
[t,y,te,ye,ie] = odeXY(odefun,tspan,y0,options)
        求解器返回的三个附加输出对应于检测到的事件:
        • te 是发生事件的时刻的列向量。
        • ye 包含 te 中的每个事件时刻对应的解值。
        • ie 包含事件函数返回的向量的索引。这些值指示求解器检测到的事件。
        您也可以使用单个输出来调用求解器,如下所示
sol = odeXY(odefun,tspan,y0,options)
        这种情况下,事件信息以 sol.te sol.ye sol.ie 的形式存储在结构体中。

2.4 局限性

        ODE 求解器采用的与事件函数配合使用的求根机制存在下列局限性:
        • 如果在积分的第一步即发生终止事件,则求解器会将该事件记录为非终止事件并继续积分。
        • 如果在第一步发生多个终止事件,则仅记录第一个事件,并且求解器会继续积分。
        • 零值由每步之间的符号交叉确定。因此,对于两步间有偶数个交叉的函数而言,可能会错失其零值。如果求解器步长跨越了多个事件,请尝试减小 RelTol AbsTol 以提高精度。也可以设置 MaxStep 以便为步长设置上限。调整 tspan 不会更改求解器所用的步长。

2.5 简单事件位置:弹球

        此示例说明如何编写一个与 ODE 求解器配合使用的简单事件函数。示例文件 ballode 将模拟弹球的运动。事件函数在球每次弹起时停止积分,然后使用新的初始条件重新开始积分。在球的弹跳过程中,积分多次停止并重新开始。弹球的方程为
function [value,isterminal,direction] = bounceEvents(t,y)
value = y(1); % Detect height = 0
isterminal = 1; % Stop the integration
direction = -1; % Negative direction only
        键入 ballode 以运行该示例并演示使用事件函数模拟球弹跳的过程。
ballode

2.6 高级事件位置:限制性三体问题

        此示例说明如何使用事件函数的定向分量。示例文件 orbitode 模拟限制性三体问题,其中一个主体环绕两个大得多的主体做轨道运行。事件函数将确定轨道中距离环绕主体最近和最远的点。由于事件函数在轨道最近点和最远点的值相同,因此将使用过零的方向来区分二者。限制性三体问题的方程为

        前两个解分量是微小物体的坐标,因此针对一个分量绘制另一个分量可以得到物体的轨迹。orbitode.m 中嵌套的事件函数将搜索两个事件。一个事件查找距离起点最远的点,另一个事件查找宇宙飞船返回到起点的点。即使积分器使用的步长并非通过事件位置确定,也会准确定位事件。在此示例中,指定过零方向的功能非常重要。返回到起点的点和距离起点最远的点具有相同的事件值,并由交叉方向来区分这两个点。为此行为编码的事件函数为

function [value,isterminal,direction] = orbitEvents(t,y)
% dDSQdt is the derivative of the equation for current distance. Local
% minimum/maximum occurs when this value is zero.
dDSQdt = 2 * ((y(1:2)-y0(1:2))' * y(3:4));
value = [dDSQdt; dDSQdt];
isterminal = [1; 0]; % stop at local minimum
direction = [1; -1]; % [local minimum, local maximum]
end
        键入 orbitode 以运行该示例。
orbitode
This is an example of event location where the ability to
specify the direction of the zero crossing is critical. Both
the point of return to the initial point and the point of
maximum distance have the same event function value, and the
direction of the crossing is used to distinguish them.
Calling ODE45 with event functions active...
Note that the step sizes used by the integrator are NOT
determined by the location of the events, and the events are
still located accurately.

相关文章:

matlab使用教程(25)—常微分方程(ODE)选项

1.ODE 选项摘要 解算 ODE 经常要求微调参数、调整误差容限或向求解器传递附加信息。本主题说明如何指定选项以及每个选项与哪些微分方程求解器兼容。 1.1 选项语法 使用 odeset 函数创建 options 结构体,然后将其作为第四个输入参数传递给求解器。例如&#xff0…...

MybatisPlus简单到入门

一、MybatisPlus简介 1、入门案例(重点): 1.SpringBoot整合MP1).创建新模块选择,Spring项初始化。2).选择当前模块使用的技术,只保留MySQL Driver就行,不要选择mybatis避免与后面导入mybatisPlus的依赖发…...

9. 优化器

9.1 优化器 ① 损失函数调用backward方法,就可以调用损失函数的反向传播方法,就可以求出我们需要调节的梯度,我们就可以利用我们的优化器就可以根据梯度对参数进行调整,达到整体误差降低的目的。 ② 梯度要清零,如果梯…...

go学习之流程控制语句

文章目录 流程控制语句1.顺序控制2.分支控制2.1单分支2.2双分支单分支和双分支的四个题目switch分支结构 3.循环控制for循环控制while 和do...while的实现 4.跳转控制语句breakcontinuegotoreturngotoreturn 流程控制语句 介绍:在程序中,程序运行的流程…...

docker基于已有容器和通过Dockerfile进行制作镜像配置介绍

目录 一.制作镜像的两种方式 1.在已有容器中更新并提交这个镜像 2.使用Dockerfile来制作 二.基于容器制作镜像 1.格式 (1)主要格式 (2)可选参数 2.案例 基于容器创建镜像设置标签并进行验证是否可用 (1&…...

2022年09月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;最长上升子序列 一个数的序列bi&#xff0c;当b1 < b2 < … < bS的时候&#xff0c;我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN)&#xff0c;我们可以得到一些上升的子序列(ai1, ai2, …, aiK)&#xff0c;这里1 < i1 < i2 &…...

二级MySQL(九)——表格数据处理练习

在Mysql中&#xff0c;可以用INSERT或【REPLACE】语句&#xff0c;向数据库中已一个已有的表中插入一行或多行记录。 在Mysql中&#xff0c;可以用【DELETE】或【TRUNCATE】语句删除表中的所有记录。 在Mysql中&#xff0c;可以用【UPDATE】语句来修改数据表中的记录。 为了完…...

QT ListQvector at赋值出错以及解决办法 QT基础入门【QT存储结构】

1、问题 error: passing const QString as this argument discards qualifiers error: assignment of read-only location vec.QVector<int>::at(0) 在Qt中QList,Qvector一般获取元素都是通过at(index)来获取,但是at()的返回是一个const & 常引用,也就是元素不支…...

STM32 CubeMX (H750)RGB屏幕 LTDC

STM32 CubeMX STM32 RGB888 LTDC STM32 CubeMX一、STM32 CubeMX 设置时钟树LTDC使能设置屏幕参数修改RGB888的GPIO 二、代码部分效果 RGB屏幕线束定义&#xff1a; 一、STM32 CubeMX 设置 时钟树 这里设置的时钟&#xff0c;关于刷新速度 举例子&#xff1a;LCD_CLK24MHz 时…...

Redis问题集合(三)在Redis容器里设置键值对

前言 前提是已经拉取了Redis镜像并创建了对应的容器做个记录&#xff0c;方便后续查看 步骤 查看Redis容器的ID&#xff1a;docker ps -a 进入容器&#xff1a;docker exec -it 容器ID /bin/bash进入redis命令行&#xff1a;redis-cli输入密码&#xff1a;auth 配置密码 查看…...

spark中排查Premature EOF: no length prefix available

报错信息 /07/22 10:20:28 WARN DFSClient: Error Recovery for block BP-888461729-172.16.34.148-1397820377004:blk_15089246483_16183344527 in pipeline 172.16.34.64:50010, 172.16.34.223:50010: bad datanode 172.16.34.64:50010 [DataStreamer for file /bdp/data/u9…...

numpy高级函数之where和extract函数

1 numpy.where() 函数返回输入数组中满足给定条件的元素的索引 ---------------------------------------------------- 代码&#xff1a; n1np.random.randint(10,20,10) n2np.where(n1>15) 结果&#xff1a; [17 15 19 15 12 10 16 11 15 13] #原始数组 (array([…...

用Python写一个武侠游戏

前言 在本教程中&#xff0c;我们将使用Python写一个武侠类的游戏&#xff0c;大的框架全部搭好了&#xff0c;很多元素都可以自己添加&#xff0c;让游戏更丰富 &#x1f4dd;个人主页→数据挖掘博主ZTLJQ的主页 个人推荐python学习系列&#xff1a; ☄️爬虫JS逆向系列专栏 -…...

Java --- 异常处理

目录 一、什么是异常 二、异常抛出机制 三、如何对待异常 四、 Java异常体系 4.1、Throwable 4.2、Error 4.2、Exception 4.2.1、编译时异常 4.2.2、运行时期异常 五、异常处理 5.1、捕获异常&#xff08;try-catch&#xff09; 5.1.2、catch中异常处理方式 …...

CDN/DCDN(全站加速)排查过程中如何获取Eagle ID/UUID

目录 前言1.通过浏览器直接访问文件时获取Request ID 前言 阿里云CDN/DCDN(全站加速)为接收到的每个请求分配唯一的服务器请求ID&#xff0c;作为关联各类日志信息的标识符。当您在使用CDN/DCDN(全站加速)过程中遇到错误且希望阿里云技术支持提供协助时&#xff0c;需要提交失…...

网络安全应急响应预案培训与演练目的

1、增强网络安全意识 网络安全事故隐患往往“生成”于无形。例如&#xff0c;漏洞或黑客攻 击发生之时&#xff0c;受害方企事业单位可能处于非常危险的境地而无所察 觉&#xff0c;一些内部部门人员的网络安全意识也容易懈怠。但不论是内部 员工的疏忽还是管理上的大意&am…...

2023年高教社杯 国赛数学建模思路 - 复盘:校园消费行为分析

文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…...

7.Oracle视图创建与使用

1、视图的创建与使用 在所有进行的SQL语句之中&#xff0c;查询是最复杂的操作&#xff0c;而且查询还和具体的开发要求有关&#xff0c;那么在开发过程之中&#xff0c;程序员完成的并不是是和数据库的所有内容&#xff0c;而更多的是应该考虑到程序的设计结构。可以没有一个项…...

rust学习-不安全操作

在 Rust 中,不安全代码块用于避开编译器的保护策略 四种不安全操作 解引用裸指针通过 FFI (Foreign Function Interface,外部语言函数接口)调用函数调用不安全的函数内联汇编(inline assembly)解引用裸指针 原始指针(raw pointer,裸指针)* 和引用 &T 有类似的功…...

RHCE——八、DNS域名解析服务器

RHCE 一、概述1、产生原因2、作用3、连接方式4、因特网的域名结构4.1 拓扑4.2 分类4.3 域名服务器类型划分 二、DNS域名解析过程1、分类2、解析图&#xff1a;2.1 图&#xff1a;2.2 过程分析 三、搭建DNS域名解析服务器1、概述2、安装软件3、/bind服务中三个关键文件4、配置文…...

iOSDeviceSupport终极指南:如何快速解决Xcode设备支持文件缺失问题

iOSDeviceSupport终极指南&#xff1a;如何快速解决Xcode设备支持文件缺失问题 【免费下载链接】iOSDeviceSupport All versions of iOS Device Support 项目地址: https://gitcode.com/gh_mirrors/ios/iOSDeviceSupport 你是否曾经在iOS开发中遇到过这样的困扰&#xf…...

3款实用论文降重神器,帮你轻松解决重复率难题

对于正在撰写毕业论文或者期刊论文的创作者来说&#xff0c;重复率不达标绝对是最头疼的问题之一。自己手动改了三五遍&#xff0c;重复率还是卡在要求线以上&#xff0c;不仅耽误时间还影响心态&#xff0c;这时候一款好用的降重工具就能帮你省下不少精力。今天我们就以第三方…...

三步打造你的数字记忆库:WeChatMsg微信聊天记录永久保存指南

三步打造你的数字记忆库&#xff1a;WeChatMsg微信聊天记录永久保存指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…...

OCR实战三阶段:检测、识别、结构化全流程解析

1. 这不是“把图片变文字”那么简单&#xff1a;OCR背后的真实战场光学字符识别&#xff08;OCR&#xff09;这三个字母&#xff0c;很多人第一反应是“截图转文字”“PDF复制不了&#xff1f;丢给OCR试试”。但如果你真这么想&#xff0c;就等于站在手术室门口说“不就是动刀子…...

为什么设计师集体弃用Sora 2改投Veo?——从渲染延迟、长时序连贯性到版权水印支持的6维生产力对比

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Veo vs Sora 2视频质量对比测试全景概览 为客观评估当前主流生成式视频模型的视觉保真度与时空一致性&#xff0c;我们构建了统一测试基准&#xff0c;涵盖运动连贯性、纹理细节还原、文本-视频对齐精度…...

毕业季救星:Word 2016域代码终极指南,让你的参考文献列表和文内引用完美同步

学术写作效率革命&#xff1a;用Word域代码构建智能参考文献系统 每到毕业季&#xff0c;总有一群人在深夜里对着电脑屏幕抓狂——他们的论文参考文献编号像多米诺骨牌一样&#xff0c;因为中间插入了一个新引用而全部错乱。手动调整几十处引用编号不仅耗时&#xff0c;还容易出…...

“面”之跃升:系统化协同的演进与企业级智能体

展望2026 年&#xff0c;AI 能力的演进或将正式迈入“面”的维度。这是一种“系统化协同”&#xff0c;意味着AI 与企业核心IT 系统、组织架构以及外部生态实现了深度融合。 系统化协同的特征&#xff0c;从 “面”的层级看&#xff0c;AI 不再是一个外挂的工具或独立的流程&am…...

量子计算误差缓解技术:Qiskit实现与工程实践

1. 量子计算误差缓解的必要性与挑战在当前的NISQ&#xff08;Noisy Intermediate-Scale Quantum&#xff09;时代&#xff0c;量子计算机的硬件限制使得误差累积成为阻碍实用化的主要瓶颈。以氢分子基态能量计算为例&#xff0c;未经误差缓解的VQE计算结果可能偏离理论值达20%以…...

从零封装Cesium测量工具:我踩过的3个坑和性能优化心得(鼠标事件、坐标拾取、内存泄漏)

从零封装Cesium测量工具&#xff1a;我踩过的3个坑和性能优化心得 第一次在项目中集成Cesium测量工具时&#xff0c;我天真地以为这不过是调用几个API的简单工作。直到用户反馈地图越来越卡、测量结果偶尔出现诡异偏差时&#xff0c;我才意识到自己掉进了多少陷阱。本文将分享三…...

Thorium浏览器终极指南:如何打造最快的Chromium分支浏览器

Thorium浏览器终极指南&#xff1a;如何打造最快的Chromium分支浏览器 【免费下载链接】thorium Chromium fork named after radioactive element No. 90. Source code and Linux releases. Windows/MacOS/ARM builds served in different repos, links are towards the top of…...