何时在 Modelica 语言中使用 noEvent 运算符?

2023-12-06

Modelica 中的 noEvent 运算符不使用迭代来查找触发事件的精确时刻。

enter image description here

看来这会导致计算错误,这是我在以下网站上找到的示例https://mbe.modelica.university/behavior/discrete/decay/那么使用noEvent操作符时是否必须保证功能流畅呢? 如果不能保证准确性,使用 noEvent 运算符的目的是什么?

enter image description here


虽然问题已经得到解答,但我想补充一些要点,因为我认为这对很多人来说都是有用的。

有一些常见的原因需要使用noEvent()陈述:

  1. 保护表情:这用于防止函数在其有效范围之外进行评估。一个典型的例子是der(x) = if x>=0 then sqrt(x) else 0;这在大多数常见的编程语言中都能完美运行。这在 Modelica 中并不总是有效,原因如下: 当搜索满足条件的时间时x>=0变为 false,则两个分支可能都用以下值进行评估x在 0 左右变化。 Marvel 发布的屏幕截图中提到了同样的事实。如果负数的平方根,这会导致崩溃x被评估。所以der(x) = if noEvent(x>=0) then -sqrt(x) else 0;用于抑制迭代以搜索交叉时间,将不连续性的处理留给求解器(通常称为“按字面意思取表达式而不是生成交叉函数”)。如果使用可变步长求解器,这会使求解器减小步长以满足其相对误差容限,这可能会导致性能下降。此外,如果所描述的函数不够平滑,导致模拟不精确甚至不稳定,那么这可能是至关重要的。

  2. 连续表达式:当函数连续时,实际上不需要事件。这归结为以下事实:事件用于描述不连续性。因此,如果没有,通常该事件就是多余的,因此可以被抑制。这实际上是由smooth()Modelica 中的运算符,但规范指出,该工具仍然可以自由生成事件。根据我的经验,如果功能的更改相对较大,工具会生成事件。因此,有一个有意义的noEvent()在一个smooth().

  3. 避免喋喋不休: noEvent可以在这里提供帮助,但实际上喋喋不休是一个更普遍的问题。因此,我建议通过重新构建模型来解决与抖动相关的问题。

如果以上都不成立,则使用noEvent应仔细考虑。

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

