modelica:计算随时间变化的连续变量的最小值/最大值

2023-12-08

如上所述:我希望计算连续变量随时间变化的最小值(和/或最大值)。这是一个演示的最小示例:

model MinMaxTest
  Real u;
  Real u_min(start = 10);
  Real u_max(start = -10);
equation
  u = sin(time / 180 * Modelica.Constants.pi);
  u_min = min(u, u_min);
  u_max = max(u, u_max);
  annotation(experiment(StartTime = 0, StopTime = 360, Tolerance = 1e-06, Interval = 1));
end MinMaxTest;

u是任意连续变量(出于演示目的,是一个简单的正弦波)。u_min/u_max是一段时间内的最小值/最大值。

显然预期的结果是u_min=-1 and u_max=1。不幸的是,模拟因“矩阵单数!”而崩溃。错误。谁能指导我如何避免这种情况?


EDIT 1

我正在使用 OpenModelica 1.15(以前是 1.9.2)

EDIT 2

由于我对 Modelica 很陌生,我很难理解以下方法之间的差异:

  1. u_min = if noEvent(u < u_min) then u else pre(u_min);
  2. if noEvent(u < u_min) then u_min = u; else u_min = pre(u_min); end if;
  3. u_min = if noEvent(u < u_min) then u else u_min;
  4. u_min = if u < u_min then u else pre(u_min);
  5. u_min = if u < u_min then u else u_min;
  6. when u < u_min then u_min = u; end when;
  7. u_min + T*der(u_min) = if u <= u_min then u else u_min;

1 和 2 是等效的并且会产生预期的行为。

3 产生了期望的结果,但给出了关于“代数环”的“翻译通知”,为什么?

到目前为止,4 次失败,结果是u_min曲线等同于u?! why?

5 结合了 3 和 4。

6 编译失败Sorry - Support for Discrete Equation Systems is not yet implemented

7 我不清楚这背后的想法是什么,但如果T是建议的尺寸。

如果我正确理解 Modelica 文档,那么 1-5 的共同点是只有一个方程始终处于活动状态。noEvent抑制指定过零处的事件生成。我的印象是这主要是效率的提高。为什么省略它会导致 4 失败?pre指的是变量的前一个值,所以我想如果我们想保持变量不变,这是有道理的,但为什么没有它 7 也能工作呢?我的理解when是,它的方程仅在该精确事件时有效,否则保留之前的值,这就是我尝试在 6 中使用它的原因。如果我与常量值进行比较,它似乎可以工作(这对于这个特定问题没有用)。

EDIT3

  1. u_min = smooth(0, if u < u_min then u else pre(u_min));

有趣的是,这也有效。


我使用 Dymola 2016 测试了您的模型,它有效,但是您可以尝试使用替代方法。在 Modelica 中,您必须根据方程而不是作业来思考。

u_min = min(u, u_min);

如果代码要作为指令序列执行,您将执行此操作。 Modelica 工具在底层转换了这个方程 进入非线性系统,随着模拟的进行而求解。

这些是我在模拟你的模型时得到的统计数据

Statistics

Original Model
Number of components: 1
Variables: 3
Unknowns: 3 (3 scalars)
Equations: 3
Nontrivial: 3

Translated Model
Time-varying variables: 3 scalars
Number of mixed real/discrete systems of equations: 0
Sizes of linear systems of equations: { }
Sizes after manipulation of the linear systems: { }
Sizes of nonlinear systems of equations: {1, 1}
Sizes after manipulation of the nonlinear systems: {1, 1}
Number of numerical Jacobians: 0

正如您所看到的,有两个非线性系统,其中一个用于u_min和一个用于u_max.

您的问题的替代解决方案如下

model Test
  Real x;
  Real y;
  Real u_min;
  Real u_max;
  parameter Real T = 1e-4;
