Block diagonal matrix of identity times scalar.
조회 수: 1(최근 30일)
표시 이전 댓글
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
채택된 답변
Philippe Lebel
2019년 11월 29일
편집: Philippe Lebel
2019년 11월 29일
here is my take.
a=[1,2];
c = round(a(1):1/(length(b(:,1))-1):a(2));
matrix = diag(c);
댓글 수: 3
Philippe Lebel
2019년 11월 29일
편집: Philippe Lebel
2019년 11월 29일
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
추가 답변(0개)
참고 항목
범주
Find more on Operating on Diagonal Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!