eig return complex values

21 次查看(过去 30 天)
Hello,
I'm trying to find the eigenvalues and eigenvectors of an invertible matrix. The eig function returns me complex values.
But the matrix is invertible: I invert it on Pascal.
How to explain and especially how to solve this problem please?
The matrix I am trying to invert is the inv(C)*A matrix, from the attached files.
Thanks,
Michael
  5 个评论
Michael cohen
Michael cohen 2022-1-22
编辑:Michael cohen 2022-1-22
Thank you, but in fact it is the matrix_invC.A.mat that I try to diagonalize :)
Matt J
Matt J 2022-1-22
编辑:Matt J 2022-1-22
That matrix is not symmetric, so there is no reason to think it will have real eigenvalues.

请先登录,再进行评论。

采纳的回答

Torsten
Torsten 2022-1-22
编辑:Torsten 2022-1-22
Use
E = eig(A,C)
instead of
E = eig(inv(C)*A)
or
E = eig(C\A)
  4 个评论
Torsten
Torsten 2022-1-22
编辑:Torsten 2022-1-22
Although negligible, eig(A,C) produces no imaginary parts.
E = eig(A,C) solves for the lambda-values that satisfy
A*x = lambda*C*x (*)
for a vector x~=0.
If C is invertible, these are the eigenvalues of inv(C)*A (as you can see by multiplying (*) with
inv(C) ).
Michael cohen
Michael cohen 2022-1-23
Wouah, thank you very much. It’s very clear and allow us to solve our problem 🙏

请先登录,再进行评论。

更多回答(1 个)

Matt J
Matt J 2022-1-22
编辑:Matt J 2022-1-22
It turns out that B=C\A does have real eigenvalues in this particular case, but floating point errors approximations produce a small imaginary part that can be ignored.
load matrices
E=eig(C\A);
I=norm(imag(E))/norm(real(E))
I = 3.3264e-18
So just discard the imaginary values,
E=real(E);
  2 个评论
Michael cohen
Michael cohen 2022-1-23
Thank you very much @Matt J for all those explanations !
Matt J
Matt J 2022-1-23
You 're welcome but please Accept-click one of the answers.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Linear Algebra 的更多信息

标签

产品


版本

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by