Azzera filtri
Azzera filtri

How to create a specific diagonal Matrix

1 visualizzazione (ultimi 30 giorni)
Stefano Di Vito
Stefano Di Vito il 20 Apr 2018
Commentato: Stephen23 il 20 Apr 2018
Hi everyone! I'm trying to find the way to write a generic code to obtain a matrix like the one in this example:
if true
A=[1 1 1 0 0 0 0 0 0;0 0 0 1 1 1 0 0 0;0 0 0 0 0 0 1 1 1]
end
To be clearer, i need a code to fill my matrix, which dimension is (T,T^2). In the example i have T=3. I need the general code because i need a matrix for each T i set, and it should respect the criteria of the example. This means that i have, for each row, a ones(1,T) vector that starts when the ones vector of the previous row ends. The first row should start with a ones(1,T) vector, as in the example. It is a sort of diagonal matrix i guess. I need it because it is part of the unequality constraints matrix in a linear program i'm developing. Hope someone could help me! thanks a lot in advance!

Risposte (2)

Birdman
Birdman il 20 Apr 2018

Try this:

T=3;
for i=1:T
    A(i,:)=circshift([ones(1,T) zeros(1,T^2-T)],T*(i-1));
end

Stephen23
Stephen23 il 20 Apr 2018
Modificato: Stephen23 il 20 Apr 2018

That is exactly what blkdiag is for:

>> V = [1,1,1];
>> blkdiag(V,V,V)
ans =
   1   1   1   0   0   0   0   0   0
   0   0   0   1   1   1   0   0   0
   0   0   0   0   0   0   1   1   1

This is much simpler and much more efficient than trying to write your own code using loops. Remember that MATLAB is a high-level language, so loops are often not the best solution.

  3 Commenti
Sean de Wolski
Sean de Wolski il 20 Apr 2018
x = repmat({[ones(1, 3)]}, 1, 3)
blkdiag(x{:})
Stephen23
Stephen23 il 20 Apr 2018

@Stefano Di Vito: using the method that Sean de Wolski showed. It uses a comma-separated list to provide as many input arguments as you want:

https://www.mathworks.com/help/matlab/matlab_prog/comma-separated-lists.html

https://www.mathworks.com/matlabcentral/answers/320713-how-to-operate-on-comma-separated-lists

Accedi per commentare.

Categorie

Scopri di più su Operating on Diagonal Matrices in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by