2015-07-23 7 views
3

Я работаю с итерационными методами и, следовательно, с большими разреженными матрицами. Например, я хочу, чтобы создать матрицу, как это:Самый быстрый способ настроить разреженную матрицу в matlab

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 

Так что только некоторые диагоналей не равны нулю. В моем программировании я буду работать с гораздо большими размерами матрицы, но идея одинакова: только несколько диагоналей отличны от нуля, все остальные записи - это нули.

Я знаю, как это сделать для цикла, но, похоже, оно неэффективно, если размер матрицы большой. Также я работаю с симметричными матрицами. Буду признателен, если вы предоставите мне код для моей матрицы образцов вместе с описанием.

ответ

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 
+0

Именно то, что я писал до. – user1543042

+0

Спасибо большое! Это то, что мне нужно –

 Смежные вопросы

  • Нет связанных вопросов^_^