I need to produce a matrix that has one's along the diagonal from the upper right to the lower left

18 Ansichten (letzte 30 Tage)
I need to produce a matrix along a square matrix of size "n" that has one's along the diagonal from the upper right to the lower left. I can't use "for" or an "if" statement. Any idea?
What doesn't work is:
function Y = reverse_diag(n)
zeroes = zero(n);
x = zero;
x(1:1:n,n:-1:1) =1;
Y = x;
end

Akzeptierte Antwort

DJ V
DJ V am 12 Nov. 2016
Thanks, but use of diag is explicit;y forbidden.

Weitere Antworten (2)

Walter Roberson
Walter Roberson am 12 Nov. 2016
n:n-1:something
  3 Kommentare

Melden Sie sich an, um zu kommentieren.


Ahmet Cecen
Ahmet Cecen am 12 Nov. 2016
x(1:1:n,n:-1:1) =1;
You cannot index points inside a matrix like that. MATLAB indexing reads like this:
Matrix(a,b) => For every a corresponding to every b.
So what you are doing is, say for the first row, fill every column (n:-1:1), then for the second row and so forth.
What you need to do is either use a for loop manually, or use the function:
diag()
followed by the function:
fliplr()

Kategorien

Mehr zu Operating on Diagonal Matrices finden Sie in Help 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