Block diagonal matrix of identity times scalar.
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Mohammed Kagalwala
le 29 Nov 2019
Modifié(e) : Philippe Lebel
le 29 Nov 2019
Hi,
I currently have a vector a = [1 2]', I wish to create a block diagonal matrix. Each block is identity (3x3) times the corresponding scalar in the vector a.
i.e. with a = [1 2]' I want to produce b = [1 0 0 0 0 0; 0 1 0 0 0 0; 0 0 1 0 0 0; 0 0 0 2 0 0; 0 0 0 0 2 0; 0 0 0 0 0 2]. The catch is a can be a vector of N x 1, thus b is of size 3*N x 3*N
The answer also has to be for loop free. I've tried using blkdiag() and eye() but have dimension issues in my multiplication
0 commentaires
Réponse acceptée
Philippe Lebel
le 29 Nov 2019
Modifié(e) : Philippe Lebel
le 29 Nov 2019
here is my take.
a=[1,2];
c = round(a(1):1/(length(b(:,1))-1):a(2));
matrix = diag(c);
3 commentaires
Philippe Lebel
le 29 Nov 2019
Modifié(e) : Philippe Lebel
le 29 Nov 2019
here it is:
clear
a=[1,2,3,4];
size_of_sub_matrices = 2;
a = arrayfun(@(x) ones(1,size_of_sub_matrices)*x, a, 'UniformOutput', false);
a = cell2mat(a);
matrix = diag(a)
matrix =
1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 2 0 0 0 0 0
0 0 0 2 0 0 0 0
0 0 0 0 3 0 0 0
0 0 0 0 0 3 0 0
0 0 0 0 0 0 4 0
0 0 0 0 0 0 0 4
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Operating on Diagonal Matrices dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!