学习在MATLAB中构建带矩阵

时间:2011-10-13 15:34:20

标签: matlab

我正在尝试使用band matricesblkdiag建立方spdiags,但无法弄清楚如何。我发现spdiags的文档有点令人困惑,我不确定是否可以通过简单的blkdiag调用来构建这些矩阵。

我想从两个参数构建一个方形带矩阵:

  • 乐队的宽度
  • 矩阵大小

例如:

band_width = 2;
matrix size = 9;

结果:

[1 1 1 0 0 0 0 0 0]
[1 1 1 1 0 0 0 0 0]
[1 1 1 1 1 0 0 0 0]
[0 1 1 1 1 1 0 0 0]
[0 0 1 1 1 1 1 0 0]
[0 0 0 1 1 1 1 1 0]
[0 0 0 0 1 1 1 1 1]
[0 0 0 0 0 1 1 1 1]
[0 0 0 0 0 1 1 1 1]
[0 0 0 0 0 0 1 1 1]

1 个答案:

答案 0 :(得分:6)

创建这样的矩阵的一种棘手的单行方式是使用卷积:

M = sign(conv2(eye(matrix_size),ones(band_width+1),'same'));

创建了identity matrix给定大小,然后convolved in 2-D创建了square matrix of ones,然后通过sign转换为0和1。

以上可以用于制作相对较小的非稀疏矩阵。对于较大的矩阵,卷积可能会变得昂贵,您可能希望将结果表示为sparse matrix。以下是使用SPDIAGS以一般方式执行此操作的方法:

M = spdiags(ones(matrix_size,2*band_width+1),...
            -band_width:band_width,matrix_size,matrix_size);