Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

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?

share|improve this question
    
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$. –  rm -rf Jul 9 '13 at 17:37
    
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) –  Maximilian Schulz Jul 9 '13 at 18:12

1 Answer 1

up vote 10 down vote accepted

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.

share|improve this answer
    
Thanks, this is actually exactly what I was looking for! –  Maximilian Schulz Jul 9 '13 at 19:18

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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