Block diagonal matrix of identity times scalar.

3 vues (au cours des 30 derniers jours)
Mohammed Kagalwala
Mohammed Kagalwala 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

Réponse acceptée

Philippe Lebel
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
Mohammed Kagalwala
Mohammed Kagalwala le 29 Nov 2019
Thank you for your help!
Philippe Lebel
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

Connectez-vous pour commenter.

Plus de réponses (0)

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!

Translated by