====== Math 445 HW1 Solutions ====== 1. Assign the value 0.00014 to the variable //x//, using compact scientific notation. x = 1.4e-04; 2. Set the variable //x// to a vector whose components are the even numbers between 14 and 36. x = 14:2:36; 3. Set the variable //x// to 200 evenly spaced points between 0 and 2. x = linspace(0,2,200); 4. Produce a plot of //y = x^2 - 2x + 3// for the //x// of the previous problem. Label the axes. plot(x, x.^2 - 2*x + 3) xlabel('x') ylabel('y = x^2 - 2*x + 3)') 5. Plot //tan(x)// versus //x// for 200 evenly spaced points between 0 and 1.57 ≈ pi/2, using a logarithmic scale on the //y// axis. x = linspace(0, 1.57, 200); semilogy(x, tan(x)); xlabel('x') ylabel('y = tan(x)') 6. Plot //sin(x)// and //cos(x)// for 200 evenly spaced points between -π and π, on the same plot, using red for //sin(x)// and blue for //cos(x)//. Add a legend that indicates which function is which color. x = linspace(-pi, pi, 200); plot(x, sin(x), 'r-', x, cos(x), 'b-', ); xlabel('x') legend('sin(x)', 'cos(x)'); 7. Produce a vector whose components are random integers between 0 and 10, inclusive. x = randi([0,10], 13,1); % The problem didn't specify the length of the vector, choose 13 8. Produce a vector whose components are random real numbers between 0 and 10, inclusive. x = 10*rand(13,1); % The problem didn't specify the length of the vector, choose 13 9. Show how you would solve the following system of equations with Matlab x + 2y - z = 5 3x + y + 6z = 37 -3x + y + 2z = -11 A = [1 2 -1; 3 1 6; -3 1 2]; b = [5 37 -11]'; x = A\b 10. Write a conditional expression that is true if scalar variables //x// and //y// are both nonzero and false otherwise. (x ~= 0) && (y ~= 0) 11. Set variable //A// to a 3 x 5 matrix of zeros. A = zeros(3,5); 12. Set variable //A// to a 4 x 7 matrix of random real numbers, using a guassian (normal) distribution. A = randn(4,7); 13. Write a conditional expression that is true if a matrix //A// is square and false otherwise. size(A,1) == size(A,2) 14. Write a conditional expression that is true if either //x// or //y// is an integer. x == round(x) || y == round(y) Write a Matlab function that 15. returns 1 (true) if its argument is divisible by 3 and 0 (false) if it's not. function r = divisible_by_3(x) r = (x == 3*round(x/3)); end or better, use the ''mod'' function function r = divisible_by_3(x) r = (mod(x,3) == 0); end 16. takes a vector //x// as input and returns 1 if the components of //x// are sorted in ascending order, 0 if not. function s = is_sorted(x) s = 1; % start assuming x is sorted for n=1:length(s)-1; if s(n) > s(n+1) s = 0; break; end end end 17. finds a zero of another function using the bisection search algorithm. function xcenter = bisectsearch(f, xleft, xright) % function xcenter = bisectsearch(f, xleft, xright) % find a zero of f between xleft and xright using bisection search algorithm eps = 1e-13; % stopping condition: abs(f(xcenter)) < eps fleft = f(xleft); fright = f(xright); % should put in check that fleft and fright have opposite signs xcenter = 0.5*(xleft + xright); fcenter = f(xcenter); % repeat until f(xcenter) is close enough to zero while (abs(fcenter) > eps) if (sign(fleft) == sign(fcenter)) % replace the left stuff with the center stuff; fleft = fcenter; xleft = xcenter; else % replace the right stuff with the center stuff; fright = fcenter; xright = xcenter; end xcenter = 0.5*(xleft + xright); fcenter = f(xcenter); end end 18. computes the product //y = Ax// of an //m x n// matrix //A// and an //n x 1// vector //x//, according the formula y_i = \sum_{j=1}^n A_{ij} x_j function y = matvecmult(A,x); % returns y = A*x; [M,N] = size(A); % assume x is N x 1 y = zeros(M,1); for i = 1:M for j = 1:N y(i) = y(i) + A(i,j)*x(j); end end end