Uploaded by Matthew Carmody

EigenvaluesEigenvectorsWorkshop (1)

advertisement
Exploring Eigenvalues & Eigenvectors
Introduction
In this activity we will learn how to calculate the eigenvalues of an
matrix A using the characteristic
equation. We will also learn how to use the MATLAB function eig() to calculate eigenvalues and eigenvectors.
Finally, we will explore a geometric interpretation of matrices as transformations to see its effect on a set of
points and also how the eigenvalues and eigenvectors are related to each other.
Before starting
Use the MATLAB Live Editor to edit and run this Live Script in your browser or your desktop.
1. Read each section carefully.
2. Run the code within a section before starting to read the next.
3. To run the code from each section, position the cursor on the code with the mouse and then click on the
Run Section button (from the toolstrip) or click on the blue stripe on left side of that section as shown
below:
Remark: Run the code of each section from top to bottom, otherwise you may get an error.
- The end of a section is indicated with a thin line, like the next one -
1. Eigenvalues & Eigenvectors
1.1 Definition
An eigenvector of an
matrix A is a nonzero column vector such that
,
for some number
(possible complex), called the eigenvalue corresponding to
expression is saying is that the matrix-vector product
gives the same result as just scaling the eigenvector
by some value .
The eigenvalues of A are the roots of the characteristic polynomial
where I is the
. What the previous
identity matrix.
1
For example, consider the matrix
which can be defined as:
A_1 = [1 3; 4 2]
A_1 = 2×2
1
4
3
2
Now, the characteristic polynomial we can defined using the command syms:
% The next line creates a symbolic variable 'lambda'
syms lambda
% MATLAB can now manipulate expressions using 'lambda'
p = det(A_1 - lambda * eye(2))
p =
The roots of
can be calculated with the MATLAB command solve(p). The result will be a
vector containing the eigenvalues of
array/
. Try it for yourself! Add this command in the previous code.
1.2 The eig() function
MATLAB has a built-in function called eig() to calculate the eigenvalues of a matrix and give corresponding
eigenvectors. For example, to calculate the eigenvalues of the matrix
, we write the following code:
eig(A_1)
ans = 2×1
-2
5
which means that the two eigenvalues of A are -2 and 5. Compare this result with the solution of the
characteristic polynomial from the previous section.
To find the eigenvectors you need to supply a vector of two variables to record the two outputs of the function
eig (here we've called them V and D, but you can give them more meaningful variable names):
[V, D] = eig(A_1)
V = 2×2
-0.7071
-0.6000
0.7071
-0.8000
D = 2×2
-2
0
0
5
2
The columns of the first output, V, gives the eigenvectors of the matrix A_1, the diagonal elements of D give
the eigenvalues corresponding to the eigenvectors in V, respectively. Thus, we have that the matrix
eigenvalues
and
has the
with respective eigenvectors
and
.
Remark: It is important to emphasise that eigenvectors are not unique. It is easy to show this: If v is an
eigenvector of the matrix A, then by definition
for some scalar eigenvalue . Now, if you define
, then u is also an eigenvector because
for a scalar
.
Thus a multiple of an eigenvector is also an eigenvector.
For example, the vectors
and
.
are also eigenvectors of A_1. Verify this in your notebook by showing that
and
.
Fun fact!
V and D are matrices that are sometimes known as the "eigenvalue decomposition of A", and it can be shown
that
or
.
You can check this fact in MATLAB with the following code:
V * D * V^(-1)
ans = 2×2
1
4
3
2
Is the output really equal to the matrix
defined above?
2. Geometric interpretation of eigenvalues & eigenvectors
When the eigenvectors are 2-dimensional they can be plotted as arrows using the command
quiver(X,Y,U,V)
(sometimes we like to plot vectors with arrows to show the direction). This command plots arrows with
directional components U and V at the Cartesian coordinates specified by X and Y. We can easily plot the
same vector using the plot function; however it won't have an arrowhead.
3
For example, let's plot the eigenvectors of the matrix A_1. To do this we write:
clf; % clears the figure of previous plots, if there is any
hold on;
quiver(0, 0, V(1,1), V(2,1),...
% 1st eigenvector
'Color','b', 'LineWidth', 1.5); % This adds format
quiver(0, 0, V(1,2), V(2,2),...
% 2nd eigenvector
'Color','g', 'LineWidth', 1.5); % This adds format
hold off;
grid on, axis([-1 1 -1 1]);
legend('v_1','v_2', 'location', 'best');
The first eigenvector is shown in blue, and the second eigenvector is shown in green.
2.1 Transformations
Multiplying a vector
by a matrix on its left results in a new vector,
.
Therefore a matrix can be thought of as a transformation that takes a vector as an input and outputs a
transformed vector.
For example, let's investigate the effect of the matrix
4
has on its eigenvectors under multiplication.
Run the following code to analyse the plot:
T = [3 1; 1 2]; % Define matrix T.
[evecs,evals] = eig(T)
% Compute eigenstuff.
evecs = 2×2
0.5257
-0.8507
evals = 2×2
1.3820
0
-0.8507
-0.5257
0
3.6180
v1 = evecs(:,1);
% First eigenvector, using matrix indexing
v2 = evecs(:,2);
% Second eigenvector, using matrix indexing
u1 = T * v1;
% Apply matrix T to each eigenvector,
u2 = T * v2;
% we can also use the command 'mtimes()'.
clf;
% clears the figure of previous plots, if there is any
hold on;
% Plot eigenvectors %
quiver(0, 0, v1(1), v1(2), 'Color', 'b', 'LineWidth', 3);
quiver(0, 0, v2(1), v2(2), 'Color', 'r', 'LineWidth', 3);
% Plot eigenvectors transformed by T %
quiver(0, 0, u1(1), u1(2), 'Color', 'm', 'LineWidth', 1.5);
quiver(0, 0, u2(1), u2(2), 'Color', 'k', 'LineWidth', 1.5);
hold off;
grid on, axis equal;
legend('v_1','v_2', 'Tv_1', 'Tv_2', 'location', 'best');
5
Note: Here we use matrix indexing to get each eigenvector. More information here: Matrix indexing.
The first eigenvector v1 is plotted in blue before being transformed by T, and then in magenta after its
transformation, this is u1. The second vector v2 is plotted in red and then its transformation u2 in black. What
do you notice about the two sets of vectors? What do you think it happens when you apply the transformation
on other vectors (non-eigenvectors) e.g.
and
?
3. Hands on practice
Let's practice what we just learned.
Activity 1:
Here you will use the function eig() to find the eigenvalues and eigenvectors of the matrix
.
a) Use matrix indexing to give the eigenvalues of A explicitly. Use different variable names to identify them.
Write your code here:
A_1 = [2.3 1.2; -1.2 -0.2]
A_1 = 2×2
2.3000
1.2000
6
-1.2000
-0.2000
syms lambda
p = det(A_1 - lambda * eye(2))
p =
eig(A_1)
ans = 2×1
1.4000
0.7000
b) Use matrix indexing to the two eigenvectors of A explicitly. Use different variable names to identify them.
Write your code here:
[V, D] = eig(A_1)
V = 2×2
0.8000
-0.6000
D = 2×2
1.4000
0
-0.6000
0.8000
0
0.7000
c) Use the command quiver() to plot the eigenvectors of A (if you want, plot also the eigenvectors
transformed by A and compare them).
Write your code here:
clf; % clears the figure of previous plots, if there is any
hold on;
quiver(0, 0, V(1,1), V(2,1),...
% 1st eigenvector
'Color','b', 'LineWidth', 1.5); % This adds format
quiver(0, 0, V(1,2), V(2,2),...
% 2nd eigenvector
'Color','g', 'LineWidth', 1.5); % This adds format
hold off;
grid on, axis([-1 1 -1 1]);
legend('v_1','v_2', 'location', 'best');
7
Activity 2:
We can transform a set of points
by a matrix T by the following equation
where T is a 2×2 matrix and
. To visualise this transformation of points we will use the function
matrixTransform defined in the Appendix (You do not need to modify, nor understand it).
Let's see how the matrix
transforms a set of points with the following code:
T = [3 1; 1 2];
matrixTransform(T)
8
Run this section to see the animation. It might take a few seconds. When the animation is done, you can drag
the slider to apply the transformation manually.
Use the function matrixTransform to analyse the effect of the following matrices:
1.
,
2.
3.
with
,
.
Part 1 - Write your code here:
Part 2 - Write your code here:
9
Part 3 - Write your code here:
Once you wrote your code, run it to analyse the behaviour of each transformation. What do you notice? What do
you wonder? What can you say about the eigenvectors for each case? If necessary, calculate the eigenvalues
and eigenvectors?
Appendix: Pre-defined functions
function [] = matrixTransform(T)
%
%
%
%
'matrixTransform' is a function which will visualise
the effect of your 2-by-2 transformation matrix T on
a set of grid points. It will also plot the eigenvectors
of the matrix T if there are two real eigenvectors.
close all;
minX = -10;
maxX = 10;
minY = -10;
maxY = 10;
n = 10;
pad = 5;
corners = [minX, maxX, minX, maxX; maxY, maxY, minY, minY];
corners = [corners, T*corners];
corners = [min(corners(:)) max(corners(:)) min(corners(:)) max(corners(:))] + pad*[-1,1
A = T-eye(2);
[ evec, evals ] = eig(T); % Dont' worry about the warning message :)
axis(corners);
axis equal;
xLim = get(gca, 'XLim');
yLim = get(gca, 'YLim');
hold on;
if trace(T)^2-4*det(T) > 0
nick = 1;
elseif trace(T)^2-4*det(T) == 0
if isreal(eig(R))
nick = 1;
else
10
nick = 0;
end
else
nick = 0;
end
newXY = zeros(2);
for t = linspace(0,1,100)
cla;
if nick
sevec = (A*t+eye(2))*evec;
quiver(0, 0, sevec(1,1)*10, sevec(2,1)*10, 'LineWidth', 2);
quiver(0, 0, sevec(1,2)*10, sevec(2,2)*10, 'LineWidth', 2);
end
for x = linspace(minX, maxX, n)
index = 1;
for y = linspace(minY, maxY, n)
if nick
newXY(:,index) = (A*t+eye(2))*[x;y];
else
[t1,r1] = cart2pol(x,y);
[t2,r2] = cart2pol(T(1)*x+T(2)*y,T(3)*x+T(4)*y);
if t2 >= t1
t2 = t2-2*pi;
end
[xp, yp] = pol2cart(t1+(t2-t1)*t, r1+(r2-r1)*t);
newXY(:, index) = [xp;yp];
end
index = index+1;
end
plot(newXY(1,:), newXY(2,:), '.', ...
'MarkerEdgeColor',[0.4 (maxX-x)/(maxX-minX) 0.8]);
plot(newXY(1,1), newXY(2,1), '.m');
plot([0, 0],yLim,'-k');
plot(xLim,[0,0],'-k');
end
grid on
if t == 0
pause(1);
else
pause(0.005);
end
end
end
11
Download