HW044
Math 2984 - Fall 2017
Intro to Mathematical Problem Solving


TASK: Use MATLAB's logical vectors and the find() command to analyze a vector.


COMMENT: In class, we walked about how, if x is a vector (or list), we can create a logical vector that records a 1 (TRUE) or 0 (FALSE) for each entry of x. So, if X = [ 1.2, -3.4, 0.5, -6.7, -8.9], then

        i = ( x < 1 ) 
        j = ( 0.0 < x && x < 5.0 )
      
will result in
        i = [ 0, 1, 1, 1, 1 ]
        j = [ 1, 0, 1, 0, 0 ]
      
Sometimes, we want to count how many values of x satisfy a condition. For these examples, we could write
        i_count = sum ( i );
        j_count = sum ( j );
      
which will report that 4 items in x are less than 1, and that 2 items are between 0 and 5.

The find() function can also be used for these kinds of questions. But instead of returning a 0 or 1, it returns a list of the indices in x for which the condition is true. Hence

        i2 = find ( x < 1 ) 
        j2 = find ( 0.0 < x && x < 5.0 )
      
will result in
        i2 = [ 2, 3, 4, 5 ]
        j2 = [ 1, 3 ]
      
We can actually use the list of indices returned by find() to select just those elements of x.
        x(i2)
          will print 
        -3.4, 0.5, -6.7, -8.9
      
and
        x(j2)
          will print 
        1.2  0.5
      

Using logical vectors and find() commands, we can carry out some operations very simply, that would take much more work to express using "if/else" and "for" statements.


INSTRUCTIONS: write a function "hw044" that takes a vector x as input, and a value s, and returns

  1. s_num, the number of entries in x that are greater than s;
  2. s_sum, the sum of the entries in x that are greater than s.
Do this by:
        write the function header with the output, function name, and input.

        use ONE statement that defines "i", a logical vector that records
        whether elements of x are greater than s;

        use ONE statement to count s_num, the number of "TRUE' values in "i";

        use ONE statement to define "j", the list of indices in X of entries
        that are greater than s;

        use ONE statement to compute s_sum, the sum of the entries in X that
        are greater than s.
      
In other words, the "interesting" part of your function should consist of four statements, and NO "for" loops or "if/else" statements.


CHECK: x = [ 1.2, -3.4, 0.5, -6.7, -8.9 ]; s = -1.0; [ s_num, s_sum ] = hw044 ( x, s );

      s_num will be 2.
      s_sum will be 1.7.
      

SUBMIT: Your script file should be named "hw044.m", and begin with:

        % hw044.m
        % YOUR NAME
        % This script (describe what it does)