物理系统的建模仿真,根据建模思想可划分为:
- 因果建模(Causal Modeling)
- 非因果建模(Acausal Modeling)
二者的核心思想是通过信号流还是方程来定义模型的行为。
像我们熟知的Simulink就是基于因果建模的思想,而Amesim、Modelica、maplesim、Simscape等物理仿真平台则是基于非因果建模的思想。
1. 因果建模
因果建模(Causal Modeling)也可称为信号流(signal-flow)建模,顾名思义,在建模过程中,各个组件通过信号连接。这些信号在组件之间交换,每个组件都有固定的输入信号(输入)和输出信号(输出)。
在组件内部,通过明确的赋值和操作,从已知输入计算输出。
这类似于编程语言中的赋值,对右侧的已知变量或一组变量执行计算,并将结果分配给左侧的另一个变量。
组件之间的信号连接定义了不同组件的输入和输出之间的唯一分配(一个输入对应一个输出)。
因此当存在多个输入/输出相连接时,必须考虑信号的分配与处理。
无论是将一个输出与多个输入并行连接,还是将多个输出连接到同一个输入,都必须考虑信号之间如何相互作用。
这种关系成为显式分配,即组件内部和组件之间存在固定的因果关系,链接各个组件的输入和输出,所需的整体模型被创建为来自各个显式运算的方程组。求解器可以通过连续应用各个运算对方程组进行数值计算,从而计算建模微分方程组的解。
因果建模也就是基于信号流的建模特别适合对因果关系明确且不会改变的系统进行建模,例如基于信号的控制器或系统。
但对于物理系统而言,有时相同的变量既充当输入又充当输出,变量之间的关系不具有因果方向,例如在机械系统中,来自环境的力影响物体的位移,但另一方面,物体的位移影响物体和环境之间的力。
2. 非因果建模
非因果建模(Acausal Modeling)也称为基于方程(equation-based)或基于物理(physics-based modeling)的建模。
其核心思想是用守恒定律描述系统或组件的行为和性能。
非因果建模是一种声明式建模风格,是基于方程而不是赋值语句的建模,对系统的输人和输出没有明确的规定。相反,它是通过联立组件本构方程(如欧姆定律)和守恒方程得到整个系统的方程组,一般情况下,利用守恒定律会把一个系统表示为微分代数方程(DAE)。
为了构建非因果关系模型,就需要识别所建模型的流变量(通量) 和势变量(跨量) ,这是来自于键合图的概念,其中:
-
势变量代表了系统的驱动力。
-
流变量代表在“势变量”驱动下的流量。
领域 (Domain) | 势变量(Potential) | 流变量 (Flow) |
---|---|---|
电学 (Electrical) | 电压 (Voltage) | 电流 (Current) |
平移 (Translational) | 位置 (Position) | 力 (Force) |
旋转 (Rotational) | 角度 (Angle) | 扭矩 (Torque) |
磁 (Magnetic) | 磁势 (Magnetic potential) | 磁通量(Magnetic flux rate) |
液压 (Hydraulic) | 压力 (Pressure) | 体积流量 (Volume flow) |
热 (Heat) | 温度 (Temperature) | 热流量 (Heat flow) |
化学 (Chemical) | 化学势 (Chemical potential) | 颗粒流 (Particle flow) |
气动 (Pneumatic) | 压力 (Pressure) | 质量流量 (Mass flow) |
流变量和势变量共同作用,可以描述系统的整体行为和动态响应。使得非因果建模能够自然、直观地表示复杂系统的相互作用和能量转换
非因果建模工具通常支持文本建模和可视化建模两种方式,前者以面向对象的方法为基础,通过称述式的数学方程语句来对物理系统进行建模。而后者可直接利用已有模型库同过块图连接来进行建模。
3. 非因果建模的优势
非因果建模采用更高层次的系统模型描述,通过计算机生成的精确方程而具有更好的数值稳定性和计算性能,相较于因果建模在模型重用和分层建模上有更好的表现。
3.1 模型可读性
一般情况下,通过因果建模方式建立的模型看起来一点也不像公式或模型图,通过模型或公式代码很难直观地理解系统的目的。
而非因果方式建立的模型与物理系统的结构十分类似,相应公式的数学形式是隐式微分代数方程的形式。
非因果模型通过方程直接描述系统行为,这些方程本身就起到了文档化的作用,不需要额外的文档来解释输入输出关系,模型本身就是最好的文档。
使用非因果建模语言(如Modelica)可以在不同物理域之间保持一致的建模风格。这种统一性使得不同领域的工程师能够更容易地理解和合作,阅读和维护模型也更加方便。
3.2 组合/扩展性
因果建模的一大挑战是:方程的复杂性并不与系统的规模成线性关系,随着系统规模的增加,方程的复杂性呈指数级别增长,建模工作量与出错的可能性也会增加。
例如对于一个连杆数不断增加的三维摆系统,因果建模所需计算的加法与乘法数量随连杆数的增加而成倍增加,而非因果建模所需增加的模块数量为定值。
连杆数量 | 加法次数 | 乘法次数 | 非因果模块数量 |
---|---|---|---|
1 | 2 | 7 | 5 |
2 | 21 | 82 | 9 |
3 | 135 | 660 | 13 |
4 | 669 | 3,974 | 17 |
5 | 2,726 | 19,224 | 21 |
再比如对于图示弹簧阻尼系统的建模,每增加一组弹簧-阻尼-质量块,因果建模的方式往往需要考虑因果关系而重新推导公式并搭建模型,且已经搭建的模型无法直接复用。
而非因果建模的方式无需考虑因果关系,可对已有模型进行组合或复用,大大降低了建模工作量。
3.3 多物理域建模
非因果建模的另一个优点在对于多物理域系统的支持,原因在于:
-
灵活性和模块化设计:非因果建模允许组件之间相互连接,而无需预先定义明确的因果关系(即输入和输出),这使得模型更加模块化和灵活,组件可以更容易地重用和重新配置。
-
自然描述系统:多物理域建模中,系统通常涉及多个物理现象(如电学、机械、热学等),非因果建模通过使用方程和约束来描述这些物理现象,使得模型更接近于真实系统的自然行为。
-
减少人工干预:传统的因果建模通常需要工程师手动分配输入和输出,这可能导致错误和效率低下。非因果建模自动生成求解顺序,减少了人工干预,提升了模型构建的效率和准确性。
-
提高模拟精度:非因果建模可以更精确地捕捉系统动态,因为它们使用方程组而不是单一方程来描述系统行为。这种方法在模拟非线性和动态复杂系统时特别有用。
-
简化模型维护:由于非因果建模是基于方程的,它更容易进行模型的修改和扩展。新的组件可以在不改变现有模型结构的情况下添加或修改,极大地简化了模型的维护工作。
-
提高求解器效率:非因果建模允许使用高级求解器来处理方程组,优化计算效率。先进的求解算法可以自动处理复杂的系统,找到有效的解。