Lab02: Functions

Brief Honor Code. Do the homework on your own. You may discuss ideas with your classmates, but DO NOT copy the solutions from someone else or the Internet. If stuck, discuss with TA.

1. (10 points)

Rewrite the following code into functional form using lambdas, map, filter and reduce.

In [43]:
n = 10
s = 10
for i in range(n):
    if i % 2:
        s |= i**2
s
Out[43]:
123

2. (10 points)

Rewrite the code above as a toolz pipeline, using lambdas and curried or partially applied functions as necessary.

3. (10 points)

Repeat the Buffon’s needle simulation from Lab01 as a function that takes the number of needels n as input and returns the estimate of \(\pi\). The function should use numpy and vectorization. What is \(\pi\) for 1 million needles?

4. (20 points)

Simpsons rule is given by the follwoing approximation

Simpsons

Simpsons

  • Write Simpsons rule as a function simpsons(f, a, b, n=100) where n is the number of equally spaced intervals from a to b. (10 points)
  • Use this function to estimate the probability mass of the standard normal distribution between -1 and 1. Implement the PDF of the standard normal distribution \(\psi(x)\) as a function. (10 points)
\[\psi(x) = \frac{1}{\sqrt{2\pi}}e^{-\frac{1}{2}x^2}\]

5. (50 points)

Write code to generate a plot similar to the following

automata

automata

using the explanation for generation of 1D Cellular Automata found here. You should only need to use standard Python, numpy and matplotllib.

The input to the function making the plots should be a simple list of rules

rules = [30, 54, 60, 62, 90, 94, 102, 110, 122, 126,
         150, 158, 182, 188, 190, 220, 222, 250]
make_plots(rules, niter, ncols)

You may, of course, write other helper functions to keep your code modular.