欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Simscape模型如何表现物理系统

程序员文章站 2024-03-16 19:42:28
...

Simscape模型如何表现物理系统

物理系统的表现形式(Representations of Physical Systems)

本节介绍了物理系统数学表示的重要特征,以及Simscape™软件如何实现这些表示。如果您有以下情况,您可能会发现本概述很有帮助。

  • 需要这些表示的细节以提高模型的保真度或仿真性能。
  • 正在使用 Simscape 语言构建自己的自定义 Simscape 组件。
  • 需要排除 Simscape 建模或仿真故障。
    数学表示是物理仿真的基础。有关仿真的更多信息,请参见《Simscape仿真如何工作》。

微分、微分-代数和代数系统(Differential, Differential-Algebraic, and Algebraic Systems)

物理系统的数学表达包含普通微分方程(ODEs)、代数方程或两者。

  • 普通微分方程规定了系统变量的变化率,并包含系统变量的部分或全部时间导数。

  • 代数方程规定了系统变量之间的函数约束,但不包含系统变量的时间导数。

  • 没有代数约束,系统是微分的(ODEs)。

  • 没有ODEs,系统是代数的。

  • 有ODEs和代数约束,系统是微分-代数混合(DAEs)。

一个系统变量是微分的还是代数的,取决于它的时间导数是否出现在系统方程中。

刚性(Stiffness)

如果你所寻求的解变化缓慢,但在误差容许范围内还有其他解变化迅速,那么一个数学问题就是刚性的。一个刚性的系统有几个内在的时间尺度差距很大[1]
一个刚性的物理系统有一个或多个在普通意义上表现为 "刚性 "的部件,例如一个具有大弹簧常数的弹簧。数学上的等价物包括准不可压缩的流体和低电感。这类系统通常在其某些成分或模式中表现出高频振荡。

事件与零交叉(Events and Zero Crossings)

事件是系统状态随时间变化而动态变化的状态; 例如,阀门打开或硬停止。 有关如何用Simscape语言表示事件的更多信息,请参见离散事件建模。
过零是一种特定的事件类型,由数学函数更改符号的值表示。 当检测到过零事件时,可变步长求解器将采取较小的步骤。 较小的步骤有助于捕获导致过零的动力学,但它们也会大大降低仿真速度。 过零检测和分析的各种方法可帮助您在仿真速度和精度之间达到适当的平衡。 有关更多信息,请参见在Simscape模型中管理零交叉。

使用Simscape表示形式(Working with Simscape Representation)

Simscape模型等效于一组方程,这些方程将一个或多个物理系统表示为物理网络。

  • 首先假设您的物理网络是DAE系统:微分和代数方程式及变量的混合。请记住,某些物理网络仅由ODE表示。

  • 物理网络可能包含刚性微分方程。

  • 识别在仿真过程中可能会不连续变化的离散和连续组件。

在Simscape模型中管理零交叉(Managing Zero Crossings in Simscape Models)

您的模型可以包含由以下几个方面引起的过零条件:

  • 从各自块库复制的Simscape和Simulink®块

  • 用Simscape语言编程的自定义块

  • Simulink软件具有用于管理过零事件的全局方法。有关更多信息,请参见零交叉检测(Simulink)。

您可以在单个块上或在整个模型上全局禁用零交叉检测。过零检测通常可以提高仿真精度,但会降低仿真速度。

提示:如果过零的确切时间在您的模型中很重要,请保持启用过零检测功能。 禁用它会导致严重的仿真错误。

在Simscape模型中检测和最小化零交叉

除了通用的Simulink方法之外,Simscape软件还具有特定的工具,可让您检测和管理模型中的零交叉:

  • 在进行仿真之前,您可以使用“统计信息查看器”来识别模型中潜在的过零信号。这些信号通常由包含不连续性的运算符和函数生成,例如比较运算符,abs,sqrt函数等。在仿真期间,这些信号中的任何一个都不可能产生过零事件,或者这些信号中的一个或多个可能具有多个过零事件。有关更多信息,请参见查看模型统计信息。

  • 记录模型的模拟数据时,可以选择“记录模拟统计信息”选项。然后,数据日志包括仿真期间的实际过零数据。有关更多信息,请参阅日志模拟统计信息。

您可以使用Simscape Results Explorer访问和分析在仿真过程中记录的过零数据。有关更多信息,请参见关于Simscape Results Explorer。

  • sscprintzcs函数根据记录的模拟数据打印有关在模拟过程中检测到的零交叉的信息。在调用此函数之前,必须在当前工作空间中具有模拟日志变量,其中包括模拟统计数据。有关更多信息和示例,请参见sscprintzcs。

在为实时仿真准备模型时,管理过零尤为重要。有关此工作流程的详细示例,请参见减少零交叉。

在Simscape语言中启用和禁用零交叉条件

使用Simscape语言为自己的自定义块编写代码时,可以在不连续条件表达式的不同实现之间进行切换,从而在模型中创建或避免过零条件。您可以:

  • 使用关系运算符,这些运算符会创建零交叉条件。例如,对算子关系进行编程:a <b创建一个过零条件。

  • 使用不创建零交叉条件的关系函数。例如,对函数关系进行编程:lt(a,b)不会创建零交叉条件。有关在Simscape语言中使用特定功能时是否会产生不连续性的更多信息,请参见方程式。

    注意:在事件谓词中使用诸如lt(a,b)之类的关系函数总是会创建一个过零条件。 有关事件谓词的更多信息,请参见离散事件建模。
    

References
[1] Moler, C. B., Numerical Computing with MATLAB, Philadelphia, Society for Industrial and Applied Mathematics, 2004, chapter 7
[2] Horowitz, P., and Hill, W., The Art of Electronics, 2nd Ed., Cambridge, Cambridge University Press, 1989, chapter 2
[3] Brogan, W. L., Modern Control Theory, 2nd Ed., Englewood Cliffs, New Jersey, Prentice-Hall, 1985

来源:https://www.mathworks.com/help/releases/R2019b/physmod/simscape/ug/how-simscape-models-represent-physical-systems.html