Main Content

选择求解器

要仿真动态系统,可以计算其在指定时间跨度内连续时间步的状态。此计算使用系统模型提供的信息。时间步是发生计算的时间间隔。此时间间隔的大小称为步长。以这种方式计算模型状态的过程称为解算模型。没有任何一种模型解算方法能适用于所有系统。Simulink® 提供了一组程序,称为求解器。每个求解器代表一种特定的模型解算方法。

求解器运用一种数值方法来解算代表模型的一组常微分方程。通过这种计算,它确定下一个仿真步的时间。在解算此初始值问题的过程中,求解器还满足您指定的准确性要求。

数学家们开发出了多种数值积分方法来解算表示动态系统连续状态的常微分方程 (ODE)。提供了一套全面的定步长和变步长连续求解器,其中每个求解器实现一种特定的 ODE 解法(请参阅比较求解器)。在模型配置参数的求解器窗格中选择求解器。

MATLAB® 和 Simulink 提供的所有求解器都遵循类似的命名约定:ode 后跟两三个数字(表示求解器的阶)。有些求解器可以求解刚性微分方程,它们使用的方法由 sttb 后缀表示。

自动求解器选择

当您将求解器最大步长参数指定为自动时,软件会使用算法来选择求解器和最大步长值。对于大多数模型,软件可以选择合适的求解器和步长。

该算法使用多种启发式方法根据模型特性选择求解器。下图列出了用于选择算法的一些启发式方法。

A table summarizes the solver selection heuristics based on the solver type, the types of states in the model, whether the system is represented using ordinary differential equations or differential algebraic equations, and the stiffness of the model.

当模型仅包含离散状态时,软件会为指定的求解器类型选择离散求解器。

  • 对于定步长求解器,软件会选择离散定步长求解器。

  • 对于变步长求解器,软件会选择离散变步长求解器。

当模型包含连续状态时,求解器的选择取决于求解器类型和模型的数学表示。

  • 对于可以使用 ODE 表示的系统的定步长求解器,软件会选择 ode3 求解器。

  • 对于可表示为微分代数方程 (DAE) 的系统模型的定步长求解器,软件会选择 ode14x 求解器。

  • 对于可以使用 ODE 表示的系统的变步长求解器,软件会根据模型的刚度选择求解器。

    • 对于刚性模型,软件会选择 ode15s 求解器。

    • 对于非刚性模型,软件会选择 ode45 求解器。

  • 对于可以使用 DAE 表示的系统的变步长求解器,软件会选择 ode23t 求解器。

当连续状态的数量小于 NumStatesForStiffnessChecking 参数的值时,软件会计算模型的刚度。默认情况下,NumStatesForStiffnessChecking 参数值为 1000

当模型中连续状态的数量超出 NumStatesForStiffnessChecking 参数的值时,软件会认为模型是刚性模型而不计算刚度,并选择 ode15s 求解器。

当模型中连续状态的数量小于 NumStatesForStiffnessChecking 参数的值时,软件会计算系统的刚度,以根据 StiffnessThreshold 参数的值选择求解器。

  • 当计算出的刚度小于 StiffnessThreshold 参数的值时,软件会认为模型为非刚性模型,并选择 ode45 求解器。

  • 当计算的刚度大于 StiffnessThreshold 参数的值时,软件会认为模型是刚性模型,并选择 ode15s 求解器。

NumStatesForStiffnessCheckingStiffnessThreshold 参数的默认值为 1000。您可以使用 set_param 函数为任一参数指定不同的值。

对于 Simscape™ Electrical™ 模型,软件会选择 ode23tb 求解器。使用 Simscape Electrical 建模的系统可以包括非线性电路组件,如断路器和电力电子元件,它们需要刚性求解器。

求解器选择标准

仿真模型的合适求解器取决于以下特性:

  • 系统动态特性

  • 解稳定性

  • 计算速度

  • 求解器稳健性

因此,Simulink 提供的数值求解器可大致按两个属性分类。

计算步长类型

  • 顾名思义,定步长求解器使用相同的步长从仿真开始到仿真结束来解算模型。您可以指定步长,也可以让求解器选择步长。一般情况下,减小步长将提高结果的准确性,并增加系统仿真所需的时间。

  • 变步长求解器会在仿真过程中改变长。这些求解器减小步长,以提高模型仿真过程中某些事件(如快速状态变化、过零事件等)的精度。另外,当模型状态变化缓慢时,求解器将增加步长以避免执行不必要的步长。计算步长将增加每个步长的计算开销。但是,它可以减少步长总数,因此,对于具有过零、快速变化的状态以及其他需要额外计算的事件的模型,可减少保证指定级别的准确度所需的仿真时间。

模型状态

  • 连续求解器用数值积分方法,根据模型在上一个时间步的状态和状态导数来计算模型在当前时间步的连续状态。连续求解器依赖单个模块来计算模型在每个时间步的离散状态值。

  • 离散求解器主要用于解算纯离散模型。它们只计算模型的下一个仿真时间步。执行这种计算时,它们依赖于模型中的每个模块来更新其各个离散状态。它们不计算连续状态。

使用迭代方法为您的需求选择求解器。将多个求解器的仿真结果进行比较,然后从中选择一个性能最佳、开销最少的求解器。

通过以下方式为模型选择求解器:

  • 使用 auto 求解器。新模型默认情况下将其求解器选择设置为 auto 求解器。auto 求解器会为模型推荐定步长或变步长求解器以及最大步长。

  • 如果您对使用 auto 求解器的仿真结果不满意,可在模型配置参数的求解器窗格中选择求解器。

在编译和仿真模型时,您可以基于模型的动态特性选择求解器。变步长求解器更适合纯连续模型,如质点弹性阻尼系统的动态特性。对于包含多个开关的模型(如逆变电力系统),建议使用定步长求解器,因为求解器重置次数会导致变步长求解器像定步长求解器那样工作。

注意

当您将模型作为生成的代码部署时,只能使用定步长求解器。如果您在仿真过程中选择了变步长求解器,请使用它来计算部署时定步长求解器需要的步长。

下表提供了 Simulink 库中求解器的大致分类。

要根据您的模型调整选择的求解器,请参阅检查并提高仿真准确性

理想情况下,您选择的求解器应该:

  • 成功解算模型。

  • 对于变步长求解器,提供的解在您指定的容差范围内。

  • 在合理的时间内解算模型。

一个求解器可能无法满足所有这些目标。在进行选择之前,尝试使用不同求解器进行仿真。

Simulink 库中提供了多个求解器,这些求解器都可以与代数环求解器一起使用。有关详细信息,请参阅代数环求解器的工作原理

在模型配置参数的求解器窗格中,Simulink 库中的求解器主要分为两种。请参阅定步长和变步长求解器

有关比较求解器的其他方法,请参阅:

相关主题