Matrix manipulation: Changing Diagonal values
5 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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.
0 commentaires
Réponse acceptée
Stephen23
le 26 Fév 2017
Modifié(e) : Stephen23
le 26 Fév 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
Plus de réponses (1)
Walter Roberson
le 26 Fév 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.
Voir également
Catégories
En savoir plus sur Operating on Diagonal Matrices dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!