======Math 445 sample exam 1 with solutions ====== **Problem 1.** Write one line of Matlab code that assigns a 3-d column vector with components 4,5,7 to variable ''x''. x = [4; 5; 7] or x = [4 5 7]' **Problem 2.** Write one line of Matlab code that assigns a 3-d row vector with components 4,5,7 to variable ''x''. x = [4 5 7] **Problem 3.** **(Note: We haven't done permutations yet so you're not required to know this material.)** Write Matlab code that simulates the shuffling of a deck of cards by producing a random permutation of the integers 1 through 52. randperm(52) **Problem 4.** Write Matlab code that draws a unit circle, using the formulae $x = \cos \theta$ and $y = \sin \theta$ for 200 evenly spaced values of theta between 0 and 2pi. Label the axes and make the circle red. theta = linspace(0,2*pi, 200); x = cos(theta); y = sin(theta); plot(x,y,'r') xlabel('x'); ylabel('y'); or theta = linspace(0,2*pi, 200); plot(cos(theta), sin(theta), 'r') xlabel('x'); ylabel('y'); **Problem 5.** Write a conditional expression that evaluates to 1 (true) if ''x'' and ''y'' are equal or if either is zero. **Problem 6.** Show how to solve the system of equations with three lines of Matlab code. \begin{align*} 2x + 3y - 8 &= 0 \\ y - 4z + 10 &= 0 \\ 5z - 2x - 13 &= 0 \end{align*} Note that the above equations need to be rearranged first \begin{align*} 2x + 3y + 0z &= 8 \\ 0x + y - 4z &= -10 \\ -2x + 0y + 5z &= 13 \end{align*} That can now be written as an ''Ax=b'' problem \begin{align*} \left( \begin{array}{rrr} 2 & 3 & 0 \\ 0 & 1 & -4 \\ -2 & 0 & 5 \end{array} \right) \left( \begin{array}{rrr} x \\ y \\ z \end{array} \right) = \left( \begin{array}{rrr} 8 \\ -10 \\ 13 \end{array} \right) \end{align*} To solve in Matlab, A = [2 3 0; 0 1 -4; -2 0 5]; b = [8; -10; 13]; x = A\b **Problem 7** Let ''A'' be an ''M x K'' matrix and ''B'' be an ''K x N'' matrix. Then the product ''C = AB'' is an ''M x N'' matrix whose elements are given by \begin{align*} C_{ij} = \sum_{k=1}^{K} A_{ik} B_{kj} \end{align*} Write a Matlab function ''matmatmult'' that returns the product ''C'' of matrices ''A'' and ''B''. Use the above formula instead of Matlab's built-in matrix multiplication! function C = matmatmult(A,B); % compute matrix-matrix product C = A*B % find sizes of matrices [M,K] = size(A); [K,N] = size(B); % allocate M x N matrix for answer C C = zeros(M,N); % compute each element C(i,j)... for i=1:M for j=1:N % ...as sum from 1 to k of A(i,k)*B(k,j) for k=1:K C(i,j) = C(i,j) + A(i,k)*B(k,j); end end end end **Problem 8.** Matrix multiplication ''C = AB'' is defined only for compatible matrices: the number of columns of ''A'' must equal the number of rows of ''B''. Write a short piece of Matlab code that could be inserted in your ''matmatmult'' function that prints an error message and returns a null (''0 x 0'') matrix if ''A'' and ''B'' are incompatible. I'll provide the whole function with the inserted code function C = matmatmult(A,B); % compute matrix-matrix product C = A*B % find sizes of matrices [M,K1] = size(A); [K2,N] = size(B); % test that # cols of A == # rows of B if K1 ~= K2 fprintf('matmatmult dimension mismatch: A has %d cols but B has %d rows\n', K1, K2); % reset M,N to zero so that the function returns a 0 x 0 value for C M = 0; N = 0; end % allocate M x N matrix for answer C C = zeros(M,N); % compute each element C(i,j)... for i=1:M for j=1:N % ...as sum from 1 to k of A(i,k)*B(k,j) for k=1:K C(i,j) = C(i,j) + A(i,k)*B(k,j); end end end end