Matrix manipulation: Changing Diagonal values

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.

 채택된 답변

Stephen23
Stephen23 2017년 2월 26일
편집: Stephen23 2017년 2월 26일

0 개 추천

>> 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

추가 답변 (1개)

Walter Roberson
Walter Roberson 2017년 2월 26일

2 개 추천

-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

Abbey
Abbey 2017년 2월 26일
Thank you sir, however I am having difficulty using this in a nxn matrix.

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Operating on Diagonal Matrices에 대해 자세히 알아보기

질문:

2017년 2월 26일

댓글:

2017년 2월 26일

Community Treasure Hunt

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

Start Hunting!

Translated by