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.

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

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

相关文章

Folyd 多源最短路

目录 简介 实现 代码 关于Floyd的题目 简介 首先我们要知道a到b的最短路是什么 a到b的最短路是从a点到b点的最小距离(花费) 那多源最短路呢就是能求任意a和b,之间的最短路 那么Folyd是多源最短路,也就是求任意a和b&#x…

python实现卡尔曼滤波代码详解

Kalman滤波算法的原理可以参考: 卡尔曼滤波理解 python中filterpy库中实现了各种滤波算法, 其中就包括了kalman滤波算法。 具体实现代码: https://github.com/rlabbe/filterpy/blob/master/filterpy/kalman/kalman_filter.py 本文针对该代码…

视频云存储/安防监控EasyCVR视频汇聚平台接入GB国标设备时,无法显示通道信息该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

三极管NPN、PNP的区别及简单应用

目录 一、NPN、PNP三极管的概念 二、NPN、PNP三极管的区别 三、三极管NPN、PNP的简单应用 一、NPN、PNP三极管的概念 NPN型三极管: 由两块N型半导体和一块P型半导体组成,P型半导体在中间,两块N型半导体在两侧。 三极管是电子电路中最重要的…

elementui table 在浏览器分辨率变化的时候界面异常

异常点: 界面显示不完整,表格卡顿,界面已经刷新完成,但是表格的宽度还在一点一点变化,甚至有无线延伸的情况 思路: 1. 使用doLayout 这里官方文档有说明, 所以我的想法是,监听浏览…

Jetbrains IDE新UI设置前进/后退导航键

背景 2023年6月,Jetbrains在新发布的IDE(Idea、PyCharm等)中开放了新UI选项,我们勾选后重启IDE,便可以使用这一魔性的UI界面了。 但是前进/后退这对常用的导航键却找不到了,以前的设置方式(Vi…

【C++】容器适配器stack、queue以及deque容器

🏖️作者:malloc不出对象 ⛺专栏:C的学习之路 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录 前言一、什么是容器适配器1.1 stack的…

Redis 的混合持久化

RDB 相比于 AOF,数据恢复的速度更快,因为是二进制数据,直接加载进内存即可,但是 RDB 的频率不好把握。 如果频率太低,在两次快照期间服务器发生宕机,可能会丢失较多的数据如果频率太高,频繁写入…

研磨设计模式day12迭代器模式

目录 场景 解决方案 解决思路 代码示例 代码改造 Java实现迭代器 迭代器模式的优点 思考 何时选用 场景 大公司收购了一个小公司,大公司的工资系统采用List来记录工资列表,而小公司是采用数组,老板希望通过决策辅助系统来统一查看…

Android studio之GridView使用

目录 效果图:![在这里插入图片描述](https://img-blog.csdnimg.cn/86e4a48a71164dec82613d58b1fbaa1c.jpeg)代码: 效果图: 代码: UserGridviewAdapter package com.example.gridviewpro.Adapter;import android.content.Contex…

202 | 抽象类、接口、内部类

抽象类 abstract 注意项 父类方法需要声明,但是有不确定性,考虑将该方法设计为抽象方法抽象方法没有实现的方法没有方法体(跟接口的区别?)抽象方法的类必须设置为抽象类,实现方法由其子类实现 abstract …

nuxt.js框架使用swiper的5.4.5版本记录,创建广告位幻灯片

nuxt依赖 “nuxt”: “^2.15.8”, “swiper”: “^5.4.5”, “vue”: “^2.7.10”, “vue-awesome-swiper”: “^4.1.1”, 需要完成的效果是 参考地址&#xff1a;https://3.swiper.com.cn/demo/pcSlide/ nuxt代码&#xff1a; <template><div class"page&quo…

ServiceManger Binder的处理流程

陌生知识点如下&#xff1a; BinderProxy&#xff1a;是将Native层的BpBinder对象进行封装后传给Java层使用的Binder对象android_util_binder: Binder在JNI层的相关注册&#xff0c;处理&#xff0c;转换封装接口BpBinder:Binder驱动在Native层的封装。IPCThreadState&#xf…

机器学习的测试和验证(Machine Learning 研习之五)

关于 Machine Learning 研习之三、四&#xff0c;可到秋码记录上浏览。 测试和验证 了解模型对新案例的推广效果的唯一方法是在新案例上进行实际尝试。 一种方法是将模型投入生产并监控其性能。 这很有效&#xff0c;但如果你的模型非常糟糕&#xff0c;你的用户会抱怨——这…

Sentinel 控制台(集群流控管理)

规则配置 要通过 Sentinel 控制台配置集群流控规则&#xff0c;需要对控制台进行改造。我们提供了相应的接口进行适配。 从 Sentinel 1.4.0 开始&#xff0c;我们抽取出了接口用于向远程配置中心推送规则以及拉取规则&#xff1a; DynamicRuleProvider<T>: 拉取规则Dy…

jvm开启远程调试功能;idea远程debug

概述 有时候一些问题本地调试无法复现&#xff0c;这个时候可以开启jvm的远程调试功能 jar包启动 jdk8 java -agentlib:jdwptransportdt_socket,address8787,servery,suspendn -jar xxx.jarjdk11/17 java -agentlib:jdwptransportdt_socket,address*:8787,servery,suspe…

关于ios Universal Links apple-app-site-association文件 Not Found的问题

1. 背景说明 1.1 Universal Links 是什么 Support Universal Links 里面有说到 Universal Links 是什么、注意点、以及如何配置的。简单来说就是 当您支持通用链接时&#xff0c;iOS 用户可以点击指向您网站的链接&#xff0c;并无缝重定向到您安装的应用程序 大白话就是说&am…

APP爬虫之-Protobuf协议逆向解析

在做APP抓取时&#xff0c;会发现有的APP Response回来的数据有“加密”。不知道返回的内容是什么。 如下&#xff1a; 如上&#xff0c;内容不是明文的&#xff0c;没办法解析数据。APP常见的对数据加密有三种情况&#xff1a;第一种是&#xff0c;用诸如AES这类加密算法对数…

R语言绘图相关函数(含实例)

目录 plot:可用于创建多种类型的图形 dev.new():新建画板 hist&#xff1a;绘制直方图 dotchart&#xff1a;绘制点图的函数 pie:绘制饼图 pair&#xff1a;绘制散点图矩阵 boxplot&#xff1a;绘制箱线图 scatterplot3D&#xff1a; 绘制三维散点图 par&#xff1a;修…

【动态规划】1137. 第 N 个泰波那契数

Halo&#xff0c;这里是Ppeua。平时主要更新C&#xff0c;数据结构算法&#xff0c;Linux与ROS…感兴趣就关注我bua&#xff01; 文章目录 0. 题目解析1.算法原理1.1 状态表示1.2 状态转移方程1.3初始化1.4 填表顺序1.5 返回值 2.算法代码 &#x1f427; 本篇是整个动态规划的…