Re: Sorting eigenvectors by eigenvalue

• To: mathgroup at smc.vnet.net
• Subject: [mg2061] Re: [mg2054] Sorting eigenvectors by eigenvalue
• From: brucec (Bruce Carpenter)
• Date: Sat, 23 Sep 1995 20:34:01 -0400

>  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?
>______________________________________________________________________________
>|                                                                            |
>|                When endeavoring to explain human behaviour,                |
>|                never discount the possibility of stupidity.                |
>|                                                                            |
>|                        Never ascribe to malfeasance                        |
>|                  that which can be explained as stupidity.                 |
>|                                                                            |
>|  Bill Campbell                                                             |
>`----------------------------------------------------------------------------'

It is easier to do the sorting while the output from Eigensystem is intact:

In[1]:=
aa = Array[Random[]&,{3,3}]
Out[1]=
{{0.0712802, 0.413021, 0.774565}, {0.807317, 0.491799, 0.173613},

{0.369134, 0.331948, 0.661642}}
In[2]:=
Eigensystem[aa]
Out[2]=
{{1.3641, -0.359698, 0.220318}, {{0.540551, 0.614622, 0.574495},

{-0.729275, 0.682954, 0.0416072}, {0.181478, -0.852815, 0.489665}}}
In[3]:=
Transpose[%]
Out[3]=
{{1.3641, {0.540551, 0.614622, 0.574495}},

{-0.359698, {-0.729275, 0.682954, 0.0416072}},

{0.220318, {0.181478, -0.852815, 0.489665}}}
In[4]:=
Sort[%, (Abs[#1[[1]]]<=Abs[#2[[1]]])&]
Out[4]=
{{0.220318, {0.181478, -0.852815, 0.489665}},

{-0.359698, {-0.729275, 0.682954, 0.0416072}},

{1.3641, {0.540551, 0.614622, 0.574495}}}
In[5]:=
Transpose[%]
Out[5]=
{{0.220318, -0.359698, 1.3641}, {{0.181478, -0.852815, 0.489665},

{-0.729275, 0.682954, 0.0416072}, {0.540551, 0.614622, 0.574495}}}

Bruce Carpenter
Wolfram Research, Inc.

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