Variable number of input matrices in a function

14 visualizaciones (últimos 30 días)
Tim de Reijer
Tim de Reijer el 4 de Feb. de 2019
Respondida: Guillaume el 4 de Feb. de 2019
I want to change the code below so the function blkdiag can take on any number of matrices A, based on the value of N.
N = 3;
A_1 = sparse(1:N,1:N,-1*ones(N,1),N,N+1);
A_2 = sparse(1:N,2:N+1,1*ones(N,1),N,N+1);
A = A_1+A_2;
out = full(blkdiag(A,A,A))
So suppose N=4, then
out = full(blkdiag(A,A,A,A))
And so on.
How can I create a variable input for this function, based on a value?
Thanks,
Tim
  3 comentarios
Tim de Reijer
Tim de Reijer el 4 de Feb. de 2019
Editada: Tim de Reijer el 4 de Feb. de 2019
[1]
Your solution does not give the wanted answer.
full(blkdiag(A,A)) results in
-1 1 0 0 0 0 0 0
0 -1 1 0 0 0 0 0
0 0 -1 1 0 0 0 0
0 0 0 0 -1 1 0 0
0 0 0 0 0 -1 1 0
0 0 0 0 0 0 -1 1
While full(blkdiag(repmat(A,1,2))) gives
-1 1 0 0 -1 1 0 0
0 -1 1 0 0 -1 1 0
0 0 -1 1 0 0 -1 1
[2]
Neither full(blkdiag(horzcat(A{:}))) nor full(blkdiag(vertcat(A{:}))) produces the same result as well..
madhan ravi
madhan ravi el 4 de Feb. de 2019
Editada: madhan ravi el 4 de Feb. de 2019
True , apologies didn't verify the results.

Iniciar sesión para comentar.

Respuesta aceptada

Guillaume
Guillaume el 4 de Feb. de 2019
N = 4;
A_1 = sparse(1:N,1:N,-1*ones(N,1),N,N+1);
A_2 = sparse(1:N,2:N+1,1*ones(N,1),N,N+1);
A = A_1+A_2;
blkdiaginputs = repelem({A}, N); %put your inputs in a cell array
out = full(blkdiag(blkdiaginputs{:})) %and convert the cell array into a comma-separated list

Más respuestas (0)

Categorías

Más información sobre Multidimensional Arrays en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by