MATLAB:使用 ode45 时是否可以有两个事件值?

2024-03-17

我想要对运动方程的 ode45 计算有两个限制:位置和时间。我已经让时间事件起作用,但我不确定是否以及如何添加另一个事件来限制位置。 编辑:我还有许多不同的粒子在一个 ODE 方程中耦合在一起,并且需要它们在到达“屋顶”时单独停止,因为它们都以不同的速度行进......我能够通过事件实现这一点吗?我有一个关于如何做到这一点的想法,但它非常复杂并且可能会非常慢......


我不确定你是否能完全按照你的意愿去做,但是可以通过事件做很多事情。首先,这听起来像是某种数值计算首次通过时间 http://en.wikipedia.org/wiki/First-hitting-time_model(又名首次击中时间)。如果这些“粒子”是随机的,请停止并不要使用ode45而是使用适合 SDE 的 pmethod。

据我所知,您可以拥有多少个事件函数 - 或者更确切地说,事件函数的维度(类似于 ODE 函数的维度) - 并且它们的数量与您拥有多少个 ODE 方程无关。 events 函数接收当前时间和当前状态向量。您可以使用其中的任何或所有元素来创建每个事件。您是正确的,更多的事件功能和更复杂的事件会减慢集成速度。性能还取决于检测事件的频率。如果你的每个粒子都到达“屋顶”,正如你所说的那样,并且只触发一个事件,那么这不会太糟糕。

在实现方面,这里是一个基于Matlab的简单例子ballode例如,仅在垂直轴上模拟 N 个弹道粒子。有 N 个非终止事件来捕获每个粒子通过 y = 0 时的时间和速度。添加一个额外的终止事件来检查是否所有粒子都已通过 y = 0(如果我们知道这是哪个粒子)就像我们在这里所做的那样,我们可以将该事件设为终止事件)。

function eventsdemo

% Initial conditions for n balls
n = 10;
y0(2*n,1) = 0;
y0(n+1:end) = linspace(20,40,n);

% Specify events function
options = odeset('Events',@(t,y)efun(t,y,n));

% Integrate
[t,y,te,ye,ie] = ode45(@(t,y)f(t,y,n),[0 10],y0,options);

