这是一个微不足道的问题,但我只是从matlab开始,并且还没有习惯他们的思维方式(和语法).
对于那些曾经做过FEM等事情的人来说,我所要求的是显而易见的.
你如何组合几个小的刚度矩阵.比如,你得到(元素1)局部刚度矩阵4x4,(元素2)相同 - 当然只有不同的矩阵,但仍然是4x4.
最简单的方法是什么:
[|--------| 0 0 ]
[| | 0 0 ]
[| |--|-----|]
[|-----|--| |]
[0 0 | |]
[0 0 |--------|]
(a33+b11, a34+b12,
(a43+b12, a44+b22, ...)
Run Code Online (Sandbox Code Playgroud)
即做一个"大人物"?
小智 6
刚度矩阵想要稀疏.绝望如此.关键是这些大的刚度矩阵最终会有大量的零元素.因此,您需要在构建矩阵时考虑到这一点.好的是matlab中非常支持稀疏矩阵.但是你需要正确地使用它们.
我们的想法是将矩阵构建为行和列索引的列表,以及要插入矩阵的值.提前建立此列表.只有在最后才调用稀疏实际构建矩阵本身.稀疏将自动汇总有重叠的元素.
一旦构建了稀疏矩阵,就可以完全支持所有操作,如矩阵乘法和反斜杠,并且与完整矩阵上的相同操作相比可以非常快.当您的全局刚度矩阵可能为1e5x1e5或更大时,这一点尤为重要.
在某些情况下,对于巨大的矩阵,当矩阵的因子分解变得不可能时,您可能需要迁移到迭代求解器.
我想你的问题是:
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;
Run Code Online (Sandbox Code Playgroud)
只是为了好玩,这是使用BLKDIAG的单行解决方案:
C = blkdiag(A,zeros(2)) + blkdiag(zeros(2),B);
Run Code Online (Sandbox Code Playgroud)