gpt4 book ai didi

matlab - Matlab中的扩展分块对角矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 19:50:26 30 4
gpt4 key购买 nike

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

enter image description here

现在我面临着生成相同的 block 对角矩阵,但也有矩阵元素 B_1, B_2,..., B_{n- 1} 在上对角线上,其他地方为零:

enter image description here

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

附言我 diag命令,使用 diag(A,k) 返回第 k 对角线。我需要一些东西来写入矩阵,k>0 和 block 矩阵,而不仅仅是元素。

最佳答案

File Exchange 上有一个提交可以做到这一点: (Block) tri-diagonal matrices .

您为函数提供三个 3D 数组,3D 数组的每一层代表一个主对角线、次对角线或超对角线 block 。 (这意味着 block 必须具有相同的大小。)结果将是一个稀疏矩阵,因此它在内存方面应该相当高效。

一个示例用法是:

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);

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

关于matlab - Matlab中的扩展分块对角矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28601302/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com