equation 
  x = sin(time) + 0.1*time;
  y = sin(time) - 0.1*time;
  u_min + T*der(u_min) = if y <= u_min then y else u_min;
  u_max + T*der(u_max) = if x >= u_max then x else u_max;

end Test;

在这种情况下u_min and u_max是两个状态变量,它们遵循 变量 x 和 y,取决于它们的值。例如,当x低于u_max then u_max“卡住”到该时间点达到的最大值。

抱歉,我无法发布模型运行的图像,因为这是我的第一次回复。

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

modelica:计算随时间变化的连续变量的最小值/最大值 的相关文章

  • Prolog,在列表中找到最小值

    简而言之 如何找到列表中的最小值 感谢卡雷尔的建议 很长的故事 我在 amzi prolog 中创建了一个加权图 并给定 2 个节点 我能够检索路径列表 但是 我需要找到该路径中的最小值 但无法遍历列表来执行此操作 我可以就如何确定列表中的
  • 使用 Python min() max() 避免数值的字典顺序

    我有一个脚本可以从一组值中提取随机数 然而 今天它崩溃了 因为min and max 按字典顺序对值进行排序 因此 200 被视为大于 10000 我怎样才能避免这里的字典顺序 Len关键是在正确的轨道上 但并不完全正确 我找不到任何其他有
  • 范围内的最低值

    我想找到某个范围内的最低值 我每次都必须迭代数组还是有任何动态方法 假设我有输入数组 index 0 1 2 3 4 5 6 7 value 1 4 6 1 6 7 2 3 然后我必须选择范围 包括 中最小的 例如 min 0 7 1 mi
  • 已知尺寸的 JPEG 图像的最大文件大小

    我将让用户上传使用 JPEG 压缩的 300x300 图像 有没有办法确定此类图像的最大文件大小是多少 我可以想象这可以通过以 100 质量压缩随机噪声来尝试 但是有理论上的最大值吗 假设图像是完全不可压缩的随机噪声 它可以是每个像素 3
  • 查找列表中两个(或多个)属性的最大值

    这个问题已经以一种或另一种方式被问过 但不是这样的 我刚刚遇到一个非常基本的问题 我正在寻找一个令人满意的解决方案 我得到了一个具有两个整数属性的对象列表 现在我想找到列表中所有对象的两个属性的最大值 我想出了三个解决方案 第一种方法 in
  • Excel公式查找其他单元格使用的引用

    有没有办法找出Excel中另一个单元格引用的单元格的地址 例如 单元格 C1 包含公式 max A A 并返回值 10 该值实际上引用单元格 A10 我可以在单元格 B 中使用返回 A10 的公式吗 不 我根本不想使用 VBA 假设您的条目
  • 最大乘法列数

    我有一个小问题 在我的表中我有这些行 PersHist ID Date Histroy 1 01 01 2008 0 1 01 01 2008 1 1 01 01 2008 2 1 02 01 2008 0 1 02 01 2008 1 现
  • Android Sqlite 字符串的最大长度?

    关于这个问题 Android 上的 SQLite 如何处理长字符串 https stackoverflow com questions 3068180 how sqlite on android handles long strings 它
  • 添加具有现有列名称的新列

    我正在处理一个数据框 如下所示 FID geometry Code w1 w2 0 12776 POLYGON 1 350000000000025 53 61540813717482 12776 0 1 1 13892 POLYGON 6
  • 使用 numpy nan 查找列表的最大值[重复]

    这个问题在这里已经有答案了 import numpy as np print max np nan 1 2 3 4 print max 1 2 3 4 np nan print max 1 2 3 np nan 4 第一个将打印 nan 作
  • 寻找最大最小值集合

    我正在尝试编写一个 天真的或半天真的 程序 给定一组元素和许多玩家将其划分为这个数量的玩家 并且对于每个这样的划分取最小值 按总和 子集 然后 我想计算所有这些最小除法的最大值 这被称为https en wikipedia org wiki
  • 无法向 Kafka 发送大消息

    我想从生产者向 Kafka 发送一条大消息 因此我更改了以下属性 代理 服务器 属性 replica fetch max bytes 317344026 message max bytes 317344026 max message byt
  • 使用递归求数组的最小值?

    好吧 所以我一直在尝试用 Java 来理解递归 我可以完成简单的任务 例如求和 反转等 但我一直在努力做这个练习 我试图使用递归找到数组中的最小数字 但始终得到 0 0 的答案 我对递归的理解是 我需要增加一个元素 然后提供一个结束递归的基
  • 选择另一个表连接的每行的最小值

    我有下表 Table1 Table2 CardNo ID Record Date ID Name Dept 1 101 8 00 11 7 2013 101 Danny Green 2 101 13 00 11 7 2013 102 Tan
  • sql server中基于分区的Min()和Max()

    我想使用最小和最大函数 但要符合某些标准 Create Table Test Id Int Identity 1 1 Category Varchar 100 DateTimeStamp DateTime Insert into Test
  • opencv形态扩张滤波器作为最大滤波器

    就像中值滤波器的定义一样 我可以将 最大滤波器 定义为局部窗口 例如dst x y max 3x3 局部窗口像素 但我在opencv中找不到这样的过滤器 最接近的是 dilate 函数 然后我使用 dilate 函数的默认配置 但结果不正确
  • max()、分组依据和排序依据

    我有以下 SQL 语句 SELECT t client id max t points AS max FROM sessions GROUP BY t client id 它只是列出了客户 ID 以及他们所获得的最大积分 现在我想按 max
  • OpenModelica 中的集成方法

    我注意到 OpenModelica 模拟设置中有多种可用的集成方法 我不知道这些是什么 我可以获得有关这些的一些信息吗 如果改变积分方法 结果的质量会发生变化吗 有关 OpenModelica 中可用集成方法的简短文档 https open
  • 查找字典中列表的最大值

    我有一个字典 每个键后面都有一个存储的列表 看起来像这样 dict with values u New York u New York u NY datetime datetime 2014 8 13 0 0 10 u New York u
  • 带平方根的 Modelica 测量单位

    在 Modelica 中我试图定义一个专用的数据类型OrifSizingCoeff用于液压孔板的尺寸系数 相应的物理量是体积流量除以压力的平方根 因此 a SI 单位 m3 s除以sqrt Pa b 以 实际 单位 l min除以sqrt

