这是一个微不足道的问题,但我刚开始使用matlab,并且还没有习惯他们的思维方式(和语法)。
对于那些曾经做过FEM等事情的人来说,我所要求的是显而易见的。
如何将几个小的刚度矩阵组合在一起。比方说,你得到(元素1)局部刚度矩阵4x4,(元素2)相同 - 当然只有不同的矩阵,但仍然是4x4。
最简单的方法是:
[|--------| 0 0 ]
[| | 0 0 ]
[| |--|-----|]
[|-----|--| |]
[0 0 | |]
[0 0 |--------|]
(a33+b11, a34+b12,
(a43+b12, a44+b22, ...)
即。做一个“大人物”?
答案 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);