在文件交换上有一个提交可以执行此操作:
(Block) tri-diagonal matrices.
您为该函数提供了三个3D阵列,3D阵列的每一层代表一个主要,次要或超对角的块. (这意味着块必须具有相同的大小.)结果将是一个稀疏矩阵,因此它在内存方面应该是相当有效的.
一个示例用法是:
As = bsxfun(@times,ones(3),permute(1:3,[3,1,2]));
Bs = bsxfun(@times,ones(3),permute(10:11,[3,1,2]));
M = blktridiag(As, zeros(size(Bs)), Bs);
满(M)给你的地方:
1 1 1 10 10 10 0 0 0
1 1 1 10 10 10 0 0 0
1 1 1 10 10 10 0 0 0
0 0 0 2 2 2 11 11 11
0 0 0 2 2 2 11 11 11
0 0 0 2 2 2 11 11 11
0 0 0 0 0 0 3 3 3
0 0 0 0 0 0 3 3 3
0 0 0 0 0 0 3 3 3