Not sure best way to code orthogonal diagonalization

30 Ansichten (letzte 30 Tage)
Thomas Stowell
Thomas Stowell am 7 Apr. 2020
Just having an issue with highlighted part, will attach rest of code below.
function []=symmetric(A)
if size(A,1)~=size(A,2)
disp('Matrix is not symmetric')
return
else
if all(abs(A-A')<.000001)
[P,D]=eig(A);
if all(abs(inv(P)-P')<.00001)
disp('P:')
disp(P)
disp('D:')
disp(D)
disp('P is orthogonal matrix')
else
disp('P:')
disp(P)
disp('D:')
disp(D)
disp('P is orthogonal matrix')
end
else
disp('Matrix is not symmetric')
end
end
end
  5 Kommentare
Thomas Stowell
Thomas Stowell am 8 Apr. 2020
Is there any suggested code or is this thread primarily to point out how bad other code is?
David Goodmanson
David Goodmanson am 9 Apr. 2020
Hi Thomas,
That's a good point. Because of your other question I had a feeling that the stuff here was not really helping.
Since the entries of A in this case are integers you can do a check for exact equality, A - A' == 0. The other tests are going to take tolerance checks, such as all(A*P-P*D < tolerance). As far as the acceptable tolerance, it looks like the instructor has provided that with closetozeroroundoff (although I have no idea how it works). For orthogonality, you can have all(inv(P) -P' < tolerance) as you are doing. Probably better, especially for large matrices, is not doing the inverse. For an orthogonal matrix P*P' = eye(size(P)) so you can check all(P*P'-eye(size(P))< tolerance).

Melden Sie sich an, um zu kommentieren.

Antworten (1)

David Hill
David Hill am 9 Apr. 2020
For homework, we like to help you figure it out yourself. The code below might help and you could likely find a better way.
function a=symmetric(A)
if issymmetric(A)
[P,D]=eig(A);
if closetozeroroundoff(P*D,A*P)&&closetozeroroundoff(inv(P),P')
a='orthogonal diagonal';
else
a='symmetric';
end
else
a='nonsymmetric';
end
end
function yn=closetozeroroundoff(a,b)
yn=0;
if norm(a-b)<1e-14
yn=1;
end
end

Kategorien

Mehr zu Linear Algebra finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by