如何确定全局刚度矩阵是否受约束

计算科学 线性代数 有限元 固体力学
2021-12-24 17:15:03

背景

在solid fem中,我们经常解决

Ku=p
在哪里K是全局刚度矩阵,u是位移,p是全局载荷向量。

如果不约束位移,上述方程不能解,因为系统可以有刚体运动。

在二维情况下,刚体运动是沿x轴,沿平移y轴和旋转。为了让问题得到解决,必须应用至少 3 个约束。

在 3D 情况下,刚体运动是沿x,y,z轴,并沿旋转x,y,z轴。为了让问题得到解决,必须应用至少 6 个约束。

在matlab中,我们可以约束i自由度为零

K(i,:)=0;
K(:,i)=0;
K(i,i)=1;
P(i)=0;

我的问题

如果现在,我得到一个矩阵K,它可能是受约束的,也可能是不受约束的,或者不是完全受约束的。如何确定需要对系统应用哪个约束才能解决问题?或者我如何确定应该对系统应用哪个刚体约束?

例如:在二维情况下,假设K受约束x,y翻译,我怎样才能发现我应该限制旋转?

我的理解

  • 我知道计算矩阵的秩可以用来确定问题是否可以解决,但不能用来确定它缺少哪种约束。

  • 我正在使用 C++,我正在使用 pardiso,eigen 来解决线性系统。如果该方法可以很容易实现,那就太好了。

任何建议都会有很大帮助。谢谢你的时间。

3个回答

TL;博士

如何确定需要对系统应用哪个约束才能解决问题?或者我如何确定应该将哪个刚体约束应用于系统?

约束是由问题的边界条件给出的,因此在使用数值方法作为 FEM 之前,您应该了解它们。从这个意义上说,这更像是一个物理问题而不是数学问题,因为具有不同的边界条件会导致不同的行为。

长答案

我认为约束的放置与您的系统建模更相关,因此与有限元模型相比,它与原始边值问题更相关。任意限制某些自由度可能会导致您拥有一个行为与预期完全不同的系统,因此我认为这不是一个好方法。

让我们考虑一个例子,一个在顶部具有均匀负载的块:

  • 在一种情况下,它在一端受到约束(悬臂梁)。在这种情况下,自由端是最大位移的地方。

  • 在另一种情况下,它在两端都受到约束。在这种情况下,最大位移发生在中间。

您可以在下图中看到这两种情况的位移大小,深紫色表示它受到约束。

在此处输入图像描述

您已经知道,至少在理论上,无约束矩阵有一个零空间,因此特征值等于零。但是,在实践中,这是一个没有意义的条件,因为它不能以有效的方式检查大问题。

您具体问的问题是如何检测是否已应用约束,而上一段的意思是“您不能在实践中”。但这通常也不是一个非常有趣的问题:您将从一些代码中获得矩阵,因此还必须有一种方法来评估该代码的作用:它是否应用约束?因此,您的难题的解决方案不是尝试通过查看矩阵来恢复您寻找的信息,而是询问创建矩阵的代码是否应用了约束。

如你所说,

“如果不限制位移,上面的方程就不能解,因为系统可以有刚体运动”

因此,您应该尝试应用不允许身体移动的约束,即平移或旋转。在 2D 中,有 2 个平移(沿 x 和 y 轴)和一个旋转(沿 z 轴)被杀死。在 3D 中,有 3 个平移(沿 x、y、z 轴)和 3 个旋转(围绕 x、y、z 轴)要被杀死。您应该应用边界条件,使得平移和旋转是不可能的。

另一种检查方法是计算特征值并查看是否有任何零特征值。