主要内容

中的变步长解算器金宝app

变步长解算器在模拟过程中改变步长,在模型状态快速变化时减小步长以提高精度,在模型状态缓慢变化时增大步长以避免采取不必要的步骤。计算步长会增加每个步骤的计算开销,但可以减少步骤总数,从而减少模拟时间,以保持具有快速变化或分段连续状态的模型的指定精度水平。

当你设置类型的控制解算器将配置窗格设置为可变步长,解算器控件允许您选择一个可变步长求解器。与固定步长求解器一样,变步长求解器集合包括一个离散求解器和一个连续求解器集合。然而,与固定步长求解器不同的是,步长是根据局部误差动态变化的。

这两种类型的可变步长解算器之间的选择取决于模型中的块是否定义状态,如果定义状态,则取决于它们定义的状态类型。如果模型未定义状态或仅定义离散状态,请选择离散解算器。如果模型具有连续状态,则连续解算器使用数值积分来计算下一时间步的连续状态值。

请注意

如果一个模型没有状态或只有离散状态,Simulink金宝app®使用离散解算器模拟模型,即使指定了连续解算器。

变步长离散求解器

当模型不包含连续状态时,请使用可变步长离散解算器。对于此类模型,可变步长离散解算器减小其步长以捕获模型事件(如过零),并在可能提高仿真性能时增大步长。

图中所示的模型包含两个采样时间分别为0.5和0.75的离散正弦波信号。下图显示了模型中的信号以及分别用于可变步长离散和固定步长离散解算器的解算器步骤。您可以看到,可变步长解算器仅采取记录输出si所需的步骤另一方面,固定步长解算器需要使用固定步长或0.25的基本采样时间进行模拟,以记录所有信号,从而总体上采取更多的步长。

变步长连续解算器

可变步长解算器在模拟过程中动态改变步长。每个解算器都使用其局部错误控制来增加或减少步长,以达到指定的公差。计算每一步的步长会增加计算开销。但是,它可以减少总步骤数,并减少维持指定精度水平所需的模拟时间。

您可以进一步将变步连续求解器分类为一步或多步、单阶或变阶、显式或隐式。看到单步与多步连续求解了解更多信息。

变步长连续显式求解器

可变步长显式解算器专为非刚性问题设计。Simulink提供了四种此类解算器:金宝app

  • ode45

  • 奥德23

  • 奥德113

  • 奥登

ODE求解器 一步法 多步方法 准确度 方法
ode45 X 媒介 龙格库塔,休眠王子(4,5)对
奥德23 X 低的 龙格库塔(2,3)对博加基和三叶草
奥德113 X 变量,从低到高 Adams-Bashforth-Moulton的PECE实现
奥登 X 看到准确度在里面固定步长连续显式求解 看到集成技术在里面固定步长连续显式求解

ODE求解器 何时使用
ode45

总的来说ode45对于大多数问题来说,Solver是最好的第一次尝试。龙格-库塔(4,5)解算器是一种五阶方法,对误差进行四阶估计。这个求解器还使用了一个四阶插值,它允许事件定位和更平滑的绘图。

如果ode45是计算缓慢,问题可能是僵硬的,因此需要一个隐式求解器。

奥德113

对于有严格误差公差的问题或计算密集的问题,Adams-Bashforth-Moulton PECE求解器可以比ode45

奥德23

奥德23可以比ode45求解粗公差和存在温和刚度。该求解器提供精确的解决方案,通过应用三次埃尔米特插值的值和斜金宝搏官方网站率计算在一个步骤的结束。

奥登 奥登解算器使用非自适应Runge-Kutta积分,其顺序由解决订单参数。奥登使用由确定的固定步长马克斯步长参数,但可以减小步长以捕获某些解算器事件,例如零交叉和离散采样命中。

请注意

选择奥登模拟速度重要时的解算器,例如

  • 该模型包含大量过零和/或解算器重置

  • 解算器分析器分析模型时未检测到任何失败的步骤

变步长连续隐式解算器

如果问题很难解决,请尝试使用可变步长隐式解算器之一:

  • ode15s

  • ode23s

  • ode23t

  • ode23tb

ODE求解器 一步法 多步方法 准确度 解算器重置方法 最大订单 方法
ode15s X 可变,低至中等 X X 数值微分公式(NDF)
ode23s X 低的 二阶修正的Rosenbrock公式
ode23t X 低的 X 使用插值的梯形法则
ode23tb X 低的 X TR-BDF2

解算器重置方法

ode15sode23tode23tb该菜单的下拉菜单解算器复位方法出现在解算器详细信息配置窗格的部分。此参数控制解算器如何处理由过零检测等引起的重置。允许的选项包括强健的指定求解器不重新计算求解器重置的雅可比矩阵,然而强健的指定解算器执行的操作。因此设置的计算速度更快,但在某些情况下可能会使用较小的步长。若要测试此类情况,请使用每个设置运行模拟并比较结果。如果结果没有差异,则可以安全地使用设置并节省时间。如果结果差异很大,请尝试减小步长以进行快速模拟。

最大的订单

