How to find eigenvectors?
조회 수: 1,044 (최근 30일)
이전 댓글 표시
댓글 수: 0
답변 (4개)
John D'Errico
2021년 1월 6일
편집: John D'Errico
2021년 1월 6일
Why does V seem strange?
A = [-2 0 2
2 -1 5
0 0 1 ];
[V,D] = eig(A)
The columns of V are eigenvectors. They are normalized to have unit 2-norm. So I'm not sure what you are asking.
If you multiply them with A, as in
A*V(:,2)
How does that compare to
D(2,2)*V(:,2)
norm(A*V - V*D)
Ah, now I know what bothers you. You were expecting an orthogonal set of vectors...
댓글 수: 3
Walter Roberson
2021년 1월 6일
Why not? Eigenvectors are seldom integers, and you are proceeding numerically so you are going to get numeric values with decimal points.
John D'Errico
2021년 1월 7일
Why would you expect that all numbers are always going to be integers? Probably because in your class, your teacher showed you only simple integer vectors and arrays. But real world problems are rarely simply composed of integers.
In fact, eigenvectors from eig are normalized (as I said in my answer) to have a Euclidean norm of 1. That means unless the eigenvector is a very rare case, it will NEVER be entirely composed of integers as it is returned by eig. Consider this matrix, and its eigenvectors.
A = [-2 0 2
2 -1 5
0 0 1];
[V,D] = eig(A);
V(:,2)
I said the columns of V are eigenvectors. Is that true?
V2 = V(:,2)
A*V2
Since when I multiply by V2, it multiplies V2 by 2, this is an eigenvector. Can we scale V2 arbitrarily, so that it is composed of integers? In this case, we may be able to do that.
V2new = V2/V2(1)
Is it still true that V2 is an eigenvector? Yes, in the sense that A*V2new=2*V2new is still true. V2new is not normalized to have unit norm though.
A*V2new
And since eig returns UNIT normalized eigenvectors, you will almost always see numbers that are not whole numbers. Only in the rare case like the first eigenvector, where we saw this:
V(:,1)
will an eigenvector happen to be composed of purely integers.
Walter Roberson
2021년 1월 6일
format long g
A = [
-2 0 2
2 -1 5
0 0 1 ]
[V, D] = eig(A)
A*V
V*D
A*V - V*D
So the values do satisfy the required conditions. But perhaps you would prefer a different normalization?
Vnorm = V ./ max(abs(V),[],1)
A*Vnorm - Vnorm * D
You might prefer a different normalization yet. Note that the columns are in a different order than above.
[V,D] = eig(sym(A))
댓글 수: 5
Walter Roberson
2021년 1월 6일
Are you aware that eigenvectors are not unique? Multiplying them or dividing them by any constant gives another eigenvector of the same class?
format long g
A = [
-2 0 2
2 -1 5
0 0 1 ]
[V, D] = eig(A)
v = V(:,3);
sym(v./v(3) * 6)/6
sym(v./v(2) * 57)/57
sym(v./v(1) * 3)/3
Walter Roberson
2021년 1월 6일
By the way, the V returned by matlab has the property that norm() of each column is 1.
RoBoTBoY
2021년 1월 7일
댓글 수: 11
Paul
2022년 8월 13일
As we can see, Mathematica has some internal logic to determine how Eigensystem should proceed based on the type of the input. Matlab basically pushes that logic onto the user. That is, if a "nice" solution is desired, then use a sym input, as @Walter Roberson showed in this answer. For what Mathematica calls the exact or symbolic case, It looks like it takes the extra step of multiplying each eigenvector by the gcd (at least for this example), which the user can do in Matlab as well if using sym. So Matlab does provide the same functionality as Mathematica, but because there will always be an arbitrary scale factor floating around for each eigenvector, it is always up to the user to scale the results as may be desired, for either double or sym inputs. The same is true for Mathematica as well.
m tikhemine
2022년 8월 13일
Thank you very much @Paul
As regards to you @John D'Errico, please don't ever answer any of my future questions until you would change your mood and get quiet.
Nirodha Sampath
2022년 9월 24일
Compute the frame operator for the collection {0,1,1}, {1,1,2}, {1,-1,0}, {1,-2,-1}, {-1,3,2}, {-2,4,2} in R3. Use matlab to find its eigenvalues.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Linear Algebra에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!