将几个小的刚度矩阵放在一起

时间:2009-06-02 20:20:38

标签: matlab matrix

这是一个微不足道的问题,但我刚开始使用matlab,并且还没有习惯他们的思维方式(和语法)。

对于那些曾经做过FEM等事情的人来说,我所要求的是显而易见的。

如何将几个小的刚度矩阵组合在一起。比方说,你得到(元素1)局部刚度矩阵4x4,(元素2)相同 - 当然只有不同的矩阵,但仍然是4x4。

最简单的方法是:

[|--------| 0  0 ]  
[|        | 0  0 ]  
[|     |--|-----|]  
[|-----|--|     |]  
[0  0  |        |]  
[0  0  |--------|]  

(a33+b11, a34+b12,
(a43+b12, a44+b22, ...)

即。做一个“大人物”?

3 个答案:

答案 0 :(得分:6)

刚度矩阵想要稀疏。绝望如此。关键是这些大的刚度矩阵最终会有大量的零元素。因此,您需要在构建矩阵时考虑到这一点。好的是matlab中非常支持稀疏矩阵。但是你需要正确地使用它们。

我们的想法是将矩阵构建为行和列索引的列表,以及要插入矩阵的值。提前建立此列表。只有在最后才调用稀疏实际构建矩阵本身。稀疏将自动汇总有重叠的元素。

一旦构建了稀疏矩阵,就可以完全支持所有操作,如矩阵乘法和反斜杠,并且与完整矩阵上的相同操作相比可以非常快。当您的全局刚度矩阵可能为1e5x1e5或更大时,这一点尤为重要。

在某些情况下,对于巨大的矩阵,当矩阵的因子分解变得不可能时,您可能需要迁移到迭代求解器。

答案 1 :(得分:5)

我认为你的问题是:

A = 4x4 B = 4x4

C = A和B重叠的最终矩阵,应重叠加总。

这样做:

C = zeros(6);
C(1:4,1:4) = A;
C(3:6,3:6) = C(3:6,3:6) + B;

答案 2 :(得分:5)

只是为了好玩,这是使用BLKDIAG的单行解决方案:

C = blkdiag(A,zeros(2)) + blkdiag(zeros(2),B);