13
$\begingroup$

just a quick question that is very simple but somewhat hard to explain. I am using 4 specific eigenvalues of a large 80x80 k-dependant matrix. I found the 4 eigenvalues of interest for various k and sorted them in 4 distinct lists as need them. Now I am interested in their eigenvectors.

My question is, is there a way, other than Solve, to get the eigenvector to ONE specific eigenvalue. I guess I could use Eigensystem, let Mathematica find all 80 again and the pick the EVec corresponding to the Eval already found. This seems somewhat stupid though, because I don't need the 79 others.

On the other hand Solve looks also like overcomplicating the problem as well, as I am not using an inbuilt Algorithm to find Eigenvectors anymore. Besides my first tries here weren't successful at all, giving me error messages saying something about badly conditioned matrices giving large numerical error.

Help would be much appreciated! Thanks

EDIT1: Using Eigensystem showed me that the results for eigenvalues by Eigenvalue are different in the 16th digit than the results for Eigensystem!! Why is that! And how to get around that?

$\endgroup$
  • $\begingroup$ If you know a little more about your eigenvalues — for example, if they're the largest or among the largest $p$ or between the $p$th and the $q$th eigenvalues — then you could use Eigensystem to solve only for the first $p$ or for $p$ through $q$. $\endgroup$ – rm -rf Jul 9 '13 at 17:37
  • $\begingroup$ That is the problem. They are often the 4 smallest, but not always, and it varies what "position" they are as k varies. That is the whole reason why I tediously wrote a procedure to sort them into 4 lists. What I am finally interested in is the variation of the Eigenvectors with varying k, but for the specific "string" of eigenvalues that I created (i.e one of the 4 lists) $\endgroup$ – GermanExpress Jul 9 '13 at 18:12
17
$\begingroup$

Here is a way to get the eigenvectors, using NullSpace. I'm using a smaller matrix as an example here:

MatrixForm[matrix = N[HilbertMatrix[4]]]

$$\left( \begin{array}{cccc} 1. & 0.5 & 0.333333 & 0.25 \\ 0.5 & 0.333333 & 0.25 & 0.2 \\ 0.333333 & 0.25 & 0.2 & 0.166667 \\ 0.25 & 0.2 & 0.166667 & 0.142857 \\ \end{array} \right)$$

{λList, vList} = Eigensystem[matrix];

eigenVector[i_] := 
 First@NullSpace[matrix - knownλ[[i]] IdentityMatrix[4]]

matrix.eigenVector[2] - knownλ[[2]] eigenVector[2] // Chop

(* ==> {0, 0, 0, 0} *)

The last line confirms that the function eigenVector indeed found the eigenvector for eigenvalue i in the list that was determined earlier.

$\endgroup$
  • $\begingroup$ Thanks, this is actually exactly what I was looking for! $\endgroup$ – GermanExpress Jul 9 '13 at 19:18
  • $\begingroup$ To add on to that, how do I get the eigenvectors corresponding to only the purely real eigenvalues from a list of eigenvalues which has both real and complex eigenvalues? thanks $\endgroup$ – Akash Ganesh Dec 26 '18 at 15:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.