figure;
plot(t,y(:,1:n),'b',te(1:n),ye(sub2ind(size(ye),ie(1:n),(1:n).')),'r.');

function dydt = f(t,y,n)
% Differential equations for ballistic motion
dydt = [y(n+1:end);zeros(n,1)-9.8];

function [value,isterminal,direction] = efun(t,y,n)
% Last event checks that all balls have hit ground and terminates integration
yn = y(1:n);
value = [yn;all(yn < 0)];
zn = zeros(n,1);
isterminal = [zn;1];
direction = [zn-1;1];

在某些方面,这稍微低效,因为即使其中一些系统已经通过 y = 0,我们仍会继续模拟所有 N 个系统。但是,它很简单,并且输出数组是矩形的而不是参差不齐的。

我不清楚“耦合在一起”和需要粒子“停止”到底是什么意思。如果您需要做的不仅仅是记录事件数据,例如更改系统参数或以其他方式更改微分方程,那么您需要在每个事件后终止并重新启动积分。看着那(这ballode示例(类型edit ballode在 Matlab 命令窗口中)查看一些提高效率的建议。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB:使用 ode45 时是否可以有两个事件值? 的相关文章

  • 笛卡尔散点图上的极坐标网格线

    我有一个脚本来创建散点图 使用gscatter 基于另一个脚本生成的 x y 数据 离散数据点 不连续 由于这些数据点实际上是圆形空间中某些对象的位置 因此添加极坐标网格线将使绘图更有意义 有谁知道如何在笛卡尔散点图上显示极坐标网格线 或者
  • MATLAB:解包函数

    我正在与 Mathworks 的某人讨论 unwrap http www mathworks com access helpdesk help techdoc ref unwrap html函数中对于 以外的跳跃容差有一个 bug 并且希望
  • Google Chrome 的互联网历史记录脚本

    我并不是在寻找 最佳 或最有效的脚本来执行此操作 但我想知道是否存在一个脚本可以从 Google Chrome 中提取一天的互联网历史记录并将其记录到 txt 文件中 我更喜欢用 Python 或 MATLAB 编写 如果你们有不同的方法
  • 在Matlab中使用中心切片定理实现滤波反投影算法

    我正在研究一种使用中心切片定理的滤波反投影算法作为家庭作业 虽然我理解纸上的理论 但在 Matlab 中实现它时遇到了问题 我得到了一个可以遵循的框架 但我认为我可能误解了一个步骤 这是我所拥有的 function img sampleFB
  • 如何将向量标准化/非标准化到范围 [-1;1]

    我怎么能够正常化到范围的向量 1 1 我想使用函数norm 因为它会更快 也让我知道我该怎么做非规范化之后的向量正常化 norm对向量进行归一化 使其平方和为 1 如果要对向量进行归一化 使其所有元素都在 0 和 1 之间 则需要使用最小值
  • 正确重载 stringbuf 以替换 MATLAB mex 文件中的 cout

    MathWorks 目前不允许您使用cout当 MATLAB 桌面打开时 从 mex 文件中读取 因为它们已重定向 stdout 他们当前的解决方法是提供一个函数 mexPrintf 他们要求你改用 http www mathworks c
  • Matlab 中二维插值的函数形式

    我需要从二维数据数组构造一个插值函数 我需要返回实际函数的东西的原因是 我需要能够将函数作为我需要进行数值积分的表达式的一部分进行计算 因此 interp2 并没有解决这个问题 它不返回函数 我可以使用 TriScatteredInterp
  • MATLAB 图像锐化 - 使用(1-高斯低通滤波器)的高斯高通滤波器

    我试图通过设计高斯高通滤波器来锐化图像 我想利用高通滤波器相当于单位矩阵减去低通滤波器的事实来做到这一点 所以我执行了以下操作 image imread Question3 Data Cats jpg read image H 1 fspe
  • MATLAB 中元胞数组的左连接

    I ve 2 cellMATLAB 中的数组 例如 A jim 4 paul 5 sean 5 rose 1 第二个 B jim paul george bill sean rose 我想做一个 SQL 左连接 这样我就可以得到 B 中的所
  • 使用 varargin (...) 时如何显示不同的函数用法?

    当您输入 Matlab 函数名称并打开大括号时 例如sum 在命令窗口中 将打开一个工具提示 显示此函数的所有可能用法 当我编写自己的接受函数时varargin 工具提示仅显示一个选项 而不是varargin puts e g myfunc
  • 在 Matlab 中对列进行排序

    我有 2 列使用 textscan 导入的数据 数据看起来像这样 其中U is undetect and D is detect mydata 51 U 57 D 48 U 47 D my data 4x1 double 4x1 char
  • 查找数组中元素之间的平均差异的有效方法

    希望标题不会让人困惑 通过例子来展示很简单 我有一个像这样的行向量 1 5 6 我想找到每个元素之间的平均差异 此示例中的差异为 4 和 1 因此平均值为 2 5 这是一个小例子 我的行向量可能非常大 我是 MatLab 新手 那么有没有一
  • 如何读取 10 位原始图像?其中包含 RGB-IR 数据

    我想知道如何从我的 10 位原始 它有 rgb ir 图像数据 数据中提取 RGB 图像 如何使用 Python 或 MATLAB 进行阅读 拍摄时的相机分辨率为 1280x720 室内照片图片下载 https drive google c
  • 使用 java 执行 Matlab 函数

    我正在编写一个应用程序 它使用 matlab 进行图像处理 然后使用 Java 接口显示结果 由于某些原因 我必须同时使用 Java 和 Matlab 如何在java中使用matlab函数 如何创建和访问界面 MATLAB控制 http m
  • 将 3d 矩阵重塑为 2d 矩阵

    我有一个 3d 矩阵 n by m by t 在 MATLAB 中表示n by m一段时间内网格中的测量值 我想要一个二维矩阵 其中空间信息消失了 只有n m随着时间的推移测量t剩下 即 n m by t 我怎样才能做到这一点 你需要命令r
  • Matlab 编辑器不使用 emacs 快捷方式

    Is there some way I can make the matlab integrated editor not use emacs shortcut but use more normal shortcuts such that
  • opencv中矩阵的超快中值(与matlab一样快)

    我正在 openCV 中编写一些代码 想要找到一个非常大的矩阵数组 单通道灰度 浮点数 的中值 我尝试了几种方法 例如对数组进行排序 使用 std sort 和选择中间条目 但与 matlab 中的中值函数相比 它非常慢 准确地说 在 ma
  • 整数的十进制表示形式中的分隔数字

    例如 我想将用户输入作为整数输入 45697 并将前两位数字存储在数组 向量或其他内容中 例如 4 5 6 9 7 这样我就可以使用一些函数调用来检查前两个值 4 5 并对它们进行计算 问题 我不知道如何存储恢复前两个值 有没有简单的函数调
  • 傅里叶变换定理 matlab

    我目前正在尝试理解二维傅里叶位移定理 根据我到目前为止所了解到的情况 图像空间中的平移会导致相位差异 但不会导致频率空间中的幅度差异 我试图用一个小例子来演示这一点 但它只适用于行的移位 而不适用于列的移位 这是一个小演示 我只在这里显示幅
  • 频域和空间域的汉明滤波器

    我想通过在 MATLAB 中应用汉明滤波器来消除一维信号中的吉布斯伪影 我所拥有的是k1这是频域中的信号 我可以通过应用 DFT 来获取时域信号k1 s1 ifft ifftshift k1 该信号具有吉布斯伪影 现在 我想通过 A 乘以汉

随机推荐

  • Code First 一对多关系的多个外键

    我在使用 Entity Framework 6 Code First Fluent API 时遇到了一些不符合惯例的问题 一个典型的例子是我有一个名为软件的实体 我不希望数据库表被称为 Softwares 它应该被称为软件 但也有一些其他的
  • 将 ${my.property} 计算为 @Value 注释中的 SpEL 表达式

    长话短说 有没有办法解释由以下结果产生的字符串 my property 作为一个 SpEL 表达式 Value不使用转换器的注释 例如就像是 Value my property 我有一个抽象工厂 简化的 可以让我构建一些公共对象 这些对象是
  • 如何在Android即时应用程序中存储数据并在已安装的应用程序中恢复它

    据谷歌称 开发即时应用程序受到迷药 最佳实践 is 安装应用程序后保留用户状态 https developer android com topic instant apps ux best practices html keep user
  • 在 PowerShell 中通过引用传递/更新哈希表和数组

    当我了解 Perl 和 PowerShell 的不同之处时 我试图通过引用确定传递列表和更新列表之间的差异 我think我现在明白了 PowerShell 方面的 通过引用传递哈希表 调用函数时 不需要在表名前添加 ref 在函数内 表的名
  • 有什么方法可以获取模块中定义的函数列表?

    是否有任何内省的魔法可以给我一个模块中定义的函数列表 module Foo function foo foo end function bar bar end end 一些神话般的功能 例如 functions in Foo 这将返回 fo
  • 仅查看当前用户对象的列表,Django REST

    我有 2 个视图 notes 和 notes 在注释模型中models py我有所有者变量 用于存储所有者的登录信息 因为我想要有很多用户 我不想让他们看到别人的笔记 所以我创建了权限 class IsOwner permissions B
  • 删除 python 列表中的重复项但记住索引

    如何删除列表中的重复项 保留项目的原始顺序并记住列表中任何项目的第一个索引 例如 删除重复项 1 1 2 3 yields 1 2 3 但我需要记住索引 0 2 3 我正在使用Python 2 7 我会以不同的方式解决这个问题并使用Orde
  • 获取调用C#方法的实例

    我正在寻找一种算法 可以在该方法中获取调用该方法的对象 例如 public class Class1 public void Method the question object a the object that called the m
  • SVN与外部通用代码

    目前 我正在尝试使用相同的代码为多个产品设置存储库 最好的解决方案是创建共享代码的真正库并以这种方式使用它们 然而 目前这需要很长时间 这个想法是拥有一个具有以下树的单个存储库 trunk Project1 Project2 Shared
  • 在android中比较两个日期是否在同一周内

    我有两个约会 他们是从 Calendar c Calendar getInstance year c get c YEAR month c get c MONTH month date c get c DATE 其他数据分为日期 月份 2
  • 在 Curl 请求中禁用 Javascript (PHP)

    有没有办法在 PHP 的 Curl 请求中禁用 Javascript 尝试模仿浏览器请求 来自禁用 Javascript 的浏览器 这可以通过标头 用户代理 cookie 来完成吗 Thanks 有没有办法在 PHP 的 Curl 请求中禁
  • 在php中将tiff转换为jpg?

    我有一台保存 TIFF 图像的服务器 大多数客户端都可以读取和显示 TIFF 图像 因此没有问题 但是 某些客户端无法处理此格式 但可以处理 JPG 我想到使用 PHP 的 GD 库为没有 TIFF 读取能力的客户端进行服务器端转换 但我注
  • Spark:强制读取模式时 Parquet DataFrame 操作失败

    火花2 0 2 当您拥有具有不同架构的镶木地板文件并在读取期间强制使用该架构时 就会出现此问题 即使您可以打印架构并运行show 好的 您无法对缺失的列应用任何过滤逻辑 以下是两个示例架构 assuming you are running
  • 从同一类的另一个方法中检索一个方法中的 NSMutableArray [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我是 iPhone 新手 我有一个小
  • SQL查询:列出一个表中未出现在另一表中的所有项目

    我正在开发一个训练跟踪程序 但我无法弄清楚 SQL 查询 我有3张桌子 employees trainingRecords masterList employees and trainingRecords是通过相关的empID fkey t
  • 在属性中传递静态数组

    是否可以绕过以下限制 在类中创建静态只读数组 public class A public static readonly int Months new int 1 2 3 然后将其作为参数传递给属性 public class FooAttr
  • 查询对象时 linq to sql + stackoverflow 异常

    好的 当我尝试查询主键 如果实体中的主键设置为 自动生成值 时 我已经确认只有这个问题 但如果没有这个 我该如何插入 抱歉 如果这是一个 linq2sql 菜鸟 但我刚刚开始使用它 如何在关闭此选项的情况下使用 Linq to Sql 同时
  • PHP 和 MySQL:显示某些内容的总和,按不同类别分类

    你能帮我一下吗 如果您能提供答案和解释 我会更加感激 因为我想了解更多 实际上我已经感谢这个社区了 对我的学习帮助很大 但只有答案对我来说就足够了 因为我真的需要这个代码 好的 现在我将定义问题 现在 假设我有包含这些列的表格 tbl tr
  • Express 应用程序中 helpers 文件夹的意义是什么?

    我正在尝试导出一个适合我们要求的最佳混合文件夹结构 但在查阅了很多文章和信息之后 我有一个用名称定义的文件夹helpers并有文件 js扩展 app controllers userController js models userSche
  • MATLAB:使用 ode45 时是否可以有两个事件值?

    我想要对运动方程的 ode45 计算有两个限制 位置和时间 我已经让时间事件起作用 但我不确定是否以及如何添加另一个事件来限制位置 编辑 我还有许多不同的粒子在一个 ODE 方程中耦合在一起 并且需要它们在到达 屋顶 时单独停止 因为它们都