何时在 Modelica 语言中使用 noEvent 运算符? 的相关文章

  • 第四讲 系统建模方法

    系统建模一般流程 实际系统的分析方法大致类似 但对于实际系统的模型实现方式则有多种 1 面向方程 图框 的因果建模 基于图框进行系统模型实现 的软件很多 如Simulink AMESim 应用于控制领域 等 2 面向对象 非因果 的物理建模
  • 如何在 Openmodelica 中指定介质?

    我正在 Modelica 中模拟热泵热水系统 我附上了我的模特的照片 但是 当我运行模型时 出现错误 Medium 是部分的 部分类中不允许进行名称查找 您能告诉我吗 我该如何指定水箱 热泵冷凝器和管道中的水 我应该如何指定热泵蒸发器中的空
  • 在 Dymola 中编译大型数组

    请考虑以下小型 Modelica 模型和功能 model VectorizeDemo parameter Integer na 5 final parameter Integer nb 2 na final parameter Real a
  • 从平面 Modelica 代码中提取类型/类名

    我想知道是否已经存在从平面 Modelica 代码中提取所有变量及其相应类型 分别为类名 的可能性 例如 给定扁平 Modelica 模型的摘录 constant Integer nSurfaces 8 constant Integer c
  • modelica 中的功能集成

    我想在 Modelica 中对时间以外的变量函数进行积分 但我不知道该怎么做 例如 如何计算上限为 5 下限为 2 的 x dx 的积分 x dx x 2 2 Modelica 并不是像 Maple Mathematica 或 Matlab
  • 如何在 Dymola (Modelica) 中使用 /bigobj 进行编译

    我正在将一个相对较小的有限元 FE 模型集成到 Modelica 中 为此 我创建了一个模型 Modelica 类 它可以读取 Matlab 二进制文件格式的质量 M 和刚度 K 矩阵 我将 FE 模型与 Modelica 标准库 Mode
  • 外部函数:从 C 脚本使用 .dll 的替代方法

    这是一个伴随问题外部函数 在 C 脚本中引用头文件来编译 dll 该堆栈溢出问题是使用 Modelica 外部函数调用 c 脚本 然后 该 c 脚本使用 dll 中包含的 c 函数 以下是我尝试过的最初首选方法和我不喜欢的工作尝试 初步尝试
  • modelica:计算随时间变化的连续变量的最小值/最大值

    如上所述 我希望计算连续变量随时间变化的最小值 和 或最大值 这是一个演示的最小示例 model MinMaxTest Real u Real u min start 10 Real u max start 10 equation u si
  • 在 OpenModelica 中模拟闭式液压循环

    我想对一个封闭的液压循环进行建模 正如人们可以在 Modelica 标准库 流体 示例 加热系统中找到的那样 对于供暖系统以及我的 简约 示例 我遇到了同样的问题 系统是超定的 在接下来的讲座中 您可以发现加热系统是一个 坏例子 所以我想这
  • 仿真期间的 Modelica 输出文件

    我进行了很长时间的模拟 并且需要在模拟继续时检查输出 另一个原因是我正在进行实时模拟 所以我也想实时查看输出 如果 OpenModelica 在模拟过程中创建一个输出文件 以便我可以使用第 3 方工具 也许是 Python 读取并绘制它 那
  • 如何在 Dymola 中隐藏模拟变量

    模拟模型后是否可以隐藏对象或输出 我有很多东西 我觉得我在浪费时间筛选它们试图找到我的正确答案 如果没有 有没有办法组织我的输出在模拟选项卡中的显示方式 Thanks Dymola 的主要可能性是 使组件受到保护 默认情况下 受保护的组件不
  • 在仿真期间暂停 JModelica 并传递增量输入

    您好 Modelica 社区 我想在 JModelica 中并行运行两个模型 但我不确定如何在模型之间传递变量 一个模型是 python 模型 另一个是 EnergyPlusToFMU 模型 JModelica 文档中的示例具有在模型仿真之
  • 单元测试 Modelica 组件库?

    我正在 Modelica 中创建一个组件库 并且希望获得一些有关对包进行单元测试的技术的意见 到目前为止 我有一个测试包 由一组模型组成 每个组件一个模型 每个测试模型都会实例化一个组件 并将其连接到一些非常简单的帮助器类 这些类提供必要的
  • 不同 Modelica 仿真环境之间有什么区别?

    有不同的 Modelica 仿真环境 包括 Dymola Wolfram SystemModeler OpenModelica 和 Jmodelica 所以 我尝试加载热流体库 ThermoSysProhttps github com Dw
  • 使用“在模型中保存起始值”选项来帮助 Dymola 中的收敛

    I build a model in dymola Even though there are some errors during the initialization process but the calculation succee
  • 如何将一个向量的参数插入另一个向量?

    我有一个大小为 5 的 重心 向量 parameter Length barycenters 5 1 2 3 4 5 我想将此向量的参数添加到另一个大小为 7 的向量 b prime 中 这意味着打算让 b prime 0 1 2 3 4
  • 后续问题:Modelica仿真和方程初始化总时间计算

    我正在写这个相关问题this https stackoverflow com questions 61375492 modelica total time calculation of simulation and equation ini
  • 如何在 Modelica 中构建液体平衡连接器?

    帖子状态 200313 得到了代码 DEMO v42 的答案 我接受了赏金 200310 我评论了昨天建议的两篇关键论文 还是不明白如何更新DEMO v41 200309 我想强调的是 关键问题是如何在代码DEMO v41 如果可能的话 中
  • 理解 Dymola 错误消息时遇到问题

    谁能告诉我 代数环 的含义 以及我应该如何通过添加 预 运算符来应对这种情况 我真的没看懂 Error Failed to generate code for an algebraic loop involving when equatio
  • 使用 pyFMI 进行模拟时出现 CVodeError

    我尝试在 Anaconda Python 3 6 8 上设置 pyFMI 安装 pyFMI 站点上列出的所有必需软件包 fmu 加载没有问题 但当我尝试模拟 fmu 时 出现错误 Could not find cannot import n

