约束变量

图2-15. MECMAS21子模型的约束变量
这类变量比显式状态变量更为罕见,但在某些情况下非常有用。一个简单的例子是负载子模型MECMAS21。该子模型基于MAS002开发,后者用于计算受两个外力(如上图所示)及自重作用的质量块一维运动。为简化说明,我们仅考虑速度和两个外力。使用图中符号表示,右侧端口v1的速度时间导数为:

该子模型在多数情况下运行良好,但当质量M变得非常小时会出现问题。仿真速度会越来越慢,最终达到无法接受的程度。
值得注意的是,当分母趋近于零时,分子也会趋近于零。这一原理在MAS000中通过调整v1实现,使得:

这是通过将v1声明为代数变量或约束变量实现的。约束变量可以是内部或外部变量。若为外部变量,则始终被视为输出。但子模型并不直接计算约束变量——这些变量由积分算法计算。相反,子模型计算的是称为残差的量。理论上该量应为零,实际上最多只能是非常小的值。在MAS000中残差为:

积分器将通过迭代过程调整v1以使ε归零。为此需要提供初始值,通常通过子模型的参数修改对话框设置。有时很难将该值设置为非任意值。
此时求解的方程是微分方程和代数方程的混合体,称为微分代数方程(d.a.e.s),以区别于纯微分方程或更精确的常微分方程(o.d.e.s)。
但通常整个模型的代数方程部分比纯微分方程部分更难求解。问题之一在于代数方程可能有:
-
唯一解
-
无解
-
多解
-
甚至无限解
d.a.e.求解器面临艰巨任务,其可靠性低于o.d.e.求解器情有可原。
MAS000与MAS002相比如何?当质量远小于作用力时,前者通常速度显著提升。但也可能失败,且很容易构造必然失败的案例。假设我们为两个力设置如下常量值:


什么样的v1值能使残差为零?显然这是不可能的,若尝试此例,d.a.e.积分器将报错退出。
综上所述,此类约束变量非常有用,但需谨慎使用,并应向用户提供适当警告。
当Simcenter Amesim检测到代数环时,会将一个或多个普通变量状态更改为约束变量,从而打破代数环。
译文质量与官方无关,仅做辅助学习使用,帮助大家更方便高效的掌握工具.文档网址:www.tech-doc.cn;公众号:Amesim学习与应用、译匠工厂