# 5. 求解器
# 仿真精度与速度
对于任何仿真而言,主要关注点在于:
- 精度——结果的准确性。Sysblock 是一种数值仿真工具。仿真的精度取决于各种求解器设置以及所建模的系统。
- 速度——仿真所需的时间。如果仿真耗时过长,会降低用户的生产效率。
# 理解 Sysblock 求解器
要执行仿真,Sysblock 求解器会使用以下步骤:
- 模型初始化——对参数表达式进行计算,确定块的执行顺序,并传播信号数据类型及其他属性。
- 模拟循环——对于每个时间步,模拟循环会执行以下操作:
- 计算模块输出值;
- 计算模块状态;
- 检查是否存在不连续性;
- 确定下一时间步的模拟时间。不同时间步之间的模拟时间差值即为步长。
# 求解简单模型
在不含状态或不连续性的模型中,仿真循环仅需计算给定时间步长下的模块输出。 下面的示例展示了模型
中的一个时间步长。该层级的模块执行顺序用红色显示在每个模块的右上角。
输出模块仅表示系统输出。它不会计算新的信号值。因此,输出模块的输出方程未显示。
步长 0.2 模拟步骤:
- 初始化
- 模拟循环:t = 0.0,输出值;t = 0.2,输出值;t = 0.4,输出值......
| 执行顺序 | |
|---|---|
# 模型性能问题
可能影响仿真准确性和速度的常见建模因素包括:
系统动力学与刚度——所建模系统的动力学特性会影响求解器所采用的时间步长,并决定每个时间步长的计算量。

间断点——模型中的间断点会表现为过零事件,这也可能导致系统采用额外的时间步长。这些额外时间步长虽为保证精度所必需,但也可能减慢仿真速度。

代数环——在 Sysblock 模型中,用户有可能创建无法通过确定性方法求解的反馈回路。这类回路被称为代数环。在仿真过程中,Sysblock 会将它们视为特殊情况处理。

# 默认求解器
每次仿真所使用的默认求解器取决于以下因素:
- 求解器类型(固定步长或可变步长);
- 模型中是否存在连续状态;
- 系统动态特性。
用户可以在建模>模型配置或建模>仿真设置>常规窗口中修改求解器。 创建一个新的 Sysblock 模型时,默认的求解器积分算法中类型为定步长,默认的算法为 Euler。
在许多模型中,用户无需修改默认的求解器设置就能获得准确且快速的仿真结果。
# 求解器类型
根据据时间步长划分,求解器分为两种:
- 固定步长求解器——步长是固定的,无法修改以帮助最小化积分误差。无法保证仿真准确性。
- 变步长求解器——仿真中的步长会进行修改,以保持积分误差较低。可以有一定的保证实现准确的仿真。
求解器在 Sysblock 中的相关内容可查看定步长与变步长及常见积分算法和仿真设置-常规。