Formula for setting Diagonals

1 visualización (últimos 30 días)
Eric Fleming
Eric Fleming el 29 de Feb. de 2016
Comentada: Walter Roberson el 29 de Feb. de 2016
Basically, I'm creating a very large matrix (1000000 x 1000000) in which I will do operations such as finding eigenvalues on. Only certain diagonals are used, and they all follow simple formulas.
The main diagonal is just A(i,i) = 2 * i
I figured that I need to use a sparse matrix, but I don't know how to set the diagonal efficiently. A while loop that iterates through the diagonals and sets each element takes an EXTREMELY long time
Is there something along the lines of diag(2*i) or some effective formulated way to this?

Respuesta aceptada

Walter Roberson
Walter Roberson el 29 de Feb. de 2016
"A = spdiags(B,d,A) replaces the diagonals specified by d with the columns of B. The output is sparse."
  2 comentarios
Eric Fleming
Eric Fleming el 29 de Feb. de 2016
But in forming a matrix B (which is the main diagonal), I would still need 1000000 entries correct? I was thinking something along the lines of A = spdiags(2*i,d,A), where I wouldn't have to store a matrix B, unless I'm mistaken about something
Walter Roberson
Walter Roberson el 29 de Feb. de 2016
You cannot give spdiags a formula or function handle: it would have to be the actual (full) vector of values
d = 0;
B = (1:size(A,1)-abs(d)).'*2;
A = spdiags(B, d, A);

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Operating on Diagonal Matrices en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by