# Checking if minimum of a matrix occurs on the diagonal

6 views (last 30 days)
KAE on 4 Oct 2018
Edited: KAE on 4 Oct 2018
For a matrix, I would like to check if the minimum value of each row is found on the diagonal. The minimum value can occur more than once within a row. Since the min command returns the index of the first occurrence of the minimum, min can miss later occurrences on the diagonal, as follows:
testMatrix = [ 1 3 5 1
2 0 4 6
3 9 2 7
-2 9 4 -2];
[~, iMin] = min(a)
iMin =
4 2 3 4
How can I check if the row minimum is found on the diagonal? I am working with a very large matrix in reality, so I would like to avoid looping down the rows.
Edited: Adam on 4 Oct 2018
Can you not do something like
diag( testMatrix ) == min( testMatrix )
?
I haven't put a whole lot of thought into it so there may be perfectly good reasons why you can't!
KAE on 4 Oct 2018
This does not seem to check the diagonals, or maybe I am misunderstanding,
ans =
4×4 logical array
0 0 0 0
0 1 0 0
0 0 1 0
1 0 0 1

Julian Hapke on 4 Oct 2018
with a slight modification of Adams comment:
diag(testMatrix) == min(testMatrix , [], 2)
min accepts the dimension in which you want the minimum, in this case you want the minimum of each row, so in direction 2 and check against the diagonal of the matrix
KAE on 4 Oct 2018
Edited: KAE on 4 Oct 2018
Works and returns a vector saying whether it is on the diagonal or not, which I realized is what I was looking for when I saw the output. Thanks!
Here it shows it returns zero for rows when the minimum is not on the diagonal.
testMatrixOneWrong = ...
[ 1 3 5 -2
2 0 4 6
3 9 2 7
-2 9 4 -2]
diag(testMatrixOneWrong) == min(testMatrixOneWrong, [], 2)
ans =
4×1 logical array
0
1
1
1