Hi,
I am trying to re-arrange a square matrix of any order to the format given below.
I tried to work on a looping method, considering the the matrix index j as starting from 2 and ending at the maximum number of rows (or columns) in the original matrix, while the the index i would always start at 1 and increase till the value of j. Also, within a single loop, the index j would decrease from the initial value to 1. The code I tried is below,
for j=2:6;
xq=x(1:j,j:-1:1);
end
While I expected the indices i and j to change simultaneously, I understood that this behaves like a nested for loop. Do we have some method to increment and decrement the indices simultaneously? Else, is there any other elegant way of approaching this problem? I appreciate your help.
Thanks in advance.

3 commentaires

Jan
Jan le 18 Juil 2017
You expect i to change? But it is set to 1 and does not change its value anywhere. I do not see aynthing, which bahaves like a nested for loop.
I do not understand the wanted procedure. Please post an example created manually.
dpb
dpb le 18 Juil 2017
There is a figure that shows the output attached, Jan, but I couldn't figure out the rule from it -- the rule for the boundary conditions doesn't seem consistent (or the example is just wrong for a consistent BC wouldn't be out of the realm of possibility).
Tailman
Tailman le 19 Juil 2017
Hi Jan and dpb,
I apologize for not being clear enough. I should have deleted the i given there(I'll do it now). What I meant by 'i' was, the row index. Even if I could get multiple row matrices like [12, 21], [13,22,31], [14,23,32,41] and so on up till the highest row (i.e., 1,j, 2,j-1,.., j,1) value of any given square matrix, that is what I want to achieve.
dpb,
The matrix does have a rule to it. If you look at the resultant matrix which I want, by removing only the first column, we will get a symmetric matrix, but, I am unable to store the values in that specific order. Is that achievable?
I am grateful for your replies. Thank you.

Connectez-vous pour commenter.

 Réponse acceptée

Andrei Bobrov
Andrei Bobrov le 19 Juil 2017
Modifié(e) : Andrei Bobrov le 19 Juil 2017

1 vote

omtx = 10*(1:6)' + (1:6); % your original matrix
m = size(omtx,1);
y = tril(true(m));
a = omtx.';
fmtx = y + 0;
fmtx(y) = a(rot90(y,-1));
fmtx = fmtx + tril(fmtx,-1)';

3 commentaires

Tailman
Tailman le 19 Juil 2017
Hello Andrei,
Thank you for the answer. That solved my problem. :)
Tailman
Tailman le 19 Juil 2017
Modifié(e) : Tailman le 19 Juil 2017
Andrei,
I used the original answer, i.e., I just used the original matrix in place of omtx and it seems to work. Is the first line of this code just a sample? Thanks again.
P.S. I'm wondering how MATLAB adds two matrices of different dimensions.
Andrei Bobrov
Andrei Bobrov le 19 Juil 2017
yes, just a sample.
For your PS: read here.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by