MATLAB Code for Manual Eigenvalue Decomposition
clc;
clear;
close all;
A = [1,2];
R = A' * A;
array_length = length(A);
eigenvalues = manual_eigenvalue_decomposition(R, array_length);
disp('Eigenvalues:');
disp(eigenvalues);
eigenvectors = find_eigenvectors(R, eigenvalues);
disp('Eigenvector Matrix:');
disp(eigenvectors);
% Manual Eigenvalue Decomposition Function
function eigenvalues = manual_eigenvalue_decomposition(A, n)
eigenvalues = zeros(n, 1); % Initialize eigenvalues as a column vector
for i = 1:n
% Start with a random vector
v = randn(n, 1);
% Power iteration to find the eigenvector corresponding to the largest eigenvalue
for j = 1:10 % Iteration count (power iteration steps)
v = A * v; % Multiply by matrix A
v = v / norm(v); % Normalize the vector
end
% Eigenvalue is the Rayleigh quotient
eigenvalues(i) = (v' * A * v) / (v' * v);
% Deflate the matrix to find the next eigenvector
A = A - eigenvalues(i) * (v * v');
end
end
function eigenvectors = find_eigenvectors(A, eigenvalues)
n = size(A, 1); % Get the size of the matrix A
num_eigenvalues = length(eigenvalues); % Get the number of eigenvalues
eigenvectors = zeros(n, num_eigenvalues); % Initialize eigenvectors matrix
for i = 1:num_eigenvalues
lambda = eigenvalues(i); % Take the eigenvalue
% Solve (A - lambda * I) * v = 0
eig_matrix = A - lambda * eye(n); % (A - lambda * I)
% Find the null space (eigenvector corresponding to the eigenvalue)
v = null(eig_matrix);
% If there are multiple eigenvectors, select the first one
if size(v, 2) > 1
v = v(:, 1);
end
% Normalize the eigenvector
eigenvectors(:, i) = v / norm(v);
end
end
Output
Eigenvalues:
5.0000
-0.0000
Eigenvector Matrix:
0.4472 -0.8944
0.8944 0.4472
MATLAB Code for Manual Eigenvalue Decomposition with Scaling of the Input Matrix R
clc;clear;
close all;
A = [1,2];
R = (A' * A)/2;
array_length = length(A);
eigenvalues = manual_eigenvalue_decomposition(R, array_length);
disp('Eigenvalues:');
disp(eigenvalues);
eigenvectors = find_eigenvectors(R, eigenvalues);
disp('Eigenvector Matrix:');
disp(eigenvectors);
% Manual Eigenvalue Decomposition Function
function eigenvalues = manual_eigenvalue_decomposition(A, n)
eigenvalues = zeros(n, 1); % Initialize eigenvalues as a column vector
for i = 1:n
% Start with a random vector
v = randn(n, 1);
% Power iteration to find the eigenvector corresponding to the largest eigenvalue
for j = 1:10 % Iteration count (power iteration steps)
v = A * v; % Multiply by matrix A
v = v / norm(v); % Normalize the vector
end
% Eigenvalue is the Rayleigh quotient
eigenvalues(i) = (v' * A * v) / (v' * v);
% Deflate the matrix to find the next eigenvector
A = A - eigenvalues(i) * (v * v');
end
end
function eigenvectors = find_eigenvectors(A, eigenvalues)
n = size(A, 1); % Get the size of the matrix A
num_eigenvalues = length(eigenvalues); % Get the number of eigenvalues
eigenvectors = zeros(n, num_eigenvalues); % Initialize eigenvectors matrix
for i = 1:num_eigenvalues
lambda = eigenvalues(i); % Take the eigenvalue
% Solve (A - lambda * I) * v = 0
eig_matrix = A - lambda * eye(n); % (A - lambda * I)
% Find the null space (eigenvector corresponding to the eigenvalue)
v = null(eig_matrix);
% If there are multiple eigenvectors, select the first one
if size(v, 2) > 1
v = v(:, 1);
end
% Normalize the eigenvector
eigenvectors(:, i) = v / norm(v);
end
end
Output
Eigenvalues:
2.5000
-0.0000
Eigenvector Matrix:
0.4472 -0.8944
0.8944 0.4472
Conclusion
The eigenvalues change, while the eigenvectors remain the same when scaling the input matrix for eigenvalue decomposition.
Copy the MATLAB Code above from here
Further Reading
[1] Singular Value Decomposition in Multi-Antenna Communication