Matlab 将几个小刚度矩阵组合成一个大刚度矩阵

Matlab 将几个小刚度矩阵组合成一个大刚度矩阵,matlab,matrix,Matlab,Matrix,这是一个很小的问题,但我只是从matlab开始,还不习惯他们的思维方式(和语法) 我的问题对于任何曾经使用FEM或类似工具做过任何事情的人来说都是显而易见的 如何将几个小刚度矩阵组合成一个大刚度矩阵。比如说,对于(元素1)你得到了一个局部刚度矩阵4x4,对于(元素2)也一样-当然只是不同的矩阵,但仍然是4x4 最简单的方法是什么: [|--------| 0 0 ] [| | 0 0 ] [| |--|-----|] [|-----|--| |]

这是一个很小的问题,但我只是从matlab开始,还不习惯他们的思维方式(和语法)

我的问题对于任何曾经使用FEM或类似工具做过任何事情的人来说都是显而易见的

如何将几个小刚度矩阵组合成一个大刚度矩阵。比如说,对于(元素1)你得到了一个局部刚度矩阵4x4,对于(元素2)也一样-当然只是不同的矩阵,但仍然是4x4

最简单的方法是什么:

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

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

i、 做一个“大的”?

我想你的问题是:

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;

刚度矩阵希望是稀疏的。非常希望如此。关键是,这些大刚度矩阵最终将包含大量的零元素。因此,您需要在构建矩阵时牢记这一点。好的是,稀疏矩阵在matlab中得到了很好的支持。但是你需要正确地与他们合作

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

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


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

为了好玩,这里有一个单线解决方案,使用:

使用绝对是做FEM的方法!我希望我能投多一票。
C = blkdiag(A,zeros(2)) + blkdiag(zeros(2),B);