User Tools

Site Tools


gibson:teaching:fall-2012:math445:pf1-solns

1. Produce a plot of sin(x) versus x in blue and cos(x) versus x in red for 100 evenly spaced points between 0 and 2pi. Label the axes.

x = linspace(0,2*pi, 100);
plot(x, sin(x), 'b', x, cos(x), 'r');
xlabel('x')
legend('sin x', 'cos x') % makes more sense than a ylabel, but you could do that, too

2. Given matrix A, set v to the jth column of A.

 v = A(:,j);

3. Given matrix A, set v to the ith row of A.

 v = A(i,:);

4. Suppose matrix A has M rows and N cols. Set B to A with its columns in reversed order.

 B = A(:,N:-1:1);

5. Solve the system of equations

  2y - x  = 1 
  3y + 2z = 5 
  -3x + z = -2
A = [-1 2 0 ; 0 3 2 ; -3 0 1];
b = [1 ; 5 ; -2];
x = A\b;

6. Produce a vector of 100 random floating-point numbers between 0 and 10.

 rand(100,1)

7. Produce a vector of 100 random integers between 0 and 10.

 randi(11, 100, 1) - 1

8. Produce a random permutation of the integers between 1 and 10.

 randperm(10)

9. Produce a random permutation of the vector v = [3 3 4 5 7];

 v = [3 3 4 5 7]; % no problem if you assume v is already set
 v(randperm(5))

10. Produce all permutations of the vector v = [3 3 4 5 7];

 perms(v)

11. Produce a quiver plot of the vector field $v = [v_x, v_y]$ where $v_x = \sin(x) \cos(y)$, $v_y = x y$, and x and y range from -pi to pi. Label the axes.

 x = linspace(-pi, pi, 30); 
 y = linspace(-pi, pi, 30);
 [X, Y] = meshgrid(x,y);
 Vx = sin(X) .* cos(Y);
 Vy = X .* Y;
 quiver(X, Y, Vx, Vy);
 xlabel('x');
 ylabel('y');

12. 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.

 x = linspace(-10, 10, 50);
 y = linspace(-10, 10, 50);
 [X, Y] = meshgrid(x,y);
 R2 = X.^2 + Y.^2;
 F = sin(R2) ./ sqrt(R2);
 contour(X, Y, F);
 xlabel('x');
 ylabel('y');

(Comment: I meant to set $f(x,y) = \sin(\sqrt{x^2+y^2})/\sqrt{x^2 + y^2}$, which makes a prettier plot.)

13. Produce a 3d surface plot of the function from problem 12 over the same range, and with a color bar. Label the axes.

 surf(X, Y, F);
 colorbar;
 xlabel('x');
 ylabel('y');

14. Write down the connectivity matrix C for the links in this small network of websites.

