Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
1995
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 1995

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Sorting eigenvectors by eigenvalue

  • To: mathgroup at smc.vnet.net
  • Subject: [mg2070] Re: [mg2054] Sorting eigenvectors by eigenvalue
  • From: Peder Thusgaard Ruhoff <ptk at imada.ou.dk>
  • Date: Sat, 23 Sep 1995 20:35:35 -0400

On Mon, 18 Sep 1995, William F. Campbell <valentin at wam.umd.edu> wrote:

>   I'm trying to use Sort to sort eigenvectors by eigenvalue.  The eignevectors
> are in a list of lists called vecs, and the eigenvalues in vals after the 
> following function call on matrix aa:  
> 
>   {vals,vecs}=Eigensystem[aa]
> 
>   Then I want to define an ordering function p so I can use Sort[vecs,p].  
> I tried the following: 
>   
>   p[vecs[[i_]],vecs[[j_]]]:=Greater[Abs[vals[[i]],Abs[vals[[j]]]]
> 
>   Mathematica wont parse vecs[[i_]] saying that i is neither an integer nor
> a list of integers.  How can I accomplish what I want to do?
> ...
> 


Dear Bill Campbell,

I don't know if this is what you need, but here is a function that
sorts the eigenvalues and eigenvectors using Sort.

  SortEigensystem[eigsys_] := Transpose[Sort[Transpose[eigsys]]]

  SortEigensystem[eigsys_, p_] := Transpose[Sort[Transpose[eigsys], p]]

Note that you can specify you own ordering function (the second argument)
which is passed directly to Sort.

EXAMPLE:
========

In[1]:= SortEigensystem[eigsys_] := Transpose[Sort[Transpose[eigsys]]]

In[2]:= SortEigensystem[eigsys_, p_] := Transpose[Sort[Transpose[eigsys], p]]

In[3]:= mat = N[{{1,2,0},{2,3,4},{0,4,5}}]

Out[3]= {{1., 2., 0}, {2., 3., 4.}, {0, 4., 5.}}

In[4]:= MatrixForm[%]

Out[4]//MatrixForm= 1.   2.   0

                    2.   3.   4.

                    0    4.   5.

In[5]:= eigsys = Eigensystem[mat]

Out[5]= {{8.33816, 1.95205, -1.29021}, 
 
>    {{0.172027, 0.631179, 0.75632}, {0.786436, 0.374362, -0.491296}, 
 
>     {0.593233, -0.679313, 0.431981}}}

In[6]:= SortEigensystem[eigsys]

Out[6]= {{-1.29021, 1.95205, 8.33816}, 
 
>    {{0.593233, -0.679313, 0.431981}, {0.786436, 0.374362, -0.491296}, 
 
>     {0.172027, 0.631179, 0.75632}}}

In[7]:= SortEigensystem[eigsys, N[#1 > #2]&]

Out[7]= {{8.33816, 1.95205, -1.29021}, 
 
>    {{0.172027, 0.631179, 0.75632}, {0.786436, 0.374362, -0.491296}, 
 
>     {0.593233, -0.679313, 0.431981}}}

===============================================================================

Best wishes,

Peder

------------------------------------------------------------------------------
Peder Thusgaard Ruhoff                     Phone: (+45) 66 15 86 96, ext. 2411
Dept. of Mathematics and Computer Science  Fax:   (+45) 65 93 26 91
Odense University, Campusvej 55            Email: ptk at imada.ou.dk
DK-5230 Odense M, DENMARK

  "It is important for him who wants to discover not to confine himself
   to one chapter of science, but to keep in touch with various others."
                                                            - Jacques Hadamard
------------------------------------------------------------------------------



  • Prev by Date: Re: Dealing with Indeterminant points & ListPlot
  • Next by Date: Re: Mathematica and NetScape
  • Previous by thread: Re: Sorting eigenvectors by eigenvalue
  • Next by thread: Re: Sorting eigenvectors by eigenvalue