AnyMath 文档

逐步执行模型的工作原理

默认情况下,AnyMath 连续执行模型的模拟—这是几乎总是使用的主要模式。 一步一步的模型执行模式可用于调试模型:它允许您一步一步地推进仿真。 求解器并专注于兴趣点来分析信号和模型状态。

  • * 正常(连续)模拟 --AnyMath*自动执行模型的模拟,直到它完成(或被迫停止)。 该模式适用于大多数任务:检查模型,获取图形,执行一系列运行。 如果您只需要"完全"获得模拟的结果,则使用常规(连续)模拟。

  • * 分步执行(调试模拟)*--您手动控制模拟的进度:您按照求解器的步骤操作,可以在感兴趣的点停止,以便详细分析模型的信号和状态。

在分步执行模式 AnyMath 允许:

  • 使用选项将模拟向前或向后推进一定数量的步骤"步进"和"单步回退»;

  • 返回由于保存的快照的工作点的模型-一个状态足以继续模拟从选定的时间点。

开始行动

默认情况下,"逐步模型执行"选项处于禁用状态。 要打开它,去窗口 设置 并在"调试"选项卡上,在"分步执行"部分中,选择*分步执行复选框。*:

stepping through 1 cn

在本节中,您可以配置分步执行的参数。

启用该选项后,仿真控制面板会发生变化:用于逐步调试的元素被添加到通常的开始/停止按钮-后退和前进。

正常模拟(分步执行选项被禁用)

stepping through toolbar off

分步执行(启用选项)

stepping through toolbar on

通过"步骤"是指求解器的时间步长。 在步骤之间,求解器可以执行内部(中间)计算;它们很重要,例如,对于断点的操作(参见Pause at breakpoints)。

  • 最大保存回退步数 --AnyMath存储的快照总数,以便退后一步。

  • 存储回退步间间隔 --在保存快照之间跳过求解器的多少步骤。

  • 回退/前进步数 --按下时求解器推进(或回滚)模拟的步骤数 步进 / 单步回退 .

仿真快照存储在 AnyMath 内存中,可能会减慢模型的执行速度。 从小值开始(例如,几十个或前几百个图像),并仅在必要时增加它们:最佳值取决于模型的大小。

当你向前一步,AnyMath 继续模拟。 但是,后退时,AnyMath 不会"向后"模拟系统。 为了提供退后一步,AnyMath 在仿真运行时保存模型操作点的快照。 当你点击 单步回退 AnyMath 从这些快照之一恢复模型的工作点。

AnyMath 仅当逐步执行启用且逐步后退处于活动状态时,才会收集用于逐步后退的模拟快照。 如果您已经在模拟过程中启用了后退一步,那么您需要在后退一步之前至少向前一步。 你不能退到模拟的那一刻,这是在退步打开之前。

向前一步

当按下时,求解器的仿真会进行多少个步骤 步进 ,响应参数 回退/前进步数 . 它设置求解器步骤的数量(在时间上),通过这些步骤 AnyMath 在一次点击中向前移动模拟。

例如,让我们想象一下仿真的时间线;我们将用绿色圆圈及时显示求解器每个步骤的状态,而弯曲的箭头则说明仿真的进展。:

stepping through 2 cn

该图像显示了仿真进度如何变化,如果值 回退/前进步数 同样 12:

  • 在模拟开始时(* 状态0*),参数值为 2. 当你点击 步进 模拟通过* 状态1*并在* 状态2*停止。

  • 当模拟在时间求解器的第二步之后暂停时,假设您将参数值更改为 1. 现在当你点击 步进 仿真将进入* 状态3*--下一次求解器步骤。

  • 假设您将参数值更改回 2 在时间求解器的第四个主要步骤之后,仿真暂停。 现在当你点击 步进 模拟将前进到* 状态6*。

模拟快照

模拟快照(保存的步骤)--后退所需:它们包含一个足以从选定的时间点继续模拟的状态。 快照存储在 AnyMath 内存中,不会保存到文件系统中。 拍摄快照需要内存,并且会影响仿真性能。

这些参数用于控制后退存储的数据量。:

  • 最大保存回退步数 --要保存的快照总数;

  • 存储回退步间间隔 --在保存快照之间跳过求解器的时间步数。

保存快照的选项与该选项无关 回退/前进步数 :快照的间隔和数量决定 多久多少 状态被保存,以及 回退/前进步数 --按下时,模拟会移动多少步 步进单步回退 .

stepping through 4 cn

图像显示了如何使用值保存快照 存储回退步间间隔 = 3. AnyMath 在模拟开始时,在时间求解器的第三个主要步骤之后和第六个步骤之后保存快照。

当您需要以较小的增量前进以便分析兴趣点时,可以在仿真期间更改图像之间的间隔。 例如,该图像显示了如果您更改了快照之间的间隔,则上一个示例中的模拟将如何保存快照 31:

stepping through 5 cn

  • AnyMath*在模拟开始时保存快照 状态0*;

  • 经过三个步骤的时间求解* 工程师 保存快照 状态3*;

  • 当模拟在* 状态3*暂停时,您更改参数的值 存储回退步间间隔31;

  • AnyMath*为求解器的每个时间步长保存模拟状态的快照,直至*状态6

退后一步

退后一步时,AnyMath 依赖于模型操作点的保存快照。 根据是否存在所需时间求解器步骤的快照,AnyMath 的行为不同。:

  • 如果有所需步骤的快照--*AnyMath*将恢复它;

  • 如果没有快照--*AnyMath*将恢复最近的上一个快照,并将模拟向前运行到所需的时刻。

例如,在仿真中的时间求解器的第六步之后,您处于暂停状态,:

  • 每三个时间步骤保存一个快照;

  • 当你点击 单步回退 回去一步。

当你点击 单步回退 然后 AnyMath 恢复在时间求解器的第三步之后拍摄的快照,并向前运行模拟两步,在时间求解器的第五步之后停止。

stepping through 3 cn

该图显示了模拟的时间线;状态由绿色圆圈表示,对于保存为快照的每个状态,绿色的阴影较暗。 实心弯曲箭头显示按下时模拟的进度 单步回退 . 黄色弯曲的箭头说明了 AnyMath 如何后退一步。

当模拟暂停时,您可以更改设置。 新值将在下次模拟前进时应用。 根据模拟步骤的设置,这可能会在按下后立即发生 单步回退 .

在断点暂停

如果模型包含活动 断点,则当满足断点条件时模拟可以停止。 后退时,AnyMath 忽略断点。

默认情况下,AnyMath 在最近的计算点暂停仿真,该计算点由求解器确定。 如果断点条件在主要时间步长之间触发,那么停止将在当前时间步长内发生在求解器的内部(中间)步骤处。

当你点击 步进 当由于断点而暂停时,模拟将继续并完成当前时间步长。 当你点击 单步回退 ,则 AnyMath 返回到当前时间步的开始。

执行分步仿真时的其他注意事项

并非模型的所有块、功能和配置都支持后退选项。 缺乏后向步进支持不会中断仿真 AnyMath 如果启用后向步进的模型中存在不受支持的块则会发出警告。

该表显示了与退后一些模块和建模设计相关的其他注意事项。

函数或建模模板 退后一步的注意事项

链接模型

如果在仿真期间更改连接模型的分步仿真参数,则顶层模型中的相同参数也会更改。 仿真完成后,连接模型的分步参数将恢复到仿真前的值。 顶层模型的分步参数将保持与仿真结束时相同。

C函数

对于包含 C函数 块的模型,回退后的模拟状态可能不正确,这些块使用静态变量或副作用(例如,写入文件)调用C代码。

有用的连结