对于ode15s解算器,您可以选择解算器应用的数值微分公式(NDF)的最大阶数ode15s使用一阶到五阶公式最大的订单参数允许您选择订单1到5。对于一个棘手的问题,你可能想从(2)开始。

选择可变步长隐式解算器的提示

下表提供了应用可变步长隐式求解器的技巧。有关比较这些求解器行为的示例,请参见使用僵硬模型探索变步长求解器

ODE求解器 何时使用的提示
ode15s

ode15s是一个基于数值微分公式(NDF)。NDF与反向微分公式(BDF)相关,但比反向微分公式(BDF)更有效,后者也称为Gear方法。这个ode15s求解器数值生成雅可比矩阵。如果你怀疑一个问题是僵硬的,或者ode45失败或效率极低,请重试ode15s.作为一个规则,首先将ndf的最大顺序限制为2。

ode23s

ode23s是基于修改了罗森布鲁克2阶公式。由于它是一个单步求解器,因此比ode15s在粗公差下。喜欢ode15sode23s以数字方式为您生成雅可比矩阵。然而,它可以解决某些类型的僵硬问题ode15s这是无效的。

ode23t

ode23t解算器是使用“自由”插值的梯形规则的实现。如果模型刚度适中,并且需要无数值阻尼的解决方案,请使用此解算器。(对振荡运动建模时,能量不会耗散。)

ode23tb

ode23tb是TR-BDF2的一个实现,TR-BDF2是一个隐式Runge-Kutta公式,分两个阶段。第一阶段是梯形规则步骤,第二阶段使用2阶后向微分公式。通过构造,该方法在计算两个阶段时使用相同的迭代矩阵。如ode23s,此解算器可以比ode15s在原油公差。

请注意

对于一个僵硬的问题,解决方案可以在一个非常金宝搏官方网站小的时间尺度上发生变化,而感兴趣的解决方案在一个更长的时间尺度上发生变化。不针对僵硬问题设计的方法在解决方案变化缓慢的时间间隔内无效,因为这些方法使用的时间步长小到足以解决可能最快的变化。有关更多信息,请参见Shampine, l . F。常微分方程的数值解,查普曼和霍尔,1994年。

变步长解算器的误差容限

本地错误

可变步长解算器使用标准控制技术监控每个时间步长的局部误差。在每个时间步长期间,解算器计算步骤结束时的状态值并确定局部误差-这些状态值的估计误差。然后,他们将本地错误与可接受误差,这是相对容限(rtol)绝对容忍(环礁).如果本地错误大于可接受的错误任何人状态时,求解器减小步长并再次尝试。

  • 相对公差测量相对于每个状态大小的错误。相对公差表示状态值的百分比。默认值1e-3表示计算状态的精度在0.1%以内。

  • 绝对公差是一个阈值错误值。当测量状态值接近零时,该公差表示可接受的误差。

    求解器需要误差第十六州,e为了满足:

    e 最大值 r t o l × | x | 一个 t o l )

下图显示了相对公差和绝对公差确定可接受误差的状态和区域图。

绝对的公差

您的模型具有全局绝对公差,可以在“配置参数”对话框的“解算器”窗格中设置。此公差适用于模型中的所有状态。您可以指定汽车或者是一个真正的标量。如果您指定汽车(默认设置),Simulink金宝app最初基于相对公差设置每个状态的绝对公差。如果相对公差大于1e-3,Absol初始化为1e-6。然而,对于reltol小于1e-3,Absol状态初始化为reltol * 1 e - 3. 随着模拟的进行,每个状态的绝对公差将重置为该状态迄今为止假定的最大值乘以该状态的相对公差。因此,如果状态从0更改为1reltol是1e-3,Absol初始化到1e-6,在模拟结束时也达到1e-3。如果一个状态从0到1000,那么Absol更改为1。

现在,如果状态从0变为1reltol设置为1e-4,然后Absol在1e-7初始化,并在模拟结束时达到值1e-4。

如果计算的绝对公差初始值不合适,您可以自己确定一个合适的值。您可能必须运行多次模拟,以确定绝对公差的适当值。您还可以指定绝对公差是否应该类似地适应它汽车通过启用或禁用自动缩醛参数。有关更多信息,请参见自动缩放绝对公差

通过几个块,可以指定绝对公差值,以解算它们计算的或确定其输出的模型状态:

为这些块指定的绝对公差值将覆盖“配置参数”对话框中的全局设置。例如,如果全局设置不能为所有模型状态提供足够的错误控制,因为它们的大小差异很大,则可能需要覆盖全局设置。您可以设置块k绝对公差:

  • 汽车

  • - - - - - -1(同)汽车)

  • 积极的标量

  • 实向量(有一个与块中相应的连续状态数量相等的维度)

提示

如果您选择设置绝对容差,请记住,值过低会导致求解器在接近零的状态值附近采取太多步骤。结果,模拟速度变慢了。

另一方面,如果您将绝对容忍度设置得过高,那么由于模型中的一个或多个连续状态趋近于零,您的结果可能会不准确。

模拟完成后,可以通过减小绝对公差并再次运行模拟来验证结果的准确性。如果这两个模拟的结果令人满意地接近,那么您可以对它们的准确性充满信心。