Unable to find out left eigen vectors of symbolic matrix

4 次查看(过去 30 天)
Hello,
I have 3*3 matrix having symbolic elements. I tried to find out the eigen value, left eigen vector and right eigen vector using below command
[right_eig_vectors, eig_values] = eig(A);
[left_eig_vectors, ~] = eig(A.');
My understanding is that the left eigenvectors solve the following equation: W'*A-D*W'=0. But when I put that into solve ,it partially solve this equation of W'*A-D*W'=0. Can anyone help me?
  3 个评论
Walter Roberson
Walter Roberson 2021-10-4
Looks solved to me?
Reminder: Using .' suggests that you are using real-valued A, but you did not tell us that. My understanding is that if A is potentially complex valued, you shoul be taking eig(A')
syms A [3 3]
[right_eig_vectors, eig_values] = eig(A)
right_eig_vectors = 
eig_values = 
[left_eig_vectors, ~] = eig(A.')
left_eig_vectors = 
Abhinav Kumar
Abhinav Kumar 2021-10-5
编辑:Abhinav Kumar 2021-10-5
Hi,
I have attached the matlab code file
syms z1 z2 z3 z4 z5 z6 z7 ;
A=[z1 z2 z3; z4 z5 z6; 1 2 z7]
M=subs(A,[z1 z2 z3 z4 z5 z6 z7],[-0.1 0.1 -2 0.01 0.07 -0.5 0.2])
[V,D] = eig(M)
[W, ~] = eig(M.')
W'*M - D*W'
The W'*M-D*W' should be equal to or almost zero but that not the case in my coding.
The W'*M-D*W' outputs are like this
ans =
1.0e-14 *
-0.1388 0.5329 0
ans =
1.9774 + 0.1985i 4.0123 - 0.0596i 0.0000 + 3.4528i .(this should be equal to zero)
ans =
1.9774 - 0.1985i 4.0123 + 0.0596i 0.0000 - 3.4528i. (This should be equal to zero)
Is there any different command which I can use for correct left eigen vectors or need any modification
in this command. Please help

请先登录,再进行评论。

采纳的回答

Christine Tobler
Christine Tobler 2021-10-5
The left eigenvectors are still expressed as right eigenvectors of M', meaning they satisfy a slightly different equation:
syms z1 z2 z3 z4 z5 z6 z7 ;
A=[z1 z2 z3; z4 z5 z6; 1 2 z7];
M=subs(A,[z1 z2 z3 z4 z5 z6 z7],[-0.1 0.1 -2 0.01 0.07 -0.5 0.2]);
[V, D] = eig(M);
[W, D2] = eig(M');
assert(isequal(D, D2))
double(norm(M*V - V*D))
ans = 0
double(norm(M'*W - W*D))
ans = 0
% Apply conjugate transpose to the second expression:
double(norm(W'*M - conj(D)*W'))
ans = 0
% Apply non-conjugate transpose instead:
double(norm(W.'*M - D*W.'))
ans = 0
% You can also apply CONJ to W, in which case the formula becomes:
W = conj(W);
double(norm(W'*M - D*W'))
ans = 0
% This last one matches what happens in EIG for floating-point numbers,
% where it's possible to compute left and right eigenvalues in one go.
Md = double(M);
[Vd, Dd, Wd] = eig(Md);
norm(Md*Vd - Vd*Dd)
ans = 1.9481e-15
norm(Wd'*Md - Dd*Wd')
ans = 9.5794e-16
So in short, taking the conjugate of the matrix W should resolve your issues.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Number Theory 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by