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

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

This gives:

>> 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 に答える