How to write a diagonal rectangular matrix

7 vues (au cours des 30 derniers jours)
Leonardo
Leonardo le 23 Nov 2023
Commenté : Dyuman Joshi le 23 Nov 2023
I have to insert on matlab this matrix:
n = 100;
A = diag(21*ones(n,1)) + diag(-4*ones(n-1,1),-1)...
+ diag(-20*ones(n-1,1),1) + diag(ones(n-2,1),-2)...
+ diag(2*ones(n-2,1), 2);
I can generate it when it is squared, but now the exercise tells me to use the same numbers in a rectangular matrix having dimensions 100x98: how do I create the new matrix?

Réponse acceptée

Chunru
Chunru le 23 Nov 2023
Modifié(e) : Chunru le 23 Nov 2023
You can use toeplitz function.
% Smaller n, m here
n = 10;
m = 8;
A = diag(21*ones(n,1)) + diag(-4*ones(n-1,1),-1)...
+ diag(-20*ones(n-1,1),1) + diag(ones(n-2,1),-2)...
+ diag(2*ones(n-2,1), 2);
whos
Name Size Bytes Class Attributes A 10x10 800 double cmdout 1x33 66 char m 1x1 8 double n 1x1 8 double
A
A = 10×10
21 -20 2 0 0 0 0 0 0 0 -4 21 -20 2 0 0 0 0 0 0 1 -4 21 -20 2 0 0 0 0 0 0 1 -4 21 -20 2 0 0 0 0 0 0 1 -4 21 -20 2 0 0 0 0 0 0 1 -4 21 -20 2 0 0 0 0 0 0 1 -4 21 -20 2 0 0 0 0 0 0 1 -4 21 -20 2 0 0 0 0 0 0 1 -4 21 -20 0 0 0 0 0 0 0 1 -4 21
c = zeros(n, 1); c(1:3)=[21 -4 1]; % 1st column
r = zeros(m, 1); r(1:3)=[21 -20 2]; % 1st row
B = toeplitz(c, r)
B = 10×8
21 -20 2 0 0 0 0 0 -4 21 -20 2 0 0 0 0 1 -4 21 -20 2 0 0 0 0 1 -4 21 -20 2 0 0 0 0 1 -4 21 -20 2 0 0 0 0 1 -4 21 -20 2 0 0 0 0 1 -4 21 -20 0 0 0 0 0 1 -4 21 0 0 0 0 0 0 1 -4 0 0 0 0 0 0 0 1
  3 commentaires
Leonardo
Leonardo le 23 Nov 2023
How can I remove the last two columns easily? @Dyuman Joshi
Dyuman Joshi
Dyuman Joshi le 23 Nov 2023
% Smaller n, m here
n = 10;
m = 8;
A = diag(21*ones(n,1)) + diag(-4*ones(n-1,1),-1)...
+ diag(-20*ones(n-1,1),1) + diag(ones(n-2,1),-2)...
+ diag(2*ones(n-2,1), 2)
A = 10×10
21 -20 2 0 0 0 0 0 0 0 -4 21 -20 2 0 0 0 0 0 0 1 -4 21 -20 2 0 0 0 0 0 0 1 -4 21 -20 2 0 0 0 0 0 0 1 -4 21 -20 2 0 0 0 0 0 0 1 -4 21 -20 2 0 0 0 0 0 0 1 -4 21 -20 2 0 0 0 0 0 0 1 -4 21 -20 2 0 0 0 0 0 0 1 -4 21 -20 0 0 0 0 0 0 0 1 -4 21
%Remove the last n-m columns
A(:,end-(1:n-m)) = []
A = 10×8
21 -20 2 0 0 0 0 0 -4 21 -20 2 0 0 0 0 1 -4 21 -20 2 0 0 0 0 1 -4 21 -20 2 0 0 0 0 1 -4 21 -20 2 0 0 0 0 1 -4 21 -20 0 0 0 0 0 1 -4 21 0 0 0 0 0 0 1 -4 2 0 0 0 0 0 0 1 -20 0 0 0 0 0 0 0 21

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Data Type Conversion 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