# 5. 求解器


# 仿真精度与速度

对于任何仿真而言,主要关注点在于:

  • 精度——结果的准确性。Sysblock 是一种数值仿真工具。仿真的精度取决于各种求解器设置以及所建模的系统。
  • 速度——仿真所需的时间。如果仿真耗时过长,会降低用户的生产效率。

# 理解 Sysblock 求解器

要执行仿真,Sysblock 求解器会使用以下步骤:

  1. 模型初始化——对参数表达式进行计算,确定块的执行顺序,并传播信号数据类型及其他属性。
  2. 模拟循环——对于每个时间步,模拟循环会执行以下操作:
  • 计算模块输出值;
  • 计算模块状态;
  • 检查是否存在不连续性;
  • 确定下一时间步的模拟时间。不同时间步之间的模拟时间差值即为步长。

# 求解简单模型

在不含状态或不连续性的模型中,仿真循环仅需计算给定时间步长下的模块输出。 下面的示例展示了模型

中的一个时间步长。该层级的模块执行顺序用红色显示在每个模块的右上角。

输出模块仅表示系统输出。它不会计算新的信号值。因此,输出模块的输出方程未显示。

步长 0.2 模拟步骤:

  1. 初始化
  2. 模拟循环:t = 0.0,输出值;t = 0.2,输出值;t = 0.4,输出值......
执行顺序 输出方程

# 模型性能问题

可能影响仿真准确性和速度的常见建模因素包括:

  • 系统动力学与刚度——所建模系统的动力学特性会影响求解器所采用的时间步长,并决定每个时间步长的计算量。

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

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

# 默认求解器

每次仿真所使用的默认求解器取决于以下因素:

  • 求解器类型(固定步长或可变步长);
  • 模型中是否存在连续状态;
  • 系统动态特性。

用户可以在建模>模型配置建模>仿真设置>常规窗口中修改求解器。 创建一个新的 Sysblock 模型时,默认的求解器积分算法中类型为定步长,默认的算法为 Euler

在许多模型中,用户无需修改默认的求解器设置就能获得准确且快速的仿真结果。

# 求解器类型

根据据时间步长划分,求解器分为两种:

  • 固定步长求解器——步长是固定的,无法修改以帮助最小化积分误差。无法保证仿真准确性。
  • 变步长求解器——仿真中的步长会进行修改,以保持积分误差较低。可以有一定的保证实现准确的仿真。

求解器在 Sysblock 中的相关内容可查看定步长与变步长及常见积分算法仿真设置-常规