## Exercises

**2.4.1**Write a program that takes a command-line argument*n*and creates an*n*-by-*n*boolean matrix with the element in row*i*and column*j*set to`true`if*i*and*j*are relatively prime, then shows the matrix on the standard drawing (see EXERCISE 1.4.16). Then, write a similar program to draw the Hadamard matrix of order*n*(see EXERCISE 1.4.29). Finally, write a program to draw the boolean matrix such that the element in row*n*and column*j*is set to`true`if the coefficient of*x*in (1 +^{j}*x*)(binomial coefficient) is odd (see EXERCISE 1.4.41). You may be surprised at the pattern formed by the third example.^{i}**2.4.2**Implement a`print()`method for`Percolation`that prints`1`for blocked sites,`0`for open sites, and`*`for full sites.**2.4.3**Give the recursive calls for`flow()`in PROGRAM 2.4.5 given the following input:`3 3`

1 0 1

0 0 0

1 1 0**2.4.4**Write a client of`Percolation`like`PercolationVisualizer`that does a series of experiments for a value of*n*taken from the command line where the site vacancy probability*p*increases from 0 to 1 by a given increment (also taken from the command line).**2.4.5**Describe the order in which the sites are marked when`Percolation`is used on a system with no blocked sites. Which is the last site marked? What is the depth of the recursion?**2.4.6**Experiment with using`PercolationPlot`to plot various mathematical functions (by replacing the call`PercolationProbability.estimate()`with a different expression that evaluates a mathematical function). Try the function f(*x*) = sin*x*+ cos 10*x*to see how the plot adapts to an oscillating curve, and come up with interesting plots for three or four functions of your own choosing.**2.4.7**Modify`Percolation`to animate the flow computation, showing the sites filling one by one. Check your answer to the previous exercise.**2.4.8**Modify`Percolation`to compute that maximum depth of the recursion used in the flow calculation. Plot the expected value of that quantity as a function of the site vacancy probability*p*. How does your answer change if the order of the recursive calls is reversed?**2.4.9**Modify`PercolationProbability`to produce output like that produced by`Bernoulli`(PROGRAM 2.2.6).*Extra credit*: Use your program to validate the hypothesis that the data obeys a Gaussian distribution.**2.4.10**Create a program`PercolationDirected`that tests for*directed*percolation (by leaving off the last recursive call in the recursive`flow()`method in PROGRAM 2.4.5, as described in the text), then use`PercolationPlot`to draw a plot of the directed percolation probability as a function of the site vacancy probability*p*.**2.4.11**Write a client of`Percolation`and`PercolationDirected`that takes a site vacancy probability*p*from the command line and prints an estimate of the probability that a system percolates but does not percolate down. Use enough experiments to get an estimate that is accurate to three decimal places.