Module # ONE
LINEAR ALGEBRA
Matrix Manipulation & Solution of Systems of Linear Equations
using
MatLab
By Professor Mohamad H. Hassoun
Department of Electrical & Computer Engineering
Wayne Satate University
Detroit, MI 48202
October 19, 1996
Contents:
I. Vectors & Matrices
II. Matrix Algebra
III. Matrix Determinant and Inverse
IV. Solution of Linear Systems of Equations
V. Simple programs: Creating and Plotting Arrays
clear % Just to make sure that noMatLab variables are present from a previous session.
NOTE on executing commands (green colored text) in this document: place the cursor on the command/MatLab expression you wish to execute and then type Ctrl-Enter. Make sure that variables/array definitions commands are executed before executing any following commands which depend on such definitions. Definitions in bold blue font execute automatically when you open this document; i.e., you nedd not re-execute them over.
You can get full explanation (help) of any MatLab command in this document by highlighting that command and clicking on the '?' in the bar menu above (or type Ctrl-F1).
I. Vectors & Matrices
Let us start by defining a 1 by 3 vector b (a 3-dimensional row vector)
b = [1 2.5 (-1/3)]; % semicolon after a MatLab statement suppresses display.
and display it
format short % sets numerical display format to short decimal format
b
b =
1.0000 2.5000 -0.3333
Now define a new vector y as the transpose of b (bT)
y = b'
y =
1.0000
2.5000
-0.3333
This is a quick way of creating a special row vecotr:
z = 1:5
z =
1 2 3 4 5
Let us look at another example:
z=(1:2:10)'
z =
1
3
5
7
9
Note: MatLab allows you to change the number display format
format bank
b
b =
1.00 2.50 -0.33
format rat
b
b =
1 5/2 -1/3
format short e
b
b =
1.0000e+000 2.5000e+000 -3.3333e-001
format long
b
b =
1.00000000000000 2.50000000000000 -0.33333333333333
Now back to the original (default) short format
format short
Let us define a 3 by 3 matrix A
A = [3,2,1; 0,-1/3,1/5; 2,1,-1]
A =
3.0000 2.0000 1.0000
0 -0.3333 0.2000
2.0000 1.0000 -1.0000
and a 3 by 2 matrix B
B = [1 3; -1 1.5; 4 pi]
B =
1.0000 3.0000
-1.0000 1.5000
4.0000 3.1416
Note: pi = 3.1415... is one of a number of predefined Matlab variables. The following are four other predefinedvariables (eps, inf, NaN, I):
eps
eps =
2.2204e-016
1/0
Warning: Divide by zero
ans =
Inf
0/0
Warning: Divide by zero
ans =
NaN % NaN stands for not a number
i % An imaginary number equals to the square-root of -1
ans =
0 + 1.0000i % See the Module on complex numbers for more details
sqrt(-1)
ans =
0 + 1.0000i
II. Matrix Algebra
The following illustrates various matrix operations (transpose, addition, multiplication)
C = A'
C =
3.0000 0 2.0000
2.0000 -0.3333 1.0000
1.0000 0.2000 -1.0000
A + C
ans =
6.0000 2.0000 3.0000
2.0000 -0.6667 1.2000
3.0000 1.2000 -2.0000
A - A
ans =
0 0 0
0 0 0
0 0 0
3*A
ans =
9.0000 6.0000 3.0000
0 -1.0000 0.6000
6.0000 3.0000 -3.0000
A * B % note that B * A, is not defined (why?)
ans =
5.0000 15.1416
1.1333 0.1283
-3.0000 4.3584
A * b' % b is the vectordefined above; A * b is not defined (why?)
ans =
7.6667
-0.9000
4.8333
-A + A'*A
ans =
10.0000 6.0000 0
8.0000 5.4444 0.7333
-1.0000 -0.0667 3.0400
Other means of defining special matrices and vectors (arrays)
a = 1:5
a =
1 2 3 4 5
a1 = 1:2:6, a2 = 10:-1:0
a1 =
1 3 5
a2 =
10 9 8 7 6 5 4 3 2 1 0
E = [1:4; 3:6]
E =
1 2 3 4
3 4 5 6
I = diag(A) % extracts the diagonal elements of matrix A as a column vector
I =
3.0000
-0.3333
-1.0000
diag(I) % creates a diagonal matrix with the vector I on the diagonal
ans =
3.0000 0 0
0 -0.3333 0
0 0 -1.0000
eye(4)
ans =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
ones(3)
ans =
1 1 1
1 1 1
1 1 1
zeros(2)
ans =
0 0
0 0
R = rand(3:3) % creates a 3 by 3 random matrix with uniform values in [0 1]
R =
0.9304 0.0920 0.7012
0.8462 0.6539 0.9103
0.5269 0.4160 0.7622
Check out these additional operations on the components of a vector or a matrix
b + 1
ans =
2.0000 3.5000 0.6667
which is equivalent to the addition of the two vectors:
b + [1,1,1]
ans =
2.0000 3.5000 0.6667
The following command subtracts 2 from each and every component of the matrix A
A - 2
ans =
1.0000 0 -1.0000
-2.0000 -2.3333 -1.8000
0 -1.0000 -3.0000
b .* b % component-wise multiplication of two vectors: no space between '.' and '*'.
ans =
1.0000 6.2500 0.1111
A .^ 2 % component-wise squaring of matrix elements
ans =
9.0000 4.0000 1.0000
0 0.1111 0.0400
4.0000 1.0000 1.0000
Compare this last result to A*A = A^2
A^2
ans =
11.0000 6.3333 2.4000
0.4000 0.3111 -0.2667
4.0000 2.6667 3.2000
A*A
ans =
11.0000 6.3333 2.4000
0.4000 0.3111 -0.2667
4.0000 2.6667 3.2000
Some logical operations
M = A > 0
M =
1 1 1
0 0 1
1 1 0
N = A <= 1
N =
0 0 1
1 1 1
0 1 1
min(b)
ans =
-0.3333
max(A)
ans =
3 2 1
More operations:Eigenvalues of a matrix
e = eig(A)
e =
3.4970
-1.4662
-0.3641
we can display the individual values as follows
e(1)
ans =
3.4970
e(2)
ans =
-1.4662
e(3)
ans =
-0.3641
Eigenvectors: [V,D] = EIG(A) produces a diagonal matrix D of eigenvalues and a full matrix V whose columns are the corresponding eigenvectors so that A*V = V*D.
[V,D] = eig(A)
V =
0.9117 -0.1412 -0.4768
0.0214 -0.1721 0.8688
0.4102 0.9749 -0.1335
D =
3.4970 0 0
0 -1.4662 0
0 0 -0.3641
We may now verify the second eigenvector-eigenvalue pair (v2 , 2) to see that Av2 = 2v2
A*V(:,2)
ans =
0.2071
0.2524
-1.4294
D(2,2)*V(:,2)
ans =
0.2071
0.2524
-1.4294
Characteristic polynomial associated with a square matrix (|I - A| = 0):
p = poly(A)
p =
1.0000 -1.6667 -5.8667 -1.8667
which represents the polynomial 3 - 1.67 2 - 5.87 - 1.87 = 0. One may also synthesize a matrix (companion matrix) from a given characteristic polynomial
compan(p)
ans =
1.6667 5.8667 1.8667
1.0000 0 0
0 1.0000 0
Verification of result
poly(ans)
ans =
1.0000 -1.6667 -5.8667 -1.8667
Rank of a matrix
r = rank(A) % Matrix rank
r =
3
Here is a rank computation of another 3by3 matrix
rank([1, 1, 1; 2, 2, 2; 1, 2, 1]) % note that the second row is a linear scaling of the first
ans =
2
trace(A) % Matrix trace
ans =
1.6667
Compare 'ans' to the sum of the diagonal elements of A
A(1,1) + A(2,2) + A(3,3)
ans =
1.6667
Size of a matrix/vector:
size(A)
ans =
3 3
size(b)
ans =
1 3
k = length(b)
k =
3
abs(A)
ans =
3.0000 2.0000 1.0000
0 0.3333 0.2000
2.0000 1.0000 1.0000
III. Matrix Determinant and Inverse
Let us define a new matrix A1
A1 = [1/2, 1/2,1 ,-1; 1, -1, -1, -1; -1, -1/4, 1, 1;1,-1,-8,1]
A1 =
0.5000 0.5000 1.0000 -1.0000
1.0000 -1.0000 -1.0000 -1.0000
-1.0000 -0.2500 1.0000 1.0000
1.0000 -1.0000 -8.0000 1.0000
The determinant of A1 is
D = det(A1)
D =
0.6250
det(A1')
ans =
0.6250
compare this result to the product of all eigenvalues of A1
e = eig(A1)
e =
1.4307 + 3.0894i
1.4307 - 3.0894i
-1.3205
-0.0408
Note that eigenvalues can be complex (here i2 = -1). Check the module on complex numbers for details.
e(1)*e(2)*e(3)*e(4) % this is the product of the four eigenvalues of A1
ans =
0.6250
The following is the inverse of matrix A1
inv(A1)
ans =
-18.0000 -1.2000 -15.2000 -4.0000
0 -0.8000 -0.8000 0
-4.0000 -0.2000 -3.2000 -1.0000
-14.0000 -1.2000 -11.2000 -3.0000
Check A1-1 A1
inv(A1)*A1
ans =
1.0000 0.0000 0.0000 0
0 1.0000 0 0
0 0.0000 1.0000 0
0 0 0.0000 1.0000
A1*inv(A1)
ans =
1.0000 0.0000 0.0000 0
0 1.0000 0.0000 0
0 0.0000 1.0000 0
0.0000 0.0000 0.0000 1.0000
IV. Solution of Linear Systems of Equations
Consider the linear system of three unknowns given by
a11x1 + a12 x2 + a13 x3 = y1
a21x1 + a22 x2 + a23 x3 = y2
a31x1 + a32 x2 + a33 x3 = y3
which can be expressed in matrix form as Ax = y. We may now solve for x in Ax = y as x = A-1 y:
First, let A be as defined above and let y be
y = [1; 2; 3]
y =
1
2
3
x = inv(A) * y
x =
4.4643
-6.1071
-0.1786
A preferrable solution is one based on LU factorization approach (modification of Gaussian elimination) since it is faster and generally more accurate; here it is
x = A\y
x =
4.4643
-6.1071
-0.1786
Another Example with symbolic display of results:
G = sym('[1/2, 1/2,1 ,-1; 1, -1, -1, -1; -1, -1/4, 1, 1;1,-1,-8,1]')
G =
[1/2, 1/2, 1 , -1]
[ 1, -1, -1, -1]
[ -1, -1/4, 1, 1]
[ 1, -1, -8, 1]
d = sym('[0;-10;0;-1]')
d =
[ 0]
[-10]
[ 0]
[ -1]
x = linsolve(G,d) % linsolve is equivalent to the backslash operator used above
x =
[16]
[ 8]
[ 3]
[15]
Linsolve also allows for symbolic A2 and/or b2. Let us consider an example:
A2 = sym('1,2,t;0,1,0;t,1,0')
b2 = sym('2;1/t;3')
x = linsolve(A2,b2)
A2 =
[1,2,t]
[0,1,0]
[t,1,0]
b2 =
[ 2]
[1/t]
[ 3]
x =
[ (3*t-1)/t^2]
[ 1/t]
[(2*t^2-5*t+1)/t^3]
One can simplify or alter the above symbolic result in several ways by using symbolic manipulation commands such as 'simplify', 'collect', 'expand', and 'factor'. The above result for x may be simplified to
simplify
ans =
[(2*t+2+3*t^2)/t]
[ 1/t]
[ (2*t^2+1)/t]
The same solution for x may be obtained by using direct 'symbolic' inversion of matrix A2, as follows:
inverse(A2)
ans =
[ 0, -1/t, 1/t]
[ 0, 1, 0]
[1/t, -(-1+2*t)/t^2, -1/t^2]
Next, the symbolic maltiplication 'symmul' command is used to solve for x (check also 'symadd', 'symdiv', and 'symsub')
x = symmul(ans,b2)
x =
[ (3*t-1)/t^2]
[ 1/t]
[(2*t^2-5*t+1)/t^3]
Here are some simplifications of the last expression:
collect
ans =
[ -1/t^2+3/t]
[ 1/t]
[2/t-5/t^2+1/t^3]
factor
ans =
[ (3*t-1)/t^2]
[ 1/t]
[(2*t^2-5*t+1)/t^3]
expand
ans =
[ -1/t^2+3/t]
[ 1/t]
[2/t-5/t^2+1/t^3]
V. Simple programs: Creating and Plotting Arrays
A "for loop" may be used to create a 10-dimensional row vector/array, as follows:
for n=1:10
z(n)=sin(n*pi/10);
end
z
z =
Columns 1 through 7
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090
Columns 8 through 10
0.5878 0.3090 0.0000
A more efficient way of creating the above vector is to avoid the for loop
n=1:10;
z=sin(n*pi/10)
z =
Columns 1 through 7
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090
Columns 8 through 10
0.5878 0.3090 0.0000
Plotting Arrays
Let us now generate a simple plot for the array z
plot(z)
For a better plot, use
plot(z, '*')
title('My First Plot')
xlabel('Position Number in the Array'), ylabel('Value')
Now, take a look at this 2-D plot
for n = 1:10
for m=1:10
O(n,m) = sin((n+m)*pi/10);
end
end
mesh(O)
A better view can be arrived at by rotating the plot by 90 degrees:
mesh(rot90(O))
Yet, an alternative way to visualize the array O is possible by using the pseudocolor plot command 'pcolor'
pcolor(O)
Here is a bipolar version of the above plot
pcolor(sign(O))
colormap(gray(2))
We conclude this module with the following random pattern:
pcolor(randn(10,10))
colormap(gray(2))
YOU ARE NOW READY TO MOVE ON TO OTHER EXCITING COMPUTATIONS
WITH MATLAB !!!
(Other Modules Available:
Calculus, Complex Numbers, Differential Equations)
who % Please go to page 1 and read the small print!!
Your variables are:
A G b y
1