| 
    
	
	    COS 323 - Computing for the Physical and Social Sciences
        
     | 
    
	Fall 2013
     | 
    
Assignment 0
    Due Tuesday, Sep. 24
     The purpose of this assignment is to ensure that you are
      familiar with Matlab, and to explore the consequences of operation
      ordering on roundoff error. In particular, you will compare
      sequential summation to "cascaded" pairwise summation. 
      
    
    I. Matlab
     Matlab is available to install on your own machine -
        look
        here for details.
    
 Alternatively, it is available on several OIT machines (look
        here for details).  You should be able to run it remotely
        from any Unix workstation.
    
 Read through the following for a basic introduction to Matlab: 
    
    
    II. Roundoff Error and Precision
     Please follow the instructions: 
    
      -  Generate a vector of n random numbers 
        Hint: "help rand". Be sure not to
        generate an n by n matrix! 
        
       
      -  Convert the random numbers to single precision. 
        Hint: help single 
        
       
      -  Compute the sum of the random numbers by direct sequential
        accumulation. 
        Hint #1: use a for loop, or find a way
        to use cumsum. Do not use sum, since that
        does not guarantee in which order order the summation will be
        performed. 
        Hint #2: "format long" to see all the
        digits in the answer. 
        
       
      -  Compute the sum by cascaded pairwise addition (i.e., add the
        first two numbers, then the next two, then the next two, etc.
        Then add the first two partial sums, etc. Repeat until you have
        one number.) All calculations should be in single precision. 
        Hint: a = a(1:2:size(a)) + a(2:2:size(a)); 
        
       
      -  Compare the results of (3) and (4) to summing (1) in double
        precision 
        
       
      -  Graph the error introduced in (3) and (4) as a function of n.
        Pick a number of values of n (e.g., powers of 2, 2^10
        through 2^24) and compute the average absolute-value-of-error
        over 100 trials for each n. Save the graph to a png
        file. 
        Hint #1: "help plot" 
        Hint #2: Think about (and justify in your writeup)
        whether you want logarithmic axes for x, y,
        both, or neither. 
        Hint #3: Use "File... Save As..." in the plot
        window, or print('-dpng', 'out.png') 
        
       
      -  Comment on your findings. How does the error appear to grow
        as a function of n for each scheme? 
        
       
    
    FAQ
    Please check out the Assignment 0 FAQ for frequently asked questions and answers.
    
    
    Submitting
     This assignment is due
    Tuesday, September 24, 2013 at 11:59 PM.
      Please see the course policies
      regarding assignment submission, late assignments, and
      collaboration.
    
     Please submit: 
    
      -  a set of well-commented .m files for each portion of the
        assignment. 
 
      -  a saved (not screen-captured) graph for (6) 
 
      -  A README.txt file containing a description of your
        implementation and a writeup for (7) 
 
    
     The Dropbox link to submit your assignment is 
        here. 
     Note that programming in Matlab is not an excuse to write
      unreadable code. You are expected to use good programming style,
      including meaningful variable names, a comment or three describing
      what the code is doing, etc. Also, all images you submit should
      have been saved with the "print" function or "Save As" -
      do not submit screen captures of the image window. 
  
    
  
  
    
    
    
    Last update
    11-Sep-2013 18:19:24
    
      smr at princeton edu