Diagonal of non-square matrix
Show older comments
How can I build this matrix? All elements are zero except those three main diagonals. n is any given number.

Accepted Answer
More Answers (2)
Bruno Luong
on 27 Apr 2021
Edited: Bruno Luong
on 27 Apr 2021
n = 8;
A = spdiags([2 3 4]+zeros(n,1),0:2,n,n+2);
A = full(A) % if prefered
1 Comment
Shuqing Qi
on 27 Apr 2021
Clayton Gotberg
on 27 Apr 2021
Edited: Clayton Gotberg
on 27 Apr 2021
n = 5; % Example input
diagonals = [2 3 4];
% Method 1:
matrix = zeros(n,n+2); % Preallocate for speed
extra_zeros = zeros(1,n-1);
matrix_row = [diagonals extra_zeros];
for k = 1:n
matrix(k,:) = matrix_row;
matrix_row = circshift(matrix_row,1);
end
% Method 2:
diagonal_one = [diag(repmat(diagonals(1),n,1)) zeros(n,2)];
diagonal_two = [zeros(n,1) diag(repmat(diagonals(2),n,1)) zeros(n,1)];
diagonal_three = [zeros(n,2) diag(repmat(diagonals(3),n,1))];
matrix = diagonal_one+diagonal_two+diagonal_three;
The second method is a little faster.
1 Comment
Shuqing Qi
on 27 Apr 2021
Categories
Find more on Correlation and Convolution 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!