Clear Filters
Clear Filters

Unexpected eigenvectors for circulant matrix

2 views (last 30 days)
Hello everyone
I am trying to compute the eigenvalues and eigenvectors of a 3x3 matrix that happens to be circulant. The matrix itself is a 3x3 transfer function that is circulant.
Now I would expect the eigenvectors of this matrix to be the so-called fourier-modes (as described here https://en.wikipedia.org/wiki/Circulant_matrix):
with
The problem is that when I call the 'eig' function, the eigenvectors that are computed do not appear to be these fourier modes.
The following script computes the eigenvalues of these matrices, it also prints the matrix and its eigenvalues at each step to the terminal, this is the program output:
System Matrix
1.0e-03 *
0.0064 + 0.5864i -0.0003 - 0.0158i -0.0003 - 0.0158i
-0.0003 - 0.0158i 0.0064 + 0.5864i -0.0003 - 0.0158i
-0.0003 - 0.0158i -0.0003 - 0.0158i 0.0064 + 0.5864i
Eigenvectors
0.5774 + 0.0000i 0.7507 + 0.0000i -0.1463 + 0.2933i
0.5774 + 0.0000i -0.1253 + 0.1218i -0.5577 - 0.2933i
0.5774 + 0.0000i -0.6254 - 0.1218i 0.7040 + 0.0000i
Complex Angles of Eigenvectors
0.0000 0 2.0335
0 2.3706 -2.6574
0.0000 -2.9493 0
click enter to compute next frequency
System Matrix
1.0e-03 *
0.0064 + 0.5867i -0.0003 - 0.0159i -0.0003 - 0.0159i
-0.0003 - 0.0159i 0.0064 + 0.5867i -0.0003 - 0.0159i
-0.0003 - 0.0159i -0.0003 - 0.0159i 0.0064 + 0.5867i
Eigenvectors
0.5774 + 0.0000i 0.7545 + 0.0000i -0.0922 + 0.2888i
0.5774 + 0.0000i -0.1286 + 0.1056i -0.5944 - 0.2888i
0.5774 + 0.0000i -0.6260 - 0.1056i 0.6866 + 0.0000i
Complex Angles of Eigenvectors
0.0000 0 1.8797
0 2.4540 -2.6894
0.0000 -2.9745 0
.......
From the output above it can be seen that while the "System Matrix" Ymatres is circulant, its eigenvectors do not seem to be the Fourier-Modes.
Code to reproduce the issue:
%% Multi Coil Decoupling Computations for three coils
s=tf('s');
C=1/12*1e-6;
L=108e-3;
%DC Resistance
%R=3.2;
%Resonant Resistance
R=18.5;
M=9e-3;
omegares=1/(sqrt(L*C));
Zres=s*L+R+1/(s*C);
%compute system impedance and admittance matrices
Zmat=[Zres,-s*M,-s*M;-s*M,Zres,-s*M;-s*M,-s*M,Zres];
Ymat=inv(Zmat);
%simulate current response if the three input voltages are chosen the same
N=10000;
omegas=linspace(0.5*omegares,2*omegares,N);
currents=zeros(3,N);
for i=1:1:N
Ymatres=evalfr(Ymat,j*omegas(i));
currents(:,i)=Ymatres*[24;24;24];
end
figure(1);
plot(omegas/omegares,abs(currents(1,:)));
grid();
xlabel("Frequency $\frac{\omega}{\omega_{0}}$",'interpreter','latex');
ylabel("Current Amplitude [A]");
%compute the SVD of the impedance matrix as a function of frequency
eigenvalues=zeros(3,N);
for i=1:1:N
Ymatres=evalfr(Ymat,j*omegas(i));
[V,D]=eig(Ymatres);
eigenvalues(1,i)=D(1,1);
eigenvalues(2,i)=D(2,2);
eigenvalues(3,i)=D(3,3);
disp("System Matrix");
disp(Ymatres);
disp("Eigenvectors");
disp(V);
disp("Complex Angles of Eigenvectors")
disp(angle(V));
input("click enter to compute next frequency");
end
%plot the singular values of the impedance matrix
figure(3);
plot(omegas/omegares,abs(eigenvalues(1,:)),"blue");
hold on;
plot(omegas/omegares,abs(eigenvalues(2,:)),"black");
hold on;
plot(omegas/omegares,abs(eigenvalues(3,:)),"r--");
grid();
xlabel("Frequency $\frac{\omega}{\omega_{0}}$",'interpreter','latex');
ylabel("Admittance Eigenvalue $\sigma$ [S]",'interpreter','latex');
Does anyone have an idea what the issue could be?

Accepted Answer

Matt J
Matt J on 21 Apr 2022
Edited: Matt J on 21 Apr 2022
It looks like your matrices have some eigenvalues with multiplicity greater than 1. The eigenvectors are therefore not unique.
  1 Comment
memductance
memductance on 21 Apr 2022
Hello and thanks for your reply which explains the output of the eigenvalue decomposition. I think this solves my issue.

Sign in to comment.

More Answers (0)

Categories

Find more on Linear Algebra in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!