随机推荐

  • jQuery:如何包装()动态加载的元素?

    我正在为一个本身没有 HTML 的第 3 方应用程序进行换皮 这一切都来自 onLoad 事件和一堆 ajax 调用 我将 jQuery 添加到页面中 我需要wrapp 一个动态加载的元素 如果需要的话我可以添加一个插件 我该怎么做呢 谢谢
  • 绑定 this 后 setState 不是一个函数

    我有一个简单的表单 允许用户创建纯文本帖子 下面的代码生成一个成功的服务器端响应createPostRequest称呼 但是 在成功发布后 我想更新状态以清空 postBody 字段并更新 UI 以反映此更改 然后允许用户发出后续请求以发布
  • 构建工具更新破坏了我的编译

    我今天早上4点到5点更新了Android Studio 2 0 Preview 如果我继续构建 dependencies classpath com android tools build gradle 2 0 0 alpha3 这仍然会编
  • 在java中,如何从jar文件中检索图像?

    我在将 java 项目导出到 jar 从 Eclipse 时遇到问题 我已将一个文件包含在名为的 jar 中images 它包含我的项目使用的所有图像文件 问题是 我对这些图像的引用仅在项目isn t罐子形式 我不明白为什么 我想知道是否需
  • 合并具有不同计数值的多个文件

    我想通过从每个文件中取出第二列来合并 96 个文件 并保留所有文件之间相似的第一列 我尝试在 R 中执行此操作 但认为在终端中会更好 使用awk可以吗 样本数据 DMED7013 Rfam robinm head Rfam Counts c
  • Entity Framework Core 2.1 无法正确转换查询

    我有一个现有数据库 我从 2 个独立的项目访问该数据库 其中一个是 ASP NET MVC 5 项目 另一个使用每个项目中各自的实体框架版本运行 NET Core 2 1 我的问题是 我在 MVC 项目上使用的查询在 NET Core 项目
  • Linkedin OAuth2 授权码错误

    我正在尝试通过 Linkedin Auth2 从 Java Web 应用程序进行连接 在 linkedin 中添加了我自己的应用程序 生成授权URL 在新的弹出窗口中输入我的 linkedin 登录名 密码 在redirect uri上返回
  • 继承接口的Java重载方法

    我正在尝试了解java行为 使用此接口 public interface IA public interface IB extends IA public class myClass implements IB 我正在重载这样的方法 pub
  • 使用 JAXB 映射包含超类型和子类型的 Java 集合

    我正在尝试用 JAXB 制作这样的东西
  • 使函数在完成一些工作后返回自身

    let log x print int x log log 111 222 我期待着log打印111并返回自身然后打印222在第二次调用时 但它没有按预期工作 而是收到一条错误消息 为什么 如何让它按预期工作 我也尝试过rec无济于事 Fi
  • 超出 C# 中基本类型的数字

    我正在解决问题欧拉计划 大部分问题都解决了 超过 ulong 的大数字 Ex ulong number 81237146123746237846293567465365862854736263874623654728568263582 有效
  • 仍在努力处理大数据集

    我一直在这个网站上阅读 但未能找到确切的答案 如果它已经存在 我对重新发布表示歉意 我正在处理非常大的数据集 在具有 32 GB RAM 的计算机上有 6 亿行 64 列 我实际上只需要这些数据的更小的子集 但除了简单地使用 fread 导
  • 审计日志记录nhibernate

    您能否提供一些使用 NHibernate 进行审计日志记录的示例 ASP Net C 代码 而不是 java 代码 事件监听器比拦截器更适合审计信息 这是一个很好的例子 from 阿延德的博客
  • 强制某些代码始终在同一线程上运行

    我们有一个旧的第 3 方系统 我们称之为 Junksoft 95 我们通过 PowerShell 与之交互 它公开 COM 对象 我正在将其包装在 REST API ASP NET Framework 4 8 和 WebAPI 中2 我用S
  • 延迟断点:类何时加载

    我正在尝试使用以下命令调试 Maven jdb attach 8000 使用后mvnDebug 我尝试设置断点 但得到 main 1 stop in DeployMojo DeployMojo Deferring breakpoint De
  • 使用 JavaScript 进行图像缩放?

    有没有人有一些好的代码来使用 javascript 放大图像 我知道我可以调整它的大小等 但我很懒 正在寻找一些聪明的东西来缩放到不同的级别 缩放时四处移动等 检查一下 jQZoom Zoomimage jQuery 插件 jQuery I
  • Eclipse 如何将 .java 文件作为小程序运行?

    我一直在尝试运行一个从命令行创建的简单小程序 我尝试这样做 C java Applet 显然这不起作用 但是 我注意到 如果我选择该类并选择作为 java applet 运行 则 Eclipse 允许我运行该 applet Eclipse
  • 如何将文档内容动态加载到iframe中?

    我想做这样的东西 A B B页面在A页面里面 我想把所有的js css都插入到A页面中 我想把B页面分开 我设计它使用一个iFrame 动态获
  • 检查单词是否存在两次? (正则表达式)[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我对正则表达式很糟糕 我想要的是检查一个字符串是否有两次 http 一词 例如 http
  • modelica:计算随时间变化的连续变量的最小值/最大值

    如上所述 我希望计算连续变量随时间变化的最小值 和 或最大值 这是一个演示的最小示例 model MinMaxTest Real u Real u min start 10 Real u max start 10 equation u si