Matlab中的扩展块对角矩阵

tit*_*cus 4 matlab matrix diagonal

我知道要在Matlab中生成块对角矩阵,命令会blkdiag生成这样一个矩阵:

在此输入图像描述

现在我面临着产生相同的块对角矩阵,但也矩阵元素B_1,B_2,...,B_{n-1}在上斜,别处零:

在此输入图像描述

  • 我想这可以用循环硬编码,但我想找到一个更优雅的解决方案.关于如何实现这样的事情的任何想法?

PS我diag命令,使用diag(A,k)返回k对角线.我需要在矩阵中写入的内容,k> 0,而块矩阵,不仅是元素.

kne*_*epp 7

在文件交换上有一个提交可以做到这一点:( 块)三对角矩阵.

您为该函数提供了三个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);
Run Code Online (Sandbox Code Playgroud)

在哪里full(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
Run Code Online (Sandbox Code Playgroud)