3

我正在使用迭代方法,因此使用大型稀疏矩阵。例如,我想建立一个这样的矩阵:

1   1   0   0   1   0   0   0   0   0
1   1   1   0   0   1   0   0   0   0
0   1   1   1   0   0   1   0   0   0
0   0   1   1   1   0   0   1   0   0
1   0   0   1   1   1   0   0   1   0
0   1   0   0   1   1   1   0   0   1

所以只有某些对角线是非零的。在我的编程中,我将使用更大的矩阵大小,但想法是相同的:只有少数对角线是非零的,所有其他条目都是零。

我知道,如何在 for 循环中执行此操作,但如果矩阵大小很大,它似乎无效。我也使用对称矩阵。如果您为我的示例矩阵提供代码以及描述,我将不胜感激。

4

1 回答 1

5

你想要spdiags

m = 6;                       %// number of rows
n = 10;                      %// number of columns
diags = [-4 -1 0 1 4];       %// diagonals to be filled
A = spdiags(ones(min(m,n), numel(diags)), diags, m, n);

这给出了:

>> full(A)
ans =
     1     1     0     0     1     0     0     0     0     0
     1     1     1     0     0     1     0     0     0     0
     0     1     1     1     0     0     1     0     0     0
     0     0     1     1     1     0     0     1     0     0
     1     0     0     1     1     1     0     0     1     0
     0     1     0     0     1     1     1     0     0     1
于 2015-07-23T22:02:05.563 回答