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 Kommentare

Jan
Jan am 18 Jul. 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 am 18 Jul. 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 am 19 Jul. 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.

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 19 Jul. 2017
Bearbeitet: Andrei Bobrov am 19 Jul. 2017

1 Stimme

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 Kommentare

Tailman
Tailman am 19 Jul. 2017
Hello Andrei,
Thank you for the answer. That solved my problem. :)
Tailman
Tailman am 19 Jul. 2017
Bearbeitet: Tailman am 19 Jul. 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 am 19 Jul. 2017
yes, just a sample.
For your PS: read here.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Hilfe-Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by