How to copy a sub-matrix/vector along diagonal of a larger matrix with varying number of sub-matrices?
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
I want to create a matrix below where I copy A = [1 2 3] allow the diagonal of a matrix.
[ 1 2 3 0 0 0 0 0 0 0 0 0
0 0 1 2 3 0 0 0 0 0 0
0 0 0 0 0 0 1 2 3 0 0 0
0 0 0 0 0 0 0 0 0 1 2 3]
I know I can use blkdiag(A ,A, A, A) which will do the job however the number of parameters vary in my code. Sometimes, there may be five A vectors or 20 A vectors that I need to create such a matrix. Let's say this is a variable that the user inputs
How can I do this efficiently in code?
2 comentarios
Sean de Wolski
el 8 de Mzo. de 2013
I'm not clear, how would result be different with five vectors or twenty?
Respuesta aceptada
Sean de Wolski
el 8 de Mzo. de 2013
n = 20;
A = [1 2 3];
Ac = repmat({A},n,1);
blkdiag(Ac{:})
0 comentarios
Más respuestas (3)
Azzi Abdelmalek
el 8 de Mzo. de 2013
Editada: Azzi Abdelmalek
el 8 de Mzo. de 2013
a=[1 2 3]
n=5
d=[a zeros(1,numel(a)*(n-1))]
out=cell2mat(arrayfun(@(x) circshift(d,[0 (n-1)*x]),(0:n-1)','un',0))
EDIT
a=[1 2 3]
n=5
d=[a zeros(1,numel(a)*(n-1))]
out=cell2mat(arrayfun(@(x) circshift(d,[0 numel(a)*x]),(0:n-1)','un',0))
1 comentario
Azzi Abdelmalek
el 8 de Mzo. de 2013
Editada: Azzi Abdelmalek
el 8 de Mzo. de 2013
There was an error, check this
n=5 % number of matrices
a=[1 2 3]
d=[a zeros(1,numel(a)*(n-1))]
out=cell2mat(arrayfun(@(x) circshift(d,[0 numel(a)*x]),(0:n-1)','un',0))
Azzi Abdelmalek
el 8 de Mzo. de 2013
Editada: Azzi Abdelmalek
el 8 de Mzo. de 2013
n=10
a=[1 2 3]
s= ['@(x1)blkdiag(x1' sprintf(',x%d',ones(1,n-1)) ')']
blkdiagn=str2func(s)
out=blkdiagn(a)
0 comentarios
George Papazafeiropoulos
el 8 de Mzo. de 2013
e = ones(n,1);
A = full(spdiags([e 2*e 3*e], 0:2, n, n+2))
A = full(spdiags(A, 0:5, n, n+5))
A = full(spdiags(A, 0:8, n, n+8))
George Papazafeiropoulos
0 comentarios
Ver también
Categorías
Más información sobre Creating and Concatenating Matrices 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!