随机推荐

  • jQuery 和原型事件

    我有一个在 加载 事件上触发的原型代码 Event observe imageEl load this someFunction bind this 当我使用 jQuery 代码创建 真实 事件时 例如 jQuery imageEl sel
  • FOUND_ROWS() 不断返回 0

    result db con gt query SELECT SQL CALC FOUND ROWS FROM users LIMIT 0 10 count result db con gt query SELECT FOUND ROWS a
  • 为什么-use-network=false

    有人知道为什么我必须在 Flex Builder 中使用 use network false 吗 这是在项目属性中设置的 并且是附加编译器参数 仅当我想读取 XML 等外部文件时才会出现这种情况 我团队中的其他人不必有 use networ
  • 在 R 中读取格式错误的 csv - 引号不匹配

    我有数百个大型 CSV 文件 每个文件的大小从 10k 行到 100k 行不等 其中一些文件的描述格式不正确 引号内有引号 因此它们可能看起来像 ID Description x 3434 abc def 988 2344 fred 348
  • 当我将两个脚本添加到 html 页面时..其中一个不起作用 [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我创建了两个 jquery 和 script 标签来日历确认 但是当它们位于单独的 ht
  • 在 WinForms 中将窗口保持在顶部并窃取焦点

    我意识到在正常情况下这将是完全不好的做法 但这仅适用于需要从条形码扫描仪 模拟键盘 获取输入的测试应用程序 问题是我需要在扫描时启动一些脚本 所以我需要在单击脚本运行它后窗口直接重新获得焦点 我尝试过使用Activate BringToFr
  • Arquillian 嵌入式 Glassfish 证书已过期

    8 月 14 日 Glassfish 使用的 gtecybertrust5ca 证书过期 导致我的 Arquillian 测试打印错误 这个问题与这个问题类似 启动 Glassfish 3 1 2 时日志中的证书已过期 除了 我正在使用Em
  • Pandas 数据精度[重复]

    这个问题在这里已经有答案了 默认情况下 数据框中的数值最多仅存储 6 位小数 我如何获得完整的精度 例如34 98774564765 存储为 34 987746 我确实想要完整的价值 0 00000565 存储为 0 除了将格式应用于每个数
  • 循环多个表执行同一个查询

    我有一个数据库 每天都会创建一个表来记录流程实例 这些表标记为 MESSAGE LOG YYYYMMDD 目前我想对所有这些表顺序执行相同的查询 我编写了下面的 PL SQL 但卡在第 10 行 如何针对此处的所有表成功执行 SQL 语句
  • 如何指定无分区密钥来删除文档DB Java SDK中的文档?

    我只有一个集合 当我尝试使用以下代码删除文档时 PartitionKey partitionKey new PartitionKey undefined RequestOptions requestOptions new RequestOp
  • 如何在 vb.net 中使用 OLE DB 更改 Crystal Reports 连接字符串?

    我有一个 Connection vb 其中存储了我的所有连接字符串并由整个程序使用 我是 Crystal Reports 的新手 并且我想根据我创建的连接字符串更改其连接字符串 我使用 MS SQL 2008 SQL Server Nati
  • 为什么局部类接受静态最终变量?

    我用谷歌搜索了这个广泛但无济于事 我似乎无法理解这个概念 为什么本地类接受静态最终字段 比如下面的例子 public void sayGoodbyeInEnglish class EnglishGoodbye public static f
  • 在 Visual Studio Code 和 Delve 调试器中使用标签调试 Go

    Answer 根据putus的回答 我想出了以下配置来一键构建和调试 首先 您需要添加一个任务来构建具有相应标签的二进制文件 See https go microsoft com fwlink LinkId 733558 for the d
  • Razor View Engine:表达式树可能不包含动态操作

    我有一个与此类似的模型 public class SampleModel public Product Product get set 在我的控制器中 我尝试打印时遇到异常 Html TextBoxFor p gt p Product Na
  • 使用hash时如何将id作为选择器?

    假设有以下 html div test1 div div test2 div 现在 以下内容不起作用 为什么 css test 1 color red jQuery test 2 css color blue 要使用任何元字符 例如 和 作
  • Urban Airship - 使用 NSURLConnection 发送推送

    我正在开发一个简单的原型 需要测试从一台设备向另一台设备发送推送通知 我已向 Urban Airship 发送电子邮件 要求为我的应用程序打开 允许从设备推送 他们确实打开了它 我正在尝试使用 NSURLConnection 从设备发送推送
  • Java ActionListener 错误:类型不兼容

    我在 JButton 上设置 ActionListener 时遇到一些问题 这是代码 package pipes import java awt import java awt event import javax swing public
  • 关闭窗口 - 如何确定窗口是如何打开的?

    在一页上 我有一个超链接target blank 在目标页面上 我有一个 关闭 按钮 它使用 JS 关闭新选项卡 窗口 如果用户点击超链接 我可以使用JS关闭打开的窗口 伟大的 如果用户右键单击链接并选择 在新选项卡中打开 我的 JS 事件
  • 从 GtkBin 扩展

    我正在尝试制作一个自定义小部件 类似于 Gtk 在所有类似 TreeView 的小部件上使用的 快速搜索 条目 这是我最初想法的一个简化示例 from gi repository import Gtk class QuickSearch G
  • 何时在 Modelica 语言中使用 noEvent 运算符?

    Modelica 中的 noEvent 运算符不使用迭代来查找触发事件的精确时刻 看来这会导致计算错误 这是我在以下网站上找到的示例https mbe modelica university behavior discrete decay