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

Roo*_*ook 3 matlab matrix

这是一个微不足道的问题,但我只是从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或更大时,这一点尤为重要.

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


Mat*_*oug 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;
Run Code Online (Sandbox Code Playgroud)


gno*_*ice 5

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

C = blkdiag(A,zeros(2)) + blkdiag(zeros(2),B);
Run Code Online (Sandbox Code Playgroud)