How to sort the matrix quickly?
Show older comments
Dear all, How to sort the matrix quickly? Now i use this code to do it.
[V,DD]=eig(KK,MM);
DD=abs(DD);
mp=3*(Ms+1)*(2*Ns+1)+P1*(2*Ns+1)+2*P2*(2*Ns+1); % the total dimension of the matrix
for p=1:mp
for q=p+1:mp
if DD(p,p)>= DD(q,q)
d=DD(p,p);
dd=V(:,p);
DD(p,p)=DD(q,q);
V(:,p)=V(:,q);
DD(q,q)=d;
V(:,q)=dd;
end
end
end
Thank you very much.
Answers (2)
Image Analyst
on 10 Dec 2012
0 votes
And what's wrong with the built-in sort() function? Why aren't you using that? Is this a homework exercise?
2 Comments
Xianjie
on 10 Dec 2012
Image Analyst
on 10 Dec 2012
Uh, not quite sure I follow that. Anyway, Roger did it below using sort() and he's highly respected and always or nearly always right, so I believe using the built-in sort() function is the way to go.
Roger Stafford
on 10 Dec 2012
The following should be a much faster way of sorting V and DD by the absolute values of the eigenvalues in DD:
[V,DD] = eig(KK,MM);
D = diag(DD);
[~,p] = sort(abs(D));
V = V(:,p);
DD = diag(D(p));
Roger Stafford
Categories
Find more on Shifting and Sorting Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!