User Tools

Site Tools


gibson:teaching:fall-2013:math445:hw3solns

For each of the following, provide an answer in Matlab-digestable syntax

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: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 - 2x + 3);
xlabel('x');
ylabel('x^2 - 2x + 3');

Note: We have to use x.^2 rather than x^2 to get the square of each component of the vector x.

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('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');
legend('sin(x)', 'cos(x)');
xlabel('x')

7. Produce a vector of length 13 whose components are random integers between 0 and 10, inclusive.

 randi(10, 1, 13)

8. Produce a vector of length 13 whose components are random real numbers between 0 and 10, inclusive.

 10*rand(1, 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.

dim(A,1) == dim(A,2) % a one-liner, but maybe you don't know dim works this way

or

[M, N] = size(A)
M == N

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 = divisiblebythree(n)
% divisiblebythree(n) : return 1 if n is divisible by 3 or 0 if it's not

  r = 3*round(n/3) == n
    
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 = sorttest(x)
% return 1 if x is sorted in ascending order, 0 if not
  
  N = length(x);

  % count how many of {x(1) through x(N-1)} are less than {x(2) through x(N)}
  % the count will be N-1 if the x is sorted in ascending order
  s = sum(x(1:N-1) < x(2:N)) == N-1
 
end

17. 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);
% matvecmult: compute matrix-vector multiplication A x

  [M,N] = size(A); 

  % M x N matrix times N-vector equals an M-vector
  y = zeros(M,1); 
  
  % evaluate formula for ith component of y
  for i=1:M
  
    % evaluate y_i = sum_{j=1}^n A_ij x_j
    for j=1:N
      y(i) = y(i) + A(i,j)*x(j);
    end

  end
  
end

A few more problems, added 1/14/2013

18. Set vector v to the 3rd column of matrix A.

v = A(:,3);

19. Set vector v to the 4th row of matrix A.

v = A(4,:);

20. Set vector v to the first 3 entries in the 7th row of A.

v = A(7,1:3);

21. Set the 4th row of the 8 x 5 matrix A to (1, 2, 9, 5, 0).

A(4,:) = [1 2 9 5 0];

22. Set the 2nd column of the 4 x 3 matrix A to a column vector with entries (3, 0, -1, 5).

A(:,2) = [3; 0; -1; 5];

or

A(:,2) = [3 0 -1 5]';

23. Zero all the entries in the last column of a matrix A.

[M,N] = size(A);
A(:,N) = zeros(M,1);

24. Produce a contour plot of $f(x,y) = \sin(x^2+y^2)/\sqrt{x^2 + y^2}$ where x and y range from -10 to 10. Label the axes.

  N = length(x); 
  F = zeros(N,N);

  for i=1:N;
    for j=1:N;
      r = x(i)^2 + y(j)^2;
      F(i,j) = sin(r)/sqrt(r);
    end
  end

  % plot matrix with contour
  contour(x,y,F);
  xlabel('x');
  ylabel('y');

  % problem didn't ask for these, but they make the plot nicer
  title('sin(x^2 + y^2)/sqrt(x^2 + y^2)')
  axis equal
  axis tight

—-

A few more problems, added late 10/14/2013. You don't have to turn these in, but they are fair game for the exam. I will add more example problems over the next few days.

25. Write an expression that returns the positive elements of a vector v.

v(v>0)

26. Write an expression that returns the sum of the positive elements of a vector v.

sum(v(v>0))

27. Write an expression that returns the number of positive elements in a vector v.

sum(v>0)

Even more practice problems! Hooray! added 10/22/3013

28. Write a function that computes the factorial of an integer n using a while loop.

  function f = factorial2(n)
  % factorial2: compute n! 

    f = 1;
    while (n>1);
      f = f*n;
      n = n-1;
    end
  end

29. Write an isPrime(n) function that returns 1 (true) is n is prime and 0 (false) if n is not prime. Don't worry about making the test efficient or doing it with integer arithmetic.

  function r = isprime(n)
  % isprime(n): return 1 (true) of n is prime, 0 (false) if it isn't. (crude!)

    r = 1; % set answer to true to start

    % check if n is divisble by 2, return false if it is
    if 2*round(n/2) == n
      r = 0;   % set answer to false
      return;  % exit function right away 
    end

    % now check all odd numbers between 3 and sqrt(n)
    for m=3:2:round(sqrt(n))
      if m*round(n/m) == n
        r = 0;
        return;  
      end    
    end
  end

30. Write a function that returns a vector of all the integer divisors of an integer n. Again, don't worry about efficiency or integer arithmetic.

  function d = divisors(n)
  % divisors(n): return vector of all divisors of n

    m = 0; % set number of divisors to zero

    for k = 1:n
      if k*round(n/k) == n
        m = m+1;   % increment number of divisors
        d(m) = k;  % add m to vector of divisors
      end    
    end
  end
gibson/teaching/fall-2013/math445/hw3solns.txt · Last modified: 2013/10/22 19:51 by gibson