Numerical method to solve matric for eigen values of matrix (the input of matrix is an array)?
3 views (last 30 days)
Show older comments
Data1 = readtable('Aeiphi.xlsx');
T1=table2array(Data1);
freq = T1(:,2); % Frequency (in THz)
txx = T1(:,3); % Amplitude of Co-Polarozation XX
P1 = T1(:,4); % Phase of Co-Polarozation XX
tyy = T1(:,5); % Amplitude of Co-Polarozation YY
P2 = T1(:,6); % Phase of Co-Polarozation YY
txy = T1(:,7); % Amplitude of Cross-Polarozation XY
P3 = T1(:,8); % Phase of Cross-Polarozation XY
tyx = T1(:,9); % Amplitude of Cross-Polarozation YX
P4 = T1(:,10); % Phase of Cross-Polarozation YX
T_XX = txx.*exp(1i.*P1); % Transmittance of co - polarozation of XX
T_YY = tyy.*exp(1i.*P2); % Transmittance of co - polarizarion of yy
T_XY = txy.*exp(1i.*P3); % Transmittance of cross polarization of xy
T_YX = tyx.*exp(1i.*P4); % Transmittance of cross polarization of yx
TT = table(T_XX,T_YY,T_XY,T_YX);
%%%% Eigen Matrix
ii = 1:1:1002;
n = length(ii);
for i = 1:n
T = [T_XX(i,1), T_XY(i,1); T_YX(i,1), T_YY(i,1)]; % Eigen Matrix for each frequency
E = eig(T); % Eigen Values
val = [E(1,1), E(2,1)]; % Reordering the Matrix
E1(i,1) = val(:,1); % Eigen Value 1
E2(i,1) = val(:,2); % Eigen value 2
ii=ii+1;
ES1(:,1) = real(E1(:,1));
ES2(:,1) = real(E2(:,1));
ephi1(:,1) = imag(E1(:,1));
ephi2(:,1) = imag(E2(:,1));
end
%% From eigen values separate real and imaginary part.
% (Real part: Transmission coffecient, Imaginary part: Phase)
a = abs(ES1);
b = abs(ES2);
c = ephi1;
d = ephi2;
T2 = table(a,b,c,d)
figure
plot(freq,a) % Plot of freq vs real eigen value 1 and 2
plot(freq,b)
ylim([0 1])
plot(freq,ephi1,freq,ephi2) % Plot of freq vs imag eigen value 1 and 2
ylim([-0.6 0.6])
0 Comments
Answers (2)
Walter Roberson
on 19 Aug 2024
E1(i,1) = val(:,1); % Eigen Value 1
E2(i,1) = val(:,2); % Eigen value 2
ii=ii+1;
You did not initialize E1 and E2 before the loop, so E1 and E2 become initialized during the first iteration. i = 1 for the first iteration, so E1 and E2 get intialized to 1 x 1
The first iteration E1 is 1 x 1 and E2 is 1 x 1.
ES1(:,1) = real(E1(:,1));
ES2(:,1) = real(E2(:,1));
ES1 and ES2 are not initialized before the loop, so ES1 and ES2 are used. The first iteration E1 and E2 are 1 x 1, so (:,1) indexing will fetch 1 x 1, so ES1 and ES2 will get initialized to 1 x 1
The second iteration, i = 2 so E1(2,1) and E2(2,1) get assigned to, growing E1 and E2 to 2 x 1.
Then E1(:,1) is 2 x 1. But ES1 is still 1 x 1 so ES1(:,1) is a 1 x 1 extract of ES1. So the destination is 1 x 1 but the source is 2 x 1.
0 Comments
CHARUMATHI P R
on 22 Aug 2024
2 Comments
Steven Lord
on 22 Aug 2024
Please show the modified code and the full and exact text of any warning and/or error messages you received (all the text displayed in orange and/or red in the Command Window when you run your code.)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!