Diagonal of non-square matrix

8 vues (au cours des 30 derniers jours)
Shuqing Qi
Shuqing Qi le 27 Avr 2021
Commenté : Shuqing Qi le 27 Avr 2021
How can I build this matrix? All elements are zero except those three main diagonals. n is any given number.

Réponse acceptée

Matt J
Matt J le 27 Avr 2021
n=8;
R=[2,3,4,zeros(1,n+2-3)];
C=[2,zeros(1,n-1)];
T=toeplitz(C,R)
T = 8×10
2 3 4 0 0 0 0 0 0 0 0 2 3 4 0 0 0 0 0 0 0 0 2 3 4 0 0 0 0 0 0 0 0 2 3 4 0 0 0 0 0 0 0 0 2 3 4 0 0 0 0 0 0 0 0 2 3 4 0 0 0 0 0 0 0 0 2 3 4 0 0 0 0 0 0 0 0 2 3 4
  1 commentaire
Shuqing Qi
Shuqing Qi le 27 Avr 2021
Thank you!

Connectez-vous pour commenter.

Plus de réponses (2)

Bruno Luong
Bruno Luong le 27 Avr 2021
Modifié(e) : Bruno Luong le 27 Avr 2021
n = 8;
A = spdiags([2 3 4]+zeros(n,1),0:2,n,n+2);
A = full(A) % if prefered
A = 8×10
2 3 4 0 0 0 0 0 0 0 0 2 3 4 0 0 0 0 0 0 0 0 2 3 4 0 0 0 0 0 0 0 0 2 3 4 0 0 0 0 0 0 0 0 2 3 4 0 0 0 0 0 0 0 0 2 3 4 0 0 0 0 0 0 0 0 2 3 4 0 0 0 0 0 0 0 0 2 3 4
  1 commentaire
Shuqing Qi
Shuqing Qi le 27 Avr 2021
Thank you!

Connectez-vous pour commenter.


Clayton Gotberg
Clayton Gotberg le 27 Avr 2021
Modifié(e) : Clayton Gotberg le 27 Avr 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 commentaire
Shuqing Qi
Shuqing Qi le 27 Avr 2021
Thank you!

Connectez-vous pour commenter.

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