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)
Ältere Kommentare anzeigen
DJ V
am 12 Nov. 2016
Kommentiert: Walter Roberson
am 13 Nov. 2016
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
0 Kommentare
Akzeptierte Antwort
DJ V
am 12 Nov. 2016
1 Kommentar
Walter Roberson
am 13 Nov. 2016
Please click on "Comment on this Answer" instead of creating a new Answer.
Weitere Antworten (2)
Walter Roberson
am 12 Nov. 2016
n:n-1:something
3 Kommentare
Ahmet Cecen
am 12 Nov. 2016
Oh yeah, you can also use linear indexing. Huh didn't even think of that.
Walter Roberson
am 13 Nov. 2016
Another hint:
Z = zeros(3,3);
Z(sub2ind([3 3], [1 2 3], [3 2 1])) = 1
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()
0 Kommentare
Siehe auch
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!