MATLAB MATLAB Incorrectly Calculating Eigenvalues of Unitary Matrix

AI Thread Summary
The discussion revolves around a MATLAB user encountering issues with eigenvalue calculations for a unitary matrix, A. The user notes that while the third eigenvalue has an absolute value of 1, the first two do not, raising concerns about MATLAB's accuracy. There is a suggestion to check the absolute values of the eigenvalues, which reportedly return 1. Additionally, the user is advised to use the conjugate transpose function, ctranspose(A), to verify that A is indeed unitary by confirming it produces the identity matrix. The conversation highlights potential misunderstandings in verifying matrix properties in MATLAB.
ColdFusion85
Messages
141
Reaction score
0
This is a MATLAB question. I am trying to find the eigenvalues of a matrix with both real and complex numbers. This is my session.

>> A=[1/sqrt(2),i/sqrt(2),0; -1/sqrt(2),i/sqrt(2),0; 0,0,1]

A =

0.7071, 0 + 0.7071i, 0
-0.7071, 0 + 0.7071i, 0
0, 0, 1.0000

>> eig(A)

ans =

0.9659 - 0.2588i
-0.2588 + 0.9659i
1.0000

However, matrix A is unitary, so |\lambda| should equal 1. This is true for the third eigenvalue, but not for the other two. I even noticed that MATLAB fails to confirm A is unitary:

A =

0.7071, 0 + 0.7071i, 0
-0.7071, 0 + 0.7071i, 0
0, 0, 1.0000

>> B=[1/sqrt(2),-1/sqrt(2),0; i/sqrt(2),i/sqrt(2),0;0,0,1]

B =

0.7071, -0.7071, 0
0 + 0.7071i, 0 + 0.7071i, 0
0, 0, 1.0000

>> A*B

ans =

0, -1, 0
-1, 0, 0
0 , 0, 1

Why is MATLAB giving me incorrect answers? It was even doing this for me yesterday when I was dealing with real matricies. It was giving me eigenvalues with imaginary components when they were, in fact, all real. What's the deal?
 
Physics news on Phys.org
ColdFusion85 said:
However, matrix A is unitary, so |\lambda| should equal 1. This is true for the third eigenvalue, but not for the other two.
Have you checked using the abs function for each eigenvalue? I get 1 on checking for each eigenvalue.
ColdFusion85 said:
I even noticed that MATLAB fails to confirm A is unitary
Are you trying to find the Hermitian conjugate of A and multiplying A with it to get I? Don't do it like that. Use ctranspose(A)*A. You'll surely get the identity matrix.
 
Back
Top