Matrix manipulation: Changing Diagonal values

5 visualizaciones (últimos 30 días)
Abbey
Abbey el 26 de Feb. de 2017
Comentada: Abbey el 26 de Feb. de 2017
Hello Everyone!
I have a matrix data which is from a nxn uitable inputted by a certain user, using this short code
S = get(handles.Table,'data');
I have successfully saved the data in the variable S.
My next goal is to create another matrix out of this matrix. My general formula is
NewMatrix(1,1) = S(1,1)-S(1,2)-S(1,3),...S(1,n)
NewMatrix(2,2) = S(2,2)-S(2,1)-S(2,3),...S(2,n)
So on and so forth. Yes, it is the diagonal element of the matrix which I would like to manipulat. And I wish to multiply by (-1) all of the remaining values in the S matrix.
The NewMatrix will have different diagonal values while all of the other data is the negative of S Matrix.
I hope someone could help me. Cause I am starting to get cray on this. Thank you.

Respuesta aceptada

Stephen23
Stephen23 el 26 de Feb. de 2017
Editada: Stephen23 el 26 de Feb. de 2017
>> S = randi(9,3,5)
S =
4 3 9 4 4
6 4 2 2 9
6 1 1 5 9
>> idx = 1==eye(size(S));
>> new = -S;
>> new(idx) = sum(new,2) + 2*S(idx)
new =
-16 -3 -9 -4 -4
-6 -15 -2 -2 -9
-6 -1 -20 -5 -9
And checking:
NewMatrix(2,2) = S(2,2)-S(2,1)-S(2,3),...S(2,n)
>> S(2,2)-S(2,1)-S(2,3)-S(2,4)-S(2,5)
ans =
-15
>> new(2,2)
ans =
-15

Más respuestas (1)

Walter Roberson
Walter Roberson el 26 de Feb. de 2017
-1 * (S - diag(diag(S))) + diag(NewValuesToInsert)
Or more compactly but less readable,
diag(diag(S)) - S + diag(NewValuesToInsert)
diag(diag(S)) first extracts the diagonal of S to a vector for the first diag call, and then the second call makes that vector the diagonal of a full matrix, with the end result that you have a matrix that is just the diagonal.
  1 comentario
Abbey
Abbey el 26 de Feb. de 2017
Thank you sir, however I am having difficulty using this in a nxn matrix.

Iniciar sesión para comentar.

Categorías

Más información sobre Operating on Diagonal Matrices en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by