how can i negative all value in a matrix except diagonal?

5 views (last 30 days)
13.333 5 0 5 3.3333 0
5 27.333 4 10 3.3333 5
0 4 17.846 0 3.8462 10
5 10 0 17.5 2.5 0
3.3333 3.3333 3.8462 2.5 16.346 3.3333
0 5 10 0 3.3333 18.333

Accepted Answer

Stephen23
Stephen23 on 11 Jan 2022
Edited: Stephen23 on 11 Apr 2022
M = [13.333,5,0,5,3.3333,0;5,27.333,4,10,3.3333,5;0,4,17.846,0,3.8462,10;5,10,0,17.5,2.5,0;3.3333,3.3333,3.8462,2.5,16.346,3.3333;0,5,10,0,3.3333,18.333]
M = 6×6
13.3330 5.0000 0 5.0000 3.3333 0 5.0000 27.3330 4.0000 10.0000 3.3333 5.0000 0 4.0000 17.8460 0 3.8462 10.0000 5.0000 10.0000 0 17.5000 2.5000 0 3.3333 3.3333 3.8462 2.5000 16.3460 3.3333 0 5.0000 10.0000 0 3.3333 18.3330
Method one: subtraction (square only):
A = diag(diag(M)) - M.*~eye(size(M))
A = 6×6
13.3330 -5.0000 0 -5.0000 -3.3333 0 -5.0000 27.3330 -4.0000 -10.0000 -3.3333 -5.0000 0 -4.0000 17.8460 0 -3.8462 -10.0000 -5.0000 -10.0000 0 17.5000 -2.5000 0 -3.3333 -3.3333 -3.8462 -2.5000 16.3460 -3.3333 0 -5.0000 -10.0000 0 -3.3333 18.3330
Method two: indexing (more robust, should work for any size):
B = -M;
B(eye(size(M))==1) = diag(M)
B = 6×6
13.3330 -5.0000 0 -5.0000 -3.3333 0 -5.0000 27.3330 -4.0000 -10.0000 -3.3333 -5.0000 0 -4.0000 17.8460 0 -3.8462 -10.0000 -5.0000 -10.0000 0 17.5000 -2.5000 0 -3.3333 -3.3333 -3.8462 -2.5000 16.3460 -3.3333 0 -5.0000 -10.0000 0 -3.3333 18.3330

More Answers (1)

Jon
Jon on 11 Jan 2022
Am = -(A - diag(diag(A))) + diag(diag(A))

Categories

Find more on Operating on Diagonal Matrices in Help Center and File Exchange

Products


Release

R2016b

Community Treasure Hunt

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

Start Hunting!