0% found this document useful (0 votes)
163 views9 pages

Lab 3

This document contains the solutions to a MATLAB assignment involving matrix factorization and determinants. It begins by generating a random 3x3 matrix A and calculating its LU factorization. It then uses the LU factorization to solve a system of equations Ax=b for a random vector b. It compares the efficiency of Gaussian elimination versus LU decomposition for larger matrices. It also calculates matrix determinants using cofactor expansions and properties of triangular matrices. It demonstrates properties of determinants under row operations.

Uploaded by

Boris
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
163 views9 pages

Lab 3

This document contains the solutions to a MATLAB assignment involving matrix factorization and determinants. It begins by generating a random 3x3 matrix A and calculating its LU factorization. It then uses the LU factorization to solve a system of equations Ax=b for a random vector b. It compares the efficiency of Gaussian elimination versus LU decomposition for larger matrices. It also calculates matrix determinants using cofactor expansions and properties of triangular matrices. It demonstrates properties of determinants under row operations.

Uploaded by

Boris
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 9

format compact

% Boris Yekaterinoslavskiy
% 1342
% Section C3
% Math 250 MATLAB Lab Assignment #3
%
rand('seed', 1342)
%
% Question 1(a)
%
% We will begin by generating a random 3x3 matrix A and
% calculate its principal minors.
A = rand(3), A(1,1), det(A(1:2,1:2)), det(A)
A =
0.3238 0.5514 0.6294
0.9692 0.9865 0.7896
0.2306 0.7936 0.5374
ans =
0.3238
ans =
-0.2150
ans =
0.1229
% The three minors above are nonzero, so A = LU
% factorization is possible.
% We create a matrix U and set it equal to A so we can
% reduce it to an upper triangular matrix later on.
U = A;
% Using the col1.m file, we can create a lower triangular
% unit matrix based on U.
col1
L1 =
1.0000 0 0
-2.9933 1.0000 0
-0.7122 0 1.0000
% We use L1 above and multiply it with U to obtain the
% upper triangular matrix's first column of zeros below
% the main diagonal.
U = L1*U
U =
0.3238 0.5514 0.6294
-0.0000 -0.6639 -1.0942
0 0.4010 0.0892
% We used col1.m to perform row operations on a 3x3
% identity matrix using values from the old U to get a new
% U. The first operation is to take the second row and
% subtract the first row multiplied by u21/u11, into the
% second row. The second operation is to take the third
% row and subtract the first row multiplied by u31/u11,
% into the third row.
%
% Question 1(b)
%
% Now we will continue to reduce U so that the second
% column has a zero below the main diagonal. To do this,
% we use the col2.m file to produce L2 to multiply it with
% the matrix U from (a).
col2
L2 =
1.0000 0 0
0 1.0000 0
0 0.6040 1.0000
U = L2*U
U =
0.3238 0.5514 0.6294
-0.0000 -0.6639 -1.0942
-0.0000 0 -0.5717
% L2 is also a 3x3 identity matrix that we created to
% modify U. The only row operation is to take the third
% row and subtract the first row multiplied by u32/u22,
% into the third row.
% We can verify that U is indeed the upper triangular matrix
% of A by multiplying A with L2 and L1 in that order.
U = L2*L1*A
U =
0.3238 0.5514 0.6294
-0.0000 -0.6639 -1.0942
-0.0000 0.0000 -0.5717
%
% Question 1(c)
%
% To complete the A = LU factorization, we need the lower
% triangular matrix, L. We can take the inverses of L1 and
% L2 and multiply them together to form L.
inv(L1), inv(L2), L = inv(L1)*inv(L2)
ans =
1.0000 0 0
2.9933 1.0000 0
0.7122 0 1.0000
ans =
1.0000 0 0
0 1.0000 0
0 -0.6040 1.0000
L =
1.0000 0 0
2.9933 1.0000 0
0.7122 -0.6040 1.0000
% Now that we have L, we can multiply it with U and it
% should give us the original matrix A.
A = L*U
A =
0.3238 0.5514 0.6294
0.9692 0.9865 0.7896
0.2306 0.7936 0.5374
%
% Question 2(a)
%
% To find the inverse of L, we know that from 1(c),
% L = inv(L1)*inv(L2). Using one of the inverse properties,
% we know that inv(A*B) = inv(B)*inv(A) and that the inverse
% of an inverse is the original matrix. Therefore, to find
% the inv(L), we take L2 and multiply it by L1.
L2*L1
ans =
1.0000 0 0
-2.9933 1.0000 0
-2.5200 0.6040 1.0000
% We can confirm with inv(L) below.
inv(L)
ans =
1.0000 0 0
-2.9933 1.0000 0.0000
-2.5200 0.6040 1.0000
% We can also find the inverse of U below.
inv(U)
ans =
3.0884 2.5651 -1.5095
0.0000 -1.5063 2.8831
-0.0000 -0.0000 -1.7492
% We can note that the inverses of both matrices are still
% in their respective triangular forms.
%
% Question 2(b)
%
% We will generate a random vector b in R3, using the
% rvect function from the second lab.
b = rvect(3)
b =
1
8
5
% We can find a solution c from L*c = b by multiplying the
% inverse of L with b.
c = inv(L)*b
c =
1.0000
5.0067
7.3118
% Using c, we can calculate the solution x from U*x = c.
x = inv(U)*c
x =
4.8936
13.5387
-12.7897
% x should be the solution to A*x = b. To confirm this, we
% can multiply A with x and our result should match b.
A*x
ans =
1.0000
8.0000
5.0000
%
% Question 3(a)
%
% We will generate a random matrix A and a vector b both
% in R500. We will also calculate the LU decomposition of A.
A = rand(500); b = rand(500,1); [L U] = lu(A);
% We will rref the augmented matrix [A b] and set y as the
% reduced column b.
tic; R = rref([A b]); y = R(:,501); toc
Elapsed time is 3.984523 seconds.
% We will define the elapsed time as rreftime.
rreftime = 3.984523;
%
% Question 3(b)
%
% Now we will solve A*x = b using the LU decomposition
% method and record the calculation time as well.
tic; c = inv(L)*b; x = inv(U)*c; toc
Elapsed time is 0.158759 seconds.
% We will set the elapsed time as lutime.
lutime = 0.158759;
% We can check to see if x and y are the same up to a
% certain round-off error.
norm(x - y)
ans =
3.2757e-11
% We can see that the error is negligible and thus, x = y.
%
% Question 3(c)
%
% If the calculation time for Gaussian elimination method
% and LU decomposition method are 2*c*(n^3)/3 and
% 2*c*(n^2) respectively, then the theoretical ratio for
% both times (rreftime/lutime) is n/3.
% The theoretical ratio for n = 500 is:
500/3
ans =
166.6667
% The observed ratio using the times from (a) and (b) is:
rreftime/lutime
ans =
25.0979
% The difference between the theoretical and observed
% ratios differ by a factor of 6, but that can be expected
% with matrices in Rn with a very large n.
%
% Question 4(a)
%
% The function file cofactor.m calculates the matrix of
% cofactors of a square matrix. We will generate a random
% 4x4 matrix using rmat function from the second lab and
% use the cofactor function to calculate the matrix from it.
a = rmat(4,4)
a =
2 4 9 5
9 5 0 3
2 4 1 5
7 3 8 4
c = cofactor(a)
c =
-93.0000 297.0000 78.0000 -216.0000
8.0000 216.0000 0 -176.0000
5.0000 -177.0000 -78.0000 280.0000
104.0000 -312.0000 0 208.0000
% Now we can calculate four sums below.
a(1,1)*c(1,1) + a(1,2)*c(1,2) + a(1,3)*c(1,3) + a(1,4)*c(1,4)
ans =
624
a(2,1)*c(2,1) + a(2,2)*c(2,2) + a(2,3)*c(2,3) + a(2,4)*c(2,4)
ans =
624.0000
a(1,3)*c(1,3) + a(2,3)*c(2,3) + a(3,3)*c(3,3) + a(4,3)*c(4,3)
ans =
624.0000
a(1,4)*c(1,4) + a(2,4)*c(2,4) + a(3,4)*c(3,4) + a(4,4)*c(4,4)
ans =
624
% The above four sums all solve for the determinant of the
% 4x4 matrix a. All four sums represent the cofactor
% expansion of each row. Therefore, no matter what row we
% can expand on, we will get the same answer for the
% determinant of a.
% We can check using the internal MATLAB function det to see
% if the result is the same.
det(a)
ans =
624.0000
%
% Question 4(b)
%
% We will generate a random 5x5 matrix and its upper
% triangular matrix.
A = rmat(5,5), U = triu(A)
A =
0 8 5 7 0
2 0 3 5 6
8 9 5 5 9
1 0 2 8 6
2 5 3 4 0
U =
0 8 5 7 0
0 0 3 5 6
0 0 5 5 9
0 0 0 8 6
0 0 0 0 0
% We can calculate the product of the diagonals for both
% matrices.
A(1,1)*A(2,2)*A(3,3)*A(4,4)*A(5,5)
ans =
0
U(1,1)*U(2,2)*U(3,3)*U(4,4)*U(5,5)
ans =
0
% According to Theorem 3.2, the determinant of an upper or
% lower triangular matrix is the product of its diagonal
% entries. So the second product above tells us that the
% determinant of U is 0. The product of the diagonal entries
% of A does not tell us anything about the determinant of A.
% Even though the product is also 0, it is because three of
% the diagonal entries are 0.
% We can confirm the determinants of both matrices below.
det(A), det(U)
ans =
-2.2620e+03
ans =
0
%
% Question 4(c)
%
% We will generate another 5x5 matrix A and then swap the
% first and second rows to get a matrix B.
A = rmat(5,5)
A =
4 2 7 1 3
0 2 1 2 8
5 2 4 2 4
2 3 9 8 0
6 2 1 8 4
B = A; B(2,:) = A(1,:); B(1,:) = A(2,:)
B =
0 2 1 2 8
4 2 7 1 3
5 2 4 2 4
2 3 9 8 0
6 2 1 8 4
% If we swap two rows of A, then the determinant of B is
% the opposite sign of A. We can confirm below.
det(A), det(B)
ans =
-1.0620e+03
ans =
1.0620e+03
% We will form a matrix C by multiplying the first fow of A
% by 10 and adding it to the second row.
C = A; C(2,:) = A(2,:) + 10*A(1,:)
C =
4 2 7 1 3
40 22 71 12 38
5 2 4 2 4
2 3 9 8 0
6 2 1 8 4
% Adding a row multiplied by a scalar to another row will
% not change the determinant of the matrix. We can confirm
% below.
det(A), det(C)
ans =
-1.0620e+03
ans =
-1.0620e+03
% We will form a matrix D by multiplying the first row of A
% by 10.
D = A; D(1,:) = 10*A(1,:)
D =
40 20 70 10 30
0 2 1 2 8
5 2 4 2 4
2 3 9 8 0
6 2 1 8 4
% If we multiply a row by a scalar, the determinant of the
% matrix will be multiplied by the same number.
det(A), det(D)
ans =
-1.0620e+03
ans =
-1.0620e+04
%
% Question 4(d)
%
% We will generate another random 5x5 matrix A. Then we will
% set a11 and a21 equal to zero. Using the splu.m custom
% function, we can calculate the PA = LU factorization,
% where P is the permutation matrix.
A = rmat(5,5)
A =
0 8 6 2 0
1 2 8 7 4
2 4 4 0 2
7 0 7 2 4
0 0 6 6 6
A(1,1)=0; A(2,1) = 0
A =
0 8 6 2 0
0 2 8 7 4
2 4 4 0 2
7 0 7 2 4
0 0 6 6 6
[P, L, U, sign] = splu(A)
P =
0 0 1 0 0
0 1 0 0 0
1 0 0 0 0
0 0 0 1 0
0 0 0 0 1
L =
1.0000 0 0 0 0
0 1.0000 0 0 0
0 4.0000 1.0000 0 0
3.5000 -7.0000 -1.8846 1.0000 0
0 0 -0.2308 0 1.0000
U =
2.0000 4.0000 4.0000 0 2.0000
0 2.0000 8.0000 7.0000 4.0000
0 0 -26.0000 -26.0000 -16.0000
0 0 0 2.0000 -5.1538
0 0 0 0 2.3077
sign =
-1
% The sign as -1 tells us that there was an odd number of
% row interchanges. We can check below that P*A = L*U.
P*A
ans =
2 4 4 0 2
0 2 8 7 4
0 8 6 2 0
7 0 7 2 4
0 0 6 6 6
L*U
ans =
2 4 4 0 2
0 2 8 7 4
0 8 6 2 0
7 0 7 2 4
0 0 6 6 6
% The determinant of P is:
det(P)
ans =
-1
% We can take a look at the matrix P and see that the only
% change from an identity matrix is that the first and
% third rows were swapped, which is one row interchange.
% The sign of det(P) tells us whether there was and even or
% odd amount of row interchanges, and det(P) can either be
% -1 or +1. Therefore, from one row interchange, det(P) = -1.
%
% The determinant of L should be 1 because the product of its
% diagonals is 1. We can check det(L) below.
det(L)
ans =
1
%
% The determinants of A and U are as followed:
det(A), det(U)
ans =
480.0000
ans =
-480.0000
% The relationship between both determinants are opposite
% signs for the same reason as mentioned earlier.
%
% Question 5(a)
%
% We will use the custom house.m and plot2d.m functions to
% make a crude drawing of a mouse, where the matrix H will
% contain the coordinates of its endpoints.
H = house; plot2d(H), hold on
% We will generate a matrix Q.
t = pi/6; Q = [cos(t), -sin(t); sin(t), cos(t)]
Q =
0.8660 -0.5000
0.5000 0.8660
% We can use the plot2d function so that H can be
% multiplied by Q and see how the house changes.
plot2d(Q*H)
% When we multiply Q*H, we can see on the plot that the
% house figure has rotated by an angle.
det(Q)
ans =
1
% Q is a rotation matrix. Multiplying it with H only rotates
% the shape that H produces. We know that det(A*B) is equal
% to det(A)*det(B). det(Q) = 1 tells us that the area of the
% house does not change since det(Q)*det(H) will equal det(H).
t = pi/3; Q = [cos(t), -sin(t); sin(t), cos(t)]
Q =
0.5000 -0.8660
0.8660 0.5000
plot2d(Q*H)
det(Q)
ans =
1
% The above is the process repeated with another rotation
% matrix. Since det(Q) is still 1, the area of the house
% does not change, even though it rotated.
%
% Question 5(b)
%
% We will generate a matrix D below.
plot2d(H), hold on
r = .9; D = [r, 0; 0, 1/r ]
D =
0.9000 0
0 1.1111
plot2d(D*H)
% By plotting D*H, we can see that the shape of the house
% changed. It's y values shifted by +1 and the overall width
% has decreased.
det(D)
ans =
1
% The determinant of D is 1. This tells us that even though
% the shape of the house has dilated, the area still remains
% the same.
r = .8; D = [r, 0; 0, 1/r ]
D =
0.8000 0
0 1.2500
plot2d(D*H)
det(D)
ans =
1
% We repeated the process in the above but with r = 0.8 this
% time. The shape of the house is now stretched vertically
% even further, but since det(D) is 1, the area of the shape
% of the house has not changed.
%
% Question 5(c)
%
% We will generate a matrix T below.
plot2d(H), hold on
t = 1/2; T = [1, t; 0, 1]
T =
1.0000 0.5000
0 1.0000
plot2d(T*H)
% By plotting T*H, we can see that the shape of the house
% has skewed.
det(T)
ans =
1
% Since the determinant of T is 1, this tells us that the area
% inside the house has not changed.
t = -1/2; T = [1, t; 0, 1]
T =
1.0000 -0.5000
0 1.0000
plot2d(T*H)
det(T)
ans =
1
% The above process of setting t = -1/2 has skewed the shape
% of the house in the opposite direction. Since det(T) is
% still equal to 1, the area of the house has not changed.

You might also like