学生休息室

分享技术和现实生活的例子,学生可以如何使用MATLAB和Simulink在他们的日常项目#学生成功万博1manbetx

Simulink和Simscape的万博1manbetx求解器选择

介绍

这篇博客文章旨在提供在Simulink和Simscape中选择求解器的最佳实践。万博1manbetx感激之情去汤姆Egel艾琳McGarrity它的材料是下面所写内容的基础。本文的目的当然不是要取代关于求解器的选择,它是互补的,是为以下人群编写的:

  • 想要加速模拟和提高准确性,
  • 需要对所涉及的数字有更好的理解。

本文将首先讨论求解器的分类和命名,然后讨论为您的应用程序找到最佳求解器和解决常见错误的实际问题。我们(还)不会特别讨论Simscape。如果您对Simscape模型的故障排除特别感兴趣,欢迎在底部的评论部分留下注释。

这种介绍可能会引发两种反应:

  1. 我想知道更多!
    ->在这里找到a文件交换解决方案研讨会这是一个实践深入到解决方案的知识,包括示例模型,幻灯片和练习。
  2. 我不想在解算器选择上投入时间!
    ->我建议调查一下自动解算器,一个功能这是在2015a版本中添加的。它会自动为你的模型选择一个合适的求解器。

动机

这个例子傅科摆链接->foucaultPendulum.slx)说明了为什么解算者选择是关键!取决于求解器选择ode45(默认)或ode23t,钟摆位移的结果将完全不同。从图中可以看出,由于位移应该是对称的,所以ode23t的结果更有意义。有时,错误不会那么明显。我的博士导师在讨论建模策略时通常会说:“Christoph,所有的模型都是错误的,但有些是有用的。”在下面的文章中,让我们试着确保模拟结果是有用的。

打开并运行模型“foucaultPendulum.slx”FileExchange上的求解器研讨会来体验图示的求解器行为。在讨论导致上述示例中显著结果偏差的模型刚度之前,让我们先做一些基础工作,看看有哪些Simulink / Simscape求解器,以及如何对它们进行分类。万博1manbetx

求解器分类和命名

名称及其含义

最重要的信息由求解器名称本身携带。一个数字代表一个固定步长求解器,数字本身给出了关于顺序的信息。关于集成方案的信息也可以从名称中获得。使用隐式方案的求解器总是带有一个修正的字母,而显式求解器只有数字。修正案的字母是缩写:“t”梯形,“tb”梯形倒向,“s”僵硬和“x”外推。如果没有修正,那就是显式求解。

分类

MathWorks求解器可分为4类:
步长-顺序-状态更新-集成方案。

步长

固定步长求解器通常用于满足精度要求,并用于将模型部署到硬件上,如微控制器(关键字:代码生成)。可变步长求解器自动改变时间步长以满足要求。它们通常用于植物模型的开发。可变步长求解器可能会显著缩短模型的模拟时间。

模型演示了变步长求解器如何缩短多速率离散模型的仿真时间。该模型以两种不同的速率产生输出:每0.5秒和每0.75秒。为了捕获两个输出,固定步长求解器必须每0.25秒取一个时间步长基本样品时间模型)。

订单

如前所述,求解器名称中使用的数字指定了求解器顺序。顺序的选择对准确性有影响。通常,高阶解算器比低阶解算器更有效。变阶解算器使用多个阶来解方程组。例如,隐式的变步ode15s求解器使用一阶到五阶方程,而显式的变步ode113求解器使用一阶到十三阶方程。解算器的步长集成顺序对准确性有很大的影响。在我看来,最简单的解释方法如下:

  • 更小的步长和更高的求解顺序都可以提高精度
  • 越精确越慢(至少对于固定步长求解器来说)

状态更新:离散vs.连续

离散和连续求解器依赖于模型块来计算任何离散状态的值。定义离散状态的块负责在每个时间步骤计算这些状态的值。然而,与离散求解器不同的是,连续求解器使用数值积分来计算块定义的连续状态。

如果您的模型没有连续状态,那么Simulink将切换到固定步长离散解算器或可变步长离散解算万博1manbetx器。如果您的模型只有连续状态或连续和离散状态的混合,根据您的模型的动态,从剩余的求解器选择中选择一个连续的求解器。否则,发生错误。

整合方案:显式与隐式

显式求解器使用方程中的过去信息来计算下一步。这在计算上很简单,但不稳定,因为系统方程在任何时候都不能完全解出来。不稳定性不是一个必要的问题,因为如果近似解仍然在您期望的误差范围内,一切都会很好。隐式求解器自洽地计算下一步,每一步的计算工作量更大。

虽然你可以应用隐式或显式连续求解器来解决所有这些系统,隐式求解器是专门为解决刚性问题而设计的。显式求解器解决非刚性问题。如果期望的解变化缓慢,则常微分方程问题被称为刚性问题,但也有变化迅速的更接近的解。万博 尤文图斯简而言之,我们可以说:一个刚性系统既有缓慢变化的连续动态,也有快速变化的连续动态。数值方法必须采取小的时间步骤来解方程组。刚度是一个效率问题。系统越僵硬,显式求解器执行计算所需的时间就越长。例如,使用Simscape产品家族构建的大多数物理模型最终都是僵硬的系统,在这种情况下,您需要确保在僵硬的求解器之间进行选择。

实用方面

求解器的选择

当您构建和模拟一个模型时,您可以根据模型的动态选择任何一种类型的求解器。一个包含多个开关的模型,如逆变电源系统,需要一个固定步长求解器。变步长求解器更适合于纯连续模型,如质量弹簧阻尼器系统的动力学。

当您将模型作为生成的代码部署时,您只能使用固定步骤求解器。如果在模拟期间选择了可变步长求解器,则使用它来计算部署时所需的固定步长求解器所需的步长。

零交叉

注意:如果您只选择了可变步长求解器,这是相关的。

变步长求解器动态调整时间步长,当变量变化缓慢时,时间步长增大,当变量变化迅速时,时间步长减小。因此,求解器在不连续点(例如,过零点)附近采取许多小步骤。零跨越事件可能是标志改变或硬停车。总的来说,这种行为提高了准确性,但可能导致过多的模拟时间。

知道零跨越可能会降低模型的速度已经是解决方案的主要部分。在这里找到可能的补救措施:

  • 调整零穿越选项
    (配置参数->附加选项)

    • 增加连续零交叉的次数
    • 切换到自适应算法
    • 放松信号阈值
    • 禁用特定块的检测,参见文档

  • 修改模型,减少约束
    这不仅仅是一个场景,让我向你们介绍解决车间(FEX)的一个实践示例。

代数循环

代数循环通常发生在一个直接馈通的输入端口由同一个块的输出驱动时,或者直接,或者通过一个反馈路径通过其他块的直接馈通。因此,求解器被迫使用缓慢的迭代方法(!)

最好的补救方法是避免代数循环,如果可能的话,找一章帮助你文档或者看看解决车间(FEX)之前介绍过的。

这篇文章不是完整的,也不是关于这个主题的唯一出版物。与模型一样,这应该是有用的,我希望这篇文章有助于你的日常工作与Simulink。万博1manbetx鼓励你评论和建议改进或澄清。

Christoph欢呼

|

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。