主要内容

可变步长求解器万博1manbetx

变步解决者在模拟过程中改变步长,当模型状态变化迅速时减小步长以提高精度,当模型状态变化缓慢时增大步长以避免采取不必要的步骤。计算步长增加了每一步的计算开销,但可以减少总步数,因此,对于快速变化或分段连续状态的模型,维持指定水平的精度所需的仿真时间。

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

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

请注意

如果一个模型没有状态或只有离散状态,Simulink万博1manbetx®即使指定连续求解器,也使用离散求解器来模拟模型。

变步长离散求解器

当您的模型不包含连续状态时,请使用变步长离散求解器。对于这样的模型,变步长离散求解器减小其步长以捕捉模型事件,如过零,并在可能提高仿真性能时增加步长。

图中所示的模型在0.5和0.75采样时间包含两个离散的正弦波信号。下图分别显示了模型中的信号以及变步长离散求解器和固定步长离散求解器的求解步骤。可以看到,可变步长求解器只执行记录每个块输出信号所需的步骤。另一方面,固定步长求解器需要用固定步长(或基本采样时间)0.25来模拟,以记录所有信号,因此总体上需要更多的步长。

变步长连续求解器

变步长求解器在模拟过程中动态地改变步长。这些解算器中的每一个都使用其本地误差控制来增加或减少步长,以实现您指定的公差。在每个时间步中计算步长会增加计算开销。然而,它可以减少总步骤数,以及维持特定精度水平所需的模拟时间。

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

变步长连续显式求解器

变步长显式求解器是针对非刚性问题设计的。万博1manbetxSimulink提供了四个这样的求解器:

  • 数值

  • ode23

  • ode113

  • 奥登

ODE求解器 一步法 多步方法 精确度等级 方法
数值 X 媒介 龙格-库塔,多曼-普林斯(4,5)对
ode23 X 龙格-库塔(2,3)对Bogacki & Shampine
ode113 X 可变,从低到高 Adams-Bashforth-Moulton的PECE实现
奥登 X 看到精确度等级固定步连续显式求解器 看到集成技术固定步连续显式求解器

ODE求解器 何时使用
数值

一般而言,数值Solver是最好的应用作为第一次尝试的大多数问题。龙格-库塔(4,5)求解器是一种执行误差四阶估计的五阶方法。该求解器还使用了四阶插值器,允许事件定位和更平滑的绘图。

如果数值计算速度慢,问题可能很棘手,因此需要隐式求解器。

ode113

对于具有严格误差容错的问题或计算密集的问题,Adams-Bashforth-Moulton PECE求解器可以比数值

ode23

ode23能比数值求解器在粗误差容忍和存在轻度刚度。这个求解器通过应用三次埃尔米特插值的值和斜率计算在一个步骤的万博 尤文图斯结束提供精确的解决方案。

奥登 奥登求解器使用非自适应龙格-库塔积分,其顺序由解决订单参数。奥登方法确定的固定步长最大步长参数,但可以减小步长以捕获某些求解器事件,例如过零和离散采样命中。

请注意

选择奥登求解器时仿真速度是重要的,例如,当

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

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

变步长连续隐式求解器

如果你的问题很复杂,试着使用可变步长隐式求解器:

  • ode15s

  • ode23s

  • ode23t

  • ode23tb

ODE求解器 一步法 多步方法 精确度等级 求解器复位法 Max。订单 方法
ode15s X 可变,低到中等 X X 数值微分公式(ndf)
ode23s X 二阶修正Rosenbrock公式
ode23t X X 使用插值的梯形规则
ode23tb X X TR-BDF2

求解器复位法

ode15sode23t,ode23tb的下拉菜单求解器复位法出现在解算器的细节部分的配置窗格。该参数控制求解器如何处理复位,例如,由过零检测引起的复位。允许的选项有而且健壮的指定求解器不重新计算求解器重置的雅可比矩阵,而健壮的指定求解器执行的操作。因此,设置在计算上更快,但在某些情况下可能使用较小的步长。要测试这种情况,请使用每种设置运行模拟并比较结果。如果结果没有差异,您可以安全地使用设置和节省时间。如果结果差异很大,请尝试为快速模拟减小步长。

最大的订单

ode15s在求解器中,可以选择求解器应用的数值微分公式(ndf)的最大阶数。自ode15s使用一阶到五阶公式最大的订单参数允许您选择从1到5的顺序。对于一个复杂的问题,你可能想从(2)开始。

选择可变步长隐式求解器的技巧

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

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

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

ode23s

ode23s是基于2阶修正Rosenbrock公式。因为它是一个一步求解器,它可以比ode15s在粗公差上。就像ode15sode23s数值地生成雅可比矩阵。然而,它可以解决某些棘手的问题ode15s没有效果。

ode23t

ode23t求解器是使用“自由”插值的梯形规则的实现。使用这个求解器,如果你的模型只是中等硬度,你需要一个没有数值阻尼的解决方案。(当你模拟振荡运动时,能量不会耗散。)

ode23tb

ode23tb是TR-BDF2的实现,这是一个隐含的龙格-库塔公式,有两个阶段。第一阶段为梯形规则步骤,第二阶段采用二阶倒向微分公式。通过构造,该方法使用相同的迭代矩阵来计算两个阶段。就像ode23s,这个求解器可以比ode15s在粗公差上。

请注意

对于一个棘手的问题,解可以在时间尺度上变化万博 尤文图斯,与积分区间相比,时间尺度非常小,而感兴趣的解在更长的时间尺度上变化。不是为棘手问题设计的方法在解决方案变化缓慢的时间间隔内是无效的,因为这些方法使用足够小的时间步长来解决尽可能快的变化。有关更多信息,请参见香波,l。F。常微分方程的数值解查普曼和霍尔,1994年。

变步长求解器的误差容限

本地错误

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

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

  • 绝对的宽容阈值错误值。此公差表示当测量状态值趋于零时的可接受误差。

    解算器要求的误差th状态,e,以满足:

    e 马克斯 r t o l × | x | 一个 t o l

下图显示了一个状态图以及相对容差和绝对容差决定可接受误差的区域。

绝对的公差

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

现在,如果状态从0变为1reltol设定为1e-4abstol在1e-7处初始化,并在模拟结束时达到1e-4的值。

如果计算出的绝对公差的初始值不合适,您可以自己确定一个合适的值。为了确定一个合适的绝对容差值,您可能需要运行多次模拟。您还可以指定绝对容差是否应该类似地适应它汽车属性来设置AutoScaleAbsTol参数。有关更多信息,请参见自动秤绝对公差

有几个块允许您指定绝对公差值,以解决它们计算的模型状态或确定其输出:

为这些块指定的绝对容差值将覆盖“配置参数”对话框中的全局设置。例如,如果全局设置不能为您的所有模型状态提供足够的错误控制,因为它们在量级上变化很大,那么您可能想要重写全局设置。您可以将块绝对容差设置为:

  • 汽车

  • - - - - - -1(一样汽车

  • 积极的标量

  • 真正的向量(维数等于块中相应连续状态的个数)

提示

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

另一方面,如果将绝对容差设置得太高,当模型中的一个或多个连续状态趋于零时,结果可能是不准确的。

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