% C((i,j) = 1 if i -> j, 0 otherwise
C = [ 0 1 0 0 0 0 ;
      0 0 0 0 1 1 ;
      1 1 0 0 0 0 ;
      0 0 1 0 0 1 ;
      1 0 0 1 0 0 ;
      0 0 1 0 0 0 ];

15. Write Matlab code that converts the connectivity matrix C to a transition matrix T that governs the transition of probabilities under random surfing.

 T = C;
 for j = 1:6;
   T(:,j) = T(:,j)/sum(T(:,j));
 end

16. Given T, write Matlab code that computes the vector $x$ of probabilities $x_j$ that you'll end up at website $j$ after a long night of random websurfing.

 x = [1 0 0 0 0 0];   % start with probability 1 at page 1, 0 elsewhere
 N = 10000;           % or another large number
 x = T^N * x;         % x(j) = probability of landing at page j after N random clicks

17. Write an equation for y as a function of x for the following data plot. Bonus: express exponential functions as powers of e rather than powers of 10. Use $e^{2.3}\approx 10$ to convert between the two.

We have a straight line with logarithmic $Y$ axis and a linear $x$ axis, so the equation will be of the form $\log_{10} y = m x + b$ or $y = 10^{mx + b} = c 10^{mx}$. Determine $m$ from rise over run from $x=2$ to $x=10$.


m = (\Delta \log_{10} y)/(\Delta x) \approx (-2 - 0)/(10 - 2) = -1/4

Determine $c$ from value of $y$ at $x=0$. That gives $c \approx 4$. So answer is


  y \approx 4 \cdot 10^{-x/4}

Bonus: express exponential functions as powers of $e$ rather than powers of 10. Use $e^2.3 \approx 10$ to convert between the two.


  10^{-x/4} \approx e^{2.3 \cdot (-x/4)} \approx e^{-0.58 x}

so


  y \approx 4 \cdot e^{-0.58 x}

18. How would you graph the function $y(x) = x^c$, in a way that highlights this functional relationship? I.e. given vectors $x$ and $y$ satisfying $y_i = x_i^c$, what Matlab command should you use to plot $y$ versus $x$?

loglog(x,y)

19. How would you graph the function $y(x) = c^x$, in a way that highlights this functional relationship?

semilogy(x,y)

20. Write an anonymous function that returns the square of its input.

f = @(x) x^2;

21. Write an anonymous function that, for an input vector $x = [x_1, ~x_2]$ returns the output vector $f(x) = [4 x_1 x_2, ~\sin(x_1) \cos(x_2)]$

f = @(x) [4*x(1)*x(2), sin(x(1))* cos(x(2))]; 

22. Convert the following 2nd order ODE to a 1st order system of ODE in two variables.

$dx^2/dt^2 + 3\; dx/dt + \sin(x) = 0$

Let $v = [v_1, v_2] = [x,  dx/dt]$. Then


dv_1/dt = dx/dt = v_2


dv_2/dt = d^2x/dt^2 = -3 dx/dt - \sin x = -3 v_2 - \sin v_1

So $dv/dt = [dv_1/dt, dv_2/dt] = [v_2, -3 v_2 - \sin v_1]$

22. Show how to integrate the system of ODEs from problem 22 from t = 0 to 10 using the initial condition x(0) = 0, dx/dt(0) = 1. Write the ODE system in Matlab using an anonymous function.

f = @(t,v) [v(2) ; -3*v(2) - sin(v(1))];

[t,v] = ode45(f, 0:0.1:10, [0 ; 1]);

23. Compute the terminal velocity of a ping-pong ball dropped from a great height, using this system of equations

 dy/dt = v_y

 d v_y/dt = -g - \mu v_y |v_y|

where $g = 9.81, ~\mu =0.35$, $y$ represents the vertical position, and $v_y$ represents the vertical velocity. Represent the two free variables with the vector $x = [y, ~v_y]$ and reexpress the two equations above as an ODE system of the form $dx/dt = f(x)$ (both sides of that equation are vectors).


dx_1/dt = dy/dt = v_y = x_2


dx_2/dt = dv_y/dt = -g - \mu v_y |v_y| = -g - \mu x_2 |x_2|

So $dx/dt = [x_2, ~-g - \mu x_2 |x_2|]$

Write an anonymous function in Matlab that computes $dx/dt = f(x)$ for an input vector $x$, and then use ode45 to integrate this system from $t=0$ to $t=100$ from the initial conditions $x(0) = [y(0), ~v_y(0)] = [0, 0]$.

  g  = 9.81;
  mu = 0.35;   
  f = @(x) [x(2) ; -g - mu*x(2)*abs(x(2)];

  [t, X] = ode45(f, 0:100, [0 ; 0]);

24. Plot the position of the ping-pong ball as a function of time. Label the axes.

plot(t, X(:,1)) % first column of returned X is 1st component of x as a function of time
xlabel('t')
ylabel('y = height of ball')

25. Write a function that performs matrix-vector multiplication for a sparse matrix A, that accesses only nonzero elements of A.

For an M x N matrix A and an N-dimensional vector x, the matrix-vector product $y = Ax$ is defined by


y_i = \sum_{j=1}^N A_{ij} x_j

for each component $y_i$ of the M dimensional vector $y$. But don't code that formula directly! Instead start your function with

  K = nnz(A);
  [i,j,a] = find(A);

and write the matrix-vector multiplication as a loop over the K nonzero elements of A.

  function y = sparse_matvec_mult(A,x)
    K = nnz(A);
    [i,j,a] = find(A);

    [M,N] = size(A);
    y = zeros(M,1);   % set y to M-dim col vector

    for k=1:K;
      y(i(k)) = y(i(k)) + a(k)*x(j(k));
    end
  end
gibson/teaching/fall-2012/math445/pf1-solns.txt · Last modified: 2012/12/11 14:22 by gibson