<<

ON THE SPECTRUM OF THE PENROSE LAPLACIAN

MICHAEL DAIRYKO, CHRISTINE HOFFMAN, JULIE PATTYSON, AND HAILEE PECK

Abstract. Since the early 1960’s, aperiodic tilings have been a topic of par- ticular interest to mathematicians. The is one example of such atiling.Inthispaper,wepresentbasicsubdivisionrulesforgeneratingthe Penrose tiling using a of four Robinson tiles. We introduce code written in MatLab that creates and stores the Penrose tiling as a set of data struc- tures and produces the Laplacian matrix of the tiling. In doing so, we provide insight into the spectrum of the Penrose tiling.

Contents 1. Introduction 1 2. Generating a Penrose Tiling 2 2.1. Substitution Method 3 2.2. Rules for Substitution with Robinson 4 2.3. Computational Methods for Penrose Tiling 7 3. The Laplacian and Spectrum 7 3.1. Computational Methods of the Laplacian and Spectrum 9 4. The Hausdor↵Dimension 10 4.1. Computational Methods for The Hausdor↵Dimension 11 5. Results 11 6. Conclusion and Future Work 13 7. Acknowledgments 14 Appendix A: MatLab Code 15 A.1. genPenTiling.m 15 A.2. tilingLaplacian.m 22 A.3. plotMat.m 25 A.4. cdf.m 25 A.5. ndsTable.m 26 References 28

1. Introduction Before 1982, crystalline structures were defined as having periodic lattice struc- ture. However, on April 8, 1982, discovered an aluminum-manganese quasicrystalline structure that had long-range order but did not exhibit the peri- odic patterns that characterized crystals [12]. Instead, the structure had icosahedral

Date:August1,2013. This work was supported by NSF grant DMS-0739338. 1 2 M.DAIRYKO,C.HOFFMAN,J.PATTYSON,ANDH.PECK symmetry that was not possible, by definition, in crystal form. In 2011, Shecht- man was awarded the Nobel Prize in Chemistry for his discovery of and work with . Since his groundbreaking discovery, many examples of quasicrystals have been examined. However, mathematical interest in periodicity began before these discoveries of the physical applications occurred. The following discussion of this history comes from [8]. Questions relating to tiling and periodicity began with Hao Wang’s work in 1960 on tiling the plane with Wang dominoes, which are sets of unit squares with colored edges. This work began because of its relation to questions in symbolic logic. Wang conjectured that there was a way to tile the plane periodically given any set of tiles so that bordering edges share the same color. In 1964, Robert Berger provided a counterexample to the Wang conjecture. Berger showed that there is a set (of more than 20,000 Wang dominoes) that tiles only nonperiodically, and later much smaller sets (of 104 and 92 Wang dominoes) with the same property were found.

Figure 1. Penrose and diamond divided into Robinson triangles

Berger’s findings inspired further exploration with polygonal tiles. Raphael Robinson and , in 1971 and 1977, respectively, constructed two di↵erent sets of 6 “square” tiles that tile only nonperiodically. These tiles are like jigsaw puzzle pieces which can be rotated and reflected. The projections and indentations on these tiles force specific tiles to match together. In 1973, found a set of six “non-square” tiles that tile only nonpe- riodically. He later reduced it to a set of four tiles, and then two tiles. Each of these sets of Penrose tiles generate nonperiodic tilings, which are two-dimensional models of quasicrystals. Robinson took a set of two prototiles, a rhombus and diamond, and divided them into a set of four triangles as shown in Figures 1 and 2. These tiles are known as Robinson triangles. Our work is based on these Penrose tilings, which can be generated from any of the sets of prototiles that Penrose found. In Section 2, we discuss the method we use to construct the Penrose tiling and give an explanation of MatLab code that constructs finite tilings. In Section 3, we define the Laplacian matrix and spectrum and explain the corresponding MatLab code. In Section 4, we examine the Hausdor↵dimension and describe the MatLab code developed to estimate the Hausdor↵dimension of the finite Penrose tilings.

2. Generating a Penrose Tiling Let us first present relevant definitions about tilings. ON THE SPECTRUM OF THE PENROSE LAPLACIAN 3

Definition 1. [7] Prototiles are a set of finite inequivalent tiles (i.e. are not equivalent under rigid motions, expansions, or contractions). Definition 2. [7] A tiling is an arrangement of tiles, such that their union covers and packs R2 so that distinct tiles have non-intersecting interiors. Definition 3. [9] A nonperiodic tiling does not have a period. Definition 4. [9] An aperiodic set of prototiles admits infinitely many tilings of the plane, none of which are periodic. Remark 1. An iteration is one application of the substitution method to a set of tiles. There are three main methods that can be used to construct the Penrose tiling. The matching method assigns matching rules to the edges of the prototiles, only allowing pairings of certain edges. These rules guarantee a nonperiodic tiling. The substitution method starts with a finite subset of the tiling and inflates and sub- divides existing tiles to expand the tiling to cover the plane. The cut and project method takes a higher dimensional lattice and then reduces the order, projecting it to a lower dimension. For a more detailed explanation, see [5] and [1]. 2.1. Substitution Method. In this paper, we construct the Penrose tiling using the substitution method. The substitution we use is based on the set of two Penrose prototiles, the rhombus and diamond (see Figure 1). The two tiles are each sliced temporarily in half into two triangles (called Robinson triangles), resulting in a substitution with four base prototiles: B, P , Y , and W (see Figure 2). As the substitution method for the rhombus and diamond allows for overlap, we implement the Robinson substitution to avoid this problem. This method inflates 1+p5 each triangle by 2 and replaces the inflated tile with a predetermined subdivision.

Figure 2. How to subdivide Robinson triangle prototiles (not drawn to scale)

The rhombus is composed of two triangles, which we label B and P . As shown in Figure 1, Triangle B is inflated and subdivided into three triangles: P 1,Y1, and B1. Triangle P is also inflated and subdivided into three triangles: B2,W2, and 4 M.DAIRYKO,C.HOFFMAN,J.PATTYSON,ANDH.PECK

P 2. Similarly, the diamond is composed of two triangles, which we label Y and W . The triangle Y is inflated and subdivided into two triangles: P 3 and Y 3. The triangle W is also inflated and subdivided into two triangles: W 4 and B4. Figure 2 shows this inflation and subdivision of the four prototiles.

Figure 3. First three iterations with Robinson triangles

We begin with ten prototiles (five triangle B tiles and five triangle P tiles) and use this substitution to generate larger iterations of the Penrose tiling. See Figure 3 for the first two iterations of the tiling using the substitution. For a more detailed explanation see [7] and [11]. Figures 1, 2, and 3 were inspired by and modified from [7].

2.2. Rules for Substitution with Robinson Triangles. The sides of each tri- angle are marked with either one arrow, two arrows, or no arrows. In the tiling, a one arrow side can only be adjacent to another one arrow side, a two arrow side can only be adjacent to a two arrow side, and a side with no arrows can only be adjacent to another side with no arrows (we will refer to this as the third side). In addition, the arrows on the shared sides of adjacent tiles must point in the same direction. The nine rules in Table 1 are the only possible ways that tiles can share edges. For example, the second side of a W tile can only be matched to the second side of a P tile or to the second side of a Y tile (following rules 7 and 8, respectively). Initially, one might think that the second side of a W tile could be matched to the second side of a B tile. However, if you were to match these two sides, you would see that arrows of the second side of each of these tiles do not point in the same direction. It is not possible to rotate these tiles in any way and match them on their second side so that the arrows on the second side of these tiles point in the same direction on their shared edge. Therefore these two tiles will not meet on their respective second sides. In Table 1, the “Shared Edge” column contains a tree diagram for each of the nine rules mentioned above. The two vertices connected by the solid black line represent which two parent prototiles share an edge. The side that they share is the number in superscript. The dashed arrows denote the children of each adjacent ON THE SPECTRUM OF THE PENROSE LAPLACIAN 5 parent. Each child is directly connected only to its parent tile, where the subscripts index the children. The “External Adjacencies” column contains the external adjacencies formed be- tween the new child prototiles after subdivision of the two parent prototiles which shared an edge. We say an adjacency is external if it connects children of dis- tinct prototiles. The adjacencies are separated by commas. Again, the superscript represents the side on which the tiles are adjacent and the subscript denotes the corresponding child. For example, Rule 5 describes P and Y prototiles that are adjacent on the first side (superscript 1). The children of the P parent prototile are B2, W2, and P2. The children of the Y parent prototile are P3 and Y3. For the external adjacencies, the child Y3 is adjacent to the child W2 on the third side (superscript 3). Also, the child P3 is adjacent to the child B2 on the second side (superscript 2). Because we split the original two prototiles (the rhombus and the diamond) into two triangles, each of whose third side cuts through the interior of the rhombus or diamond, the third side of each of these triangles will always only be matched with the third side of the other triangle that made up the original prototile. In this way, the structure of the original two prototile Penrose tiling is preserved. We need to return to the original set of two prototiles instead of four Robinson triangles to obtain an end result of a Penrose tiling. To reconstruct the rhombus, if triangle B is adjacent to triangle P on the third side with no arrows (see Figure 2), we delete this side that they share. Similarly, to reconstruct the diamond, if triangle Y and triangle W are adjacent on their respective third sides, we delete this side that they share (see Figure 2). 6 M.DAIRYKO,C.HOFFMAN,J.PATTYSON,ANDH.PECK

Table 1. Rules for Shared Edges of Adjacent Tiles

Rule Shared Edge External Adjacencies adj P 3 B3 1 P 3 B3, B1 P 1 1 2 1 2 B2 W2 P2 P1 Y1 B1

adj B1 P 1 2 P 2 B2, Y 3 W 3 1 2 1 2 P1 Y1 B1 B2 W2 P2

adj Y 3 W 3 3 Y 2 W 2 3 4 P3 Y3 W4 B4

adj P 2 B2 4 B3 P 3 1 2 B2 W2 P2 P1 Y1 B1

adj P 1 Y 1 5 Y 3 W 3, P 2 B2 3 2 3 2 B2 W2 P2 P3 Y3

adj B1 W 1 6 Y 3 W 3, P 2 B2 1 4 1 4 P1 Y1 B1 W4 B4

adj P 2 W 2 7 P 3 B3 2 4 B2 W2 P2 W4 B4

adj Y 2 W 2 8 P 3 B3 3 4 Y3 P3 W4 B4

adj B2 Y 2 9 B3 P 3 1 3 P1 Y1 B1 P3 Y3 ON THE SPECTRUM OF THE PENROSE LAPLACIAN 7

2.3. Computational Methods for Penrose Tiling.

2.3.1. Explanation of the MatLab Code. This section discusses the MatLab code written to generate finite iterations of the Penrose tiling. See Appendix A.1 for the code and more detailed comments. The goal of the function genPenTiling.m is to construct iterations of the Penrose tiling. The function takes input of oldTiles and outputs newTiles, which are the tiles in the next iteration. We store tiles as structures which each have four fields. The first is a positive integer, denoted as ‘id’ that is unique to each tile in a given iteration. The next is a representation of the color of the tile: ‘p’, ‘b’, ‘y’ and ‘w’, denoting pink, blue, yellow, and white. The next field is an array that contains the id numbers of the tile’s children. Our last field is a list of the tile’s neighbors on each side: first, second, and third, which we denote as ‘n1’, ‘n2’, and ‘n3’ respectively. For example, we see in Figure 3 that the first iteration of the tiling contains five P and five B tiles. So the input for oldTiles is: tile1 = struct ( ‘color’, ‘p’, ‘id’, 1, ‘n3’, 2, ‘n1’ , 10); tile2 = struct ( ‘color’, ‘b’, ‘id’, 2, ‘n3’, 1, ‘n1’ ,3 ); tile3 = struct ( ‘color’, ‘p’, ‘id’, 3, ‘n3’, 4, ‘n1’ ,2); tile4 = struct ( ‘color’, ‘b’, ‘id’, 4, ‘n3’, 3, ‘n1’ ,5); tile5 = struct ( ‘color’, ‘p’, ‘id’, 5, ‘n3’, 6, ‘n1’ ,4); tile6 = struct ( ‘color’, ‘b’, ‘id’, 6, ‘n3’, 5, ‘n1’ ,7); tile7 = struct ( ‘color’, ‘p’, ‘id’, 7, ‘n3’, 8, ‘n1’ ,6); tile8 = struct ( ‘color’, ‘b’, ‘id’, 8, ‘n3’, 7, ‘n1’ ,9); tile9 = struct ( ‘color’, ‘p’, ‘id’, 9, ‘n3’, 10, ‘n1’ ,8); tile10 = struct ( ‘color’, ‘b’, ‘id’, 10, ‘n3’, 9 , ‘n1’ , 1); This sets each P and B tile as neighbors on the third side, as shown in Figure 2. The function genPenTiling.m first creates the new tiles of the next iteration, which are the children of each of the oldTiles. Then the function sets the internal adjacencies (adjacencies between children of the same prototile) shown in Figure 2, and the external adjacencies based on the rules defined in Table 1. This is done by determining the neighbors of the tile and following the appropriate rule. Now genPenTiling.m outputs the set of newTiles which make up the next iteration of the tiling.

3. The Laplacian and Spectrum Let us first present some relevant definitions and background information related to the Laplacian matrix and its spectrum. Let G =(V,E)beasimple(undirected edges with no looped vertices) graph with vertex set V = v1,v2 ...,vn and edge set E = e ,e ,...,e , where e is an unordered element{ of V V. } { 1 2 m} i ⇥ Definition 5. The adjacency matrix, A(G), is an n n matrix such that the ⇥ entry aij is the number of edges connecting vertex i to vertex j.

Definition 6. The degree matrix, D(G),isann n matrix such that the diagonal ⇥ entry aii is the degree, the number of edges of the vertex vi.

Definition 7. [10] The Laplacian matrix of G, (G), is D(G) A(G). 8 M.DAIRYKO,C.HOFFMAN,J.PATTYSON,ANDH.PECK

Definition 8. [3] In a graph G, let u and v be vertices and dv the degree of vertex v. An equivalent definition of the Laplacian matrix (G) for u, v V is 2 dv if u = v, (u, v)= 1 if u and v are adjacent, 8 <>0 otherwise.

Definition 9. Let f : V (G) :>R be a function that assigns a real value to each vertex of the graph G.TheLaplacian! operator is a function acting on f, defined by f(v)= f(v) f(w) w:d(Xv,w)=1 which sums the di↵erence of the real values of adjacent nodes. Remark 2. The above definition does not require that G has finitely many vertices.

Definition 10. [3] Let 0 1 ... n 1 be the set of eigenvalues of (G). This set is denoted as ({(G)), and is called the} spectrum of (G). In the following example, we compute (G) and ((G)) for a given graph G. Example 1. Let G be a simple graph on six vertices and seven edges, as shown below.

6 4 5

3 2 1

Using Definition 7 of the Laplacian, we find the degree matrix and the adjacency matrix to compute (G). This is equivalent to using the piecewise function as shown above. Once (G) is constructed, we can compute ((G)).

200000 010010 030000 101010 0 0020001 0 0101001 D(G)= A(G)= B 000300C B 001011C B C B C B 000030C B 110100C B C B C B 000001C B 000100C B C B C @ A @ A 2 10010 13 1010 0 0 12 100 1 (G)= B 00131 1 C B C B 1 10130C B C B 000101C B C Using MatLab, we find@ the spectrum A ((G)) = 0.0, 0.7216, 1.6826, 3.0, 3.7046, 4.8912 . { } ON THE SPECTRUM OF THE PENROSE LAPLACIAN 9

Many of the physical properties of quasicrystals can be revealed through study of the integrated density of states function, which we approach by finding the cumulative distribution function of the spectrum of finite iterations of the Penrose tiling. Definition 11. The cumulative distribution function (CDF) of a random variable X is given by F (x)=P [X x] for all x R  2 where P denotes the probability function. Definition 12. The support of a CDF is the smallest closed set whose complement has probability zero. The CDF gives the graph representing the probability that a random is less than or equal to a certain real-valued number, labeled along the x-axis. 3.1. Computational Methods of the Laplacian and Spectrum. This section discusses the MatLab code which we use to generate the spectrum of the Laplacian matrix and the CDF of finite iterations of the spectrum. See Appendix A.2, A.3, and A.4 for the code and more detailed comments. The function tilingLaplacian.m takes input newTiles (which is a vector of tile structures) from the genPenTiling.m function and outputs the eigenvalues of the Laplacian matrix of that iteration of the tiling. First, we construct the adjacency matrix for the tiling based on the substitution with four prototiles. We search through all of the new tiles and check if each tile has a neighbor on the first, second, and third side. If the tile does have a neighbor, we put a ‘1’ in the row and column corresponding to the tile and its neighbor tile. This builds the adjacency matrix for the tiling based o↵of the set of four Robinson triangles. Next, the function finds pairs of tiles that are neighbors on the third side and records their id numbers. If two tiles are neighbors on the third side, we combine them into one tile to return to the original two Penrose prototiles as shown in Figure 1. To do this in the adjacency matrix, we add corresponding rows and columns and delete the extra rows and columns. For example, if i and j (with i

1 function will jump vertically by n where n is the number of eigenvalues in the input vector (see Figure 6).

4. The Hausdorff Dimension We begin with some preliminary definitions.

Definition 13. Let X Rn be nonempty, and define U := sup x y : x, y U . We say U is a -cover⇢ of X if | | {| | 2 } { i} 1 (1) X Ui ⇢ i=1 (2) 0 USi | | Definition 14. [6, Equations 2.1, 2.2] Let X Rn be nonempty and s be any nonnegative real number. For >0 define ⇢

1 H s(X):=inf U s : U is a -cover of X . | i| i (i=1 ) X The s-dimensional Hausdor↵measure of X, denoted H s(X) is s lim H (X). 0 ! s Observe that for a fixed <1, H (X) is non-increasing with respect to s.We see that in Figure 2, H s(X) is always either 0 or , except for at most one point. In the following example, this point will be (1, 0). 1We call this point the Hausdor↵ dimension.

Definition 15. Let X Rn be nonempty and s be any nonnegative real number. For >0 define ⇢ dim (X):=inf s : H s(X)=0 =sup s : H s(X)= . H { } { 1} We call dimH (X) the Hausdor↵dimension of X. Therefore, we will have a single point, the Hausdor↵dimension, at which the measure is not zero or infinity (see Example 2). Example 2. Let us divide the interval A =[0, 1] into n closed subintervals of equal i i+1 length. Let Ui := n , n , where i = 0, 1,...,n 1 . Therefore Ui is a -cover of A. Let { } { } ⇥ ⇤ s s 1 1 1 U s = n = | i| · n n X ✓ ◆ ✓ ◆ be an approximation of H s(A). As 0, that is n we have ! !1 0 if s>1, s H (A)=81 if s =1 <> otherwise. 1 This indicates that the Hausdor↵:>dimension of A is 1 which agrees with our intuition about the topological dimension of A. ON THE SPECTRUM OF THE PENROSE LAPLACIAN 11

H s(X)

1

0 1 s

1 Figure 4. Hausdor↵Dimension for [0, 1] with = n gleaned from [6]

4.1. Computational Methods for The Hausdor↵Dimension. This section discusses the MatLab code which generates an estimate of the Hausdor↵Dimen- sion. See Appendix A.5 for the code and more detailed comments. The ndsTable.m is a function that takes input of a set of eigenvalues of the Laplacian and an estimate s of the Hausdor↵dimension and creates a column of s 1 values. These columns are calculated by n ,where = 2i for i 1, 2,...,7 , n is the number of -intervals needed to contain all eigenvalues, and2s{is an estimate} for the Hausdor↵dimension (a value between 0 and 1). This column of values is then used to estimate the Hausdor↵dimension of the spectrum. As all of the eigenvalues of the spectrum of the Laplacian were found to be between the finite interval [0, 8], the function first divides this interval into partitions of length . Each row in the output 10 1 vector corresponds to a unique value of . The function ndsTable.m then finds the⇥ number of eigenvalues that lie within each of these partitions and the number of -intervals needed to contain all eigenvalues, which is the number of -partitions containing at least one eigenvalue. 1 s Each row output of this function is n( 2i ) ,wheren is the number of -intervals 1 needed for the corresponding = 2i . If the output 10 1 column vector increases (respectively decreases), the Hausdor↵dimension of the⇥ spectrum is greater than (respectively less than) the s value.

5. Results In this section, we highlight the results of the spectrum and probability functions for the tiling. Using tilingLaplacian.m we find the eigenvalues of the Laplacian matrices of seven iterations of the Penrose tiling. Then with plotMat.m, we plot the eigenvalues for the first seven iterations as shown in Figure 5. From [13] we know that the spectrum of the Penrose Laplacian should be bounded by twice the highest degree of any node. As we are working with the Penrose rhom- bus and diamond which are four-sided tiles, the highest possible degree of a node is four. Thus, the spectrum should be bounded by eight. As shown in Figure 5, this is illustrated by our results on the first seven iterations. 12 M.DAIRYKO,C.HOFFMAN,J.PATTYSON,ANDH.PECK

Spectrum of Finite Iterations of Penrose Tiling 8

7

6

5

4

3

2

1 Iteration of Penrose Tiling 0 0 1 2 3 4 5 6 7 8

Eigenvalues

Figure 5. Eigenvalues of the first seven iterations

The program cdf.m constructs the CDF of eigenvalues from each iteration. Since we have a small set of eigenvalues for the first few iterations of the tiling, this function is step-like and jumps at each discrete eigenvalue. Once we found the CDF of finite iterations of the Penrose tiling, Theorem 3.2 from [4] tells us that, in the infinity norm, these functions approach a limiting function. This limiting function will be the integrated density of states of the Penrose Laplacian, and the support of this limiting function is the spectrum of the Penrose Laplacian. In the finite approximations, the support of the CDF is the set of “jumps” in the graph. These jumps occur at the set of eigenvalues, which for the finite approximations is the Penrose Laplacian spectrum. Thus, in the infinite case, the interval where the function is increasing is the support of the function, and this support is the spectrum. Table 2 will help to estimate the Hausdor↵dimension of the Penrose Laplacian s spectrum. Theory says that, as approaches 0, H will be either zero or infinity. Moving down through the columns of values in Table 2 is representative of taking to 0. Therefore, if the values increase down the column, we can definitively say the estimated s is not the Hausdor↵dimension, as the values are going to infinity. If the values decrease down the column, the chosen s is again not the Hausdor↵ dimension, as the values are going to zero. However, the various values of s in which the columns neither clearly decrease nor increase provide an interval in which the actual Hausdor↵dimension can be found. Therefore, we estimate the Hausdor↵ dimension of the Penrose Laplacian spectrum to be between .85 and .99, which implies structure. ON THE SPECTRUM OF THE PENROSE LAPLACIAN 13

Cumulative Distribution Function 1

0.8

0.6

0.4 Probability

0.2

0 0 1 2 3 4 5 6 7 8

Real Numbers

Figure 6. Cumulative distribution plot for the first seven iterations

Table 2. Values of ns as Functions of i and s

s i .55 .65 .75 .85 .95 .99 .99999 1 9.56 8.92 8.32 7.76 7.24 7.04 7.00 2 12.59 10.96 9.54 8.31 7.23 6.84 6.75 3 17.20 13.97 11.35 9.22 7.48 6.89 6.75 4 23.28 17.64 13.37 10.13 7.68 6.87 6.68 5 31.36 22.17 15.68 11.08 7.84 6.82 6.59 6 41.93 27.66 18.25 12.04 7.94 6.72 6.45 7 52.08 32.05 19.73 12.14 7.47 6.15 5.86

6. Conclusion and Future Work Shechtman’s 1982 discovery of a sparked research interest in the field of quasicrystalline structures as they relate to aperiodic tilings. We are interested in the spectrum of the Penrose tiling as it reveals certain properties of quasicrystals. We created an algorithm to generate finite iterations of the Penrose tiling. Then we were able to create the Laplacian matrix for each respective finite tiling. With this, we calculated the spectrum of each Laplacian matrix. Using the spectrum, we estimated the Hausdor↵dimension of the Penrose tiling. For future work, we would like to explore ways to generate more iterations of the Penrose tiling to improve the estimate of the Hausdor↵dimension. We hope to use the methods established here to generalize these results to other aperiodic tilings. 14 M.DAIRYKO,C.HOFFMAN,J.PATTYSON,ANDH.PECK

7. Acknowledgments Figures 1, 2, and 3 related to the substitution method were inspired by and modified from images in [7]. The presentation of Table 2 was inspired by [2]. We would like to thank Dr. May Mei and Drew Zemke for their help with this project. We would also like to thank the Summer Math Institute and the Mathematics Department at Cornell University for the use of their resources. This work was supported by NSF grant DMS-0739338. ON THE SPECTRUM OF THE PENROSE LAPLACIAN 15

Appendix A: MatLab Code A.1. genPenTiling.m.

1 % genPenTiling .m 2 % Michael Dairyko , Christine Hoffman , Julie Pattyson , Hailee Peck 3 % 4 % Given the data for an iteration of the Penrose tiling , this function 5 % outputs the next iteration . 6 % A tiling is stored as a list of structures ; each has the following fields : 7 % id A positive integer that is unique to this tile in this 8 % iteration 9 % color ’ p ’, ’ b ’, ’ y ’ or ’w’, based on whether the tile is pink , 10 % blue , yellow or white 11 % children An array that contains this tile ’ s children ’ s ids . 12 % n1 , n2 , n3 A list of this tile ’ s neighbors on each side . 13 14 function [ newTiles ]=genPenTiling( oldTiles ) 15 16 % First we create the new tiles without worrying 17 % about adjacencies . We will keep track of the old tiles ’ children 18 % and each new tile ’ s parent . 19 % Recall the rules : 1) each pink tile turns into a blue tile , a white tile 20 % and a pink tile , 2) each blue tile turns into a pink , a yellow , and a blue 21 % tile , 3) each white tile turns into a white tile and a blue tile , 22 % and 4) each yellow tile turns into a pink tile and a yellow tile 23 newTiles = ; {} 24 idCounter =1; 25 26 % Setting up an empty tempTiles set which will start empty but 27 % each time we create a new tile , will add that new tile to this set . 28 % This is a master list of all tiles created during the process of generating 29 % the tiling . 30 tempTiles = ; {} 31 32 for i =1:length( oldTiles) 33 % Go through old tiles one by one . 34 thisTile = oldTiles i ; { } 35 36 % The following if statements set up the children of each of these 37 % tiles and their internal adjacencies . 38 39 % thisTile is a pink tile . 40 % newB2 , newW2 , and newP2 are thisTile ’ s children . 41 if thisTile . color == ’ p ’ 42 43 % Tile 1 ( first child) := blue 44 newB2 = struct( ’ id ’ , idCounter , ’ color ’ , ’ b ’ ); 45 % Assign an index number so we can reference the tile by this number . 46 idCounter = idCounter +1; 47 48 % Tile 2 ( second child) := white 49 newW2 = struct( ’ id ’ , idCounter , ’ color ’ , ’w ’ ); 50 idCounter = idCounter +1; 51 52 % Tile 3 ( third child) := pink 53 newP2 = struct( ’ id ’ , idCounter , ’ color ’ , ’ p ’ ); 54 idCounter = idCounter +1; 55 56 % Note that we labeled tiles coming from our pink 57 % tiles with a 2 ( because pink is triangle 2) , in order 58 % to distinguish the pink , blue , white tiles that 59 % come from pink apart from the pink , blue , white that come from 60 % other parent tiles . 61 62 % Set these new tiles as children of thisTile . 63 thisTile . children =[newB2 . id , newW2 . id , newP2 . id ]; 64 65 % Internal adjacencies of p ( see Figure #5 in the paper for a 66 % visual of these) : 67 % Blue connects to white on side 1. 68 newB2 . n1 = newW2 . id ; 69 % White connects to pink on side 2. 16 M.DAIRYKO,C.HOFFMAN,J.PATTYSON,ANDH.PECK

70 newW2 . n2 = newP2 . id ; 71 % Likewise , pink connects to white on side 2. 72 newP2 . n2 = newW2 . id ; 73 % White connects to blue on side 1. 74 newW2 . n1 = newB2 . id ; 75 76 % We must define each adjacency both ways so the 77 % adjacency is stored in each tile ( and not just in one tile) 78 % because we want our adjacency matrix to reflect the symmetry 79 % of the adjacencies . 80 81 %Now add these children to our set of newTiles . 82 newTiles length( newTiles)+1 = newB2 ; { } 83 newTiles length( newTiles)+1 = newW2 ; { } 84 newTiles length( newTiles)+1 = newP2 ; { } 85 86 % thisTile is a blue tile . 87 % newP1 , newY1 , and newB1 are thisTile ’ s children . 88 elseif thisTile . color == ’ b ’ 89 90 % As with the pink tile , we label these children with a 1 to distinguish 91 % that they came from the blue tile ( triangle 1) . 92 93 % Tile 1 ( first child) := Pink 94 newP1 = struct( ’ id ’ , idCounter , ’ color ’ , ’ p ’ ); 95 idCounter = idCounter +1; 96 97 % Tile 2 ( second child) := Yellow 98 newY1 = struct( ’ id ’ , idCounter , ’ color ’ , ’ y ’ ); 99 idCounter = idCounter +1; 100 101 % and Tile 3 ( third child) := Blue 102 newB1 = struct( ’ id ’ , idCounter , ’ color ’ , ’ b ’ ); 103 idCounter = idCounter +1; 104 105 % Set these new tiles as children of thisTile . 106 thisTile . children=[newP1 . id , newY1 . id , newB1 . id ]; 107 108 %Internal adjacencies of b ( see Figure 5) : 109 % Pink connects to yellow on side 1. 110 newP1 . n1 = newY1 . id ; 111 % Yellow connects to blue on side 2. 112 newY1 . n2 = newB1 . id ; 113 % Blue connects to yellow on side 2. 114 newB1 . n2 = newY1 . id ; 115 % Yellow connects to pink on side 1. 116 newY1 . n1 = newP1 . id ; 117 118 % Now add these children to our set of newTiles . 119 newTiles length( newTiles)+1 = newP1 ; { } 120 newTiles length( newTiles)+1 = newY1 ; { } 121 newTiles length( newTiles)+1 = newB1 ; { } 122 123 % thisTile is yellow a tile . 124 % newP3 and newY3 are thisTile ’ s children . 125 elseif thisTile . color == ’ y ’ 126 127 % As with the pink and blue tiles , we label these children with a 3 to distinguish 128 % that they came from the yellow tile ( triangle 3) . 129 130 % Tile 1 ( first child) := Pink 131 newP3 = struct( ’ id ’ , idCounter , ’ color ’ , ’ p ’ ); 132 idCounter = idCounter +1; 133 134 % Tile 2 ( second child) := Yellow 135 newY3 = struct( ’ id ’ , idCounter , ’ color ’ , ’ y ’ ); 136 idCounter = idCounter +1; 137 138 % Set these new tiles as children of thisTile . 139 thisTile . children =[newP3 . id , newY3 . id ]; ON THE SPECTRUM OF THE PENROSE LAPLACIAN 17

140 141 % Internal adjacencies of y ( see Figure 5) : 142 % Pink connects to yellow on side 1. 143 newP3 . n1 = newY3 . id ; 144 % Yellow connects to pink on side 1. 145 newY3 . n1 = newP3 . id ; 146 147 % Now add these children to our set of newTiles . 148 newTiles length( newTiles)+1 = newP3 ; { } 149 newTiles length( newTiles)+1 = newY3 ; { } 150 151 % thisTile is a white tile . 152 % newB4 and newW4 are thisTile ’ s children . 153 else 154 155 % As with the previous tiles , we label these children with a 4 to distinguish 156 % that they came from the white tile ( triangle 4) . 157 158 % Tile 1 ( first child) := Blue 159 newB4 = struct( ’ id ’ , idCounter , ’ color ’ , ’ b ’ ); 160 idCounter = idCounter +1; 161 162 % Tile 2 ( second child) := White 163 newW4 = struct( ’ id ’ , idCounter , ’ color ’ , ’w ’ ); 164 idCounter = idCounter +1; 165 166 % Set these new tiles as children of thisTile . 167 thisTile . children =[newB4 . id , newW4 . id ]; 168 169 % Internal adjacencies of w ( see Figure 5) : 170 % Blue connects to white on side 1. 171 newB4 . n1 = newW4 . id ; 172 % White connects to blue on side 1. 173 newW4 . n1 = newB4 . id ; 174 175 % Now add these children to our set of newTiles . 176 newTiles length( newTiles)+1 = newB4 ; { } 177 newTiles length( newTiles)+1 = newW4 ; { } 178 end 179 180 % Store the tile that we just processed and changed . 181 tempTiles length( tempTiles)+1 = thisTile ; { } 182 end 183 184 % Now we set up the external adjacencies . We proceed 185 % by iterating through the tempTiles which is where the old tiles that 186 % were changed in the previous if statement are stored . Note 187 % that when we reference an adjacency rule , we are referencing the 188 % numbered rules from the table in Appendix B of the paper . 189 190 % Go through the tempTiles one by one . 191 for i =1:length( tempTiles) 192 193 %The tile we are currently working with is thisTile . 194 thisTile = tempTiles i ; { } 195 196 % thisTile is pink . 197 if thisTile . color == ’ p ’ 198 199 % Checks if our pink tile has a neighbor on the 1 side (1 arrow) . 200 % If it does it will be blue or yellow , according to rule 2 or rule 5. 201 if isfield( thisTile , ’ n1 ’ ) 202 203 % This is the neighbor on the 1 side of this pink tile , denoted by N. 204 N = tempTiles thisTile . n1 ; { } 205 206 % In Rule 2, the neighbor is a blue tile . 207 if N. color == ’ b ’ 208 209 % Our neighbor N is a blue tile , so follow Rule 2. 18 M.DAIRYKO,C.HOFFMAN,J.PATTYSON,ANDH.PECK

210 % Referencing the first child (B2) of the pink tile . 211 Child1 = newTiles thisTile . children (1) ; { } 212 % B2 is connected on the second side to the first child ( P1) 213 % of the neighbor ( blue) tile . 214 Child1 . n2 = newTiles N. children (1) . id ; { } 215 216 % Again , we define each adjacency both ways so the 217 % adjacency is stored in each tile ( and not just in one tile) 218 % because we want our adjacency matrix to reflect the symmetry 219 % of the adjacencies . 220 newTiles N. children (1) . n2 = Child1 . id ; { } 221 222 % Referencing the second child (W2) of the pink tile . 223 Child2 = newTiles thisTile . children (2) ; { } 224 % W2 is connected on the third side to the second child (Y1) 225 % of the neighbor ( blue) tile . 226 Child2 . n3 = newTiles N. children (2) . id ; { } 227 newTiles N. children (2) . n3 = Child2 . id ; { } 228 229 % In Rule 5, the neighbor is a yellow tile . 230 elseif N. color == ’ y ’ 231 % Our neighbor N is a yellow tile , so follow Rule 5. 232 % Referencing the first child (B2) of the pink tile . 233 Child1 = newTiles thisTile . children (1) ; { } 234 % B2 is connected on the second side to the first child ( P3) of 235 % the neighbor ( yellow) tile . 236 Child1 . n2 = newTiles N. children (1) . id ; { } 237 newTiles N. children (1) . n2 = Child1 . id ; { } 238 239 % Referencing the second child (W2) of the pink tile . 240 Child2 = newTiles thisTile . children (2) ; { } 241 % W2 connected on the third side to the second child (Y3) 242 % of the neighbor ( yellow) tile 243 Child2 . n3 = newTiles N. children (2) . id ; { } 244 newTiles N. children (2) . n3 = Child2 . id ; { } 245 end 246 end 247 248 % Checks if our pink tile has a neighbor on the 2 side (2 arrows) . 249 % If it does it will be blue or white , according to Rule 4 or Rule 7. 250 % In Rule 4, the neighbor is a blue tile . 251 % In Rule 7, the neighbor is a white tile . 252 if isfield( thisTile , ’ n2 ’ ) 253 254 % This is the neighbor on the 2 side of this pink tile . 255 N = tempTiles thisTile . n2 ; { } 256 % Our neighbor N is a blue tile , so follow Rule 4. 257 if N. color == ’ b ’ 258 % Referencing the third child ( P2) of the pink tile . 259 Child3 = newTiles thisTile . children (3) ; { } 260 % P2 is connected on the third side to the third child ( B1) 261 % of the neighbor ( blue) tile . 262 Child3 . n3 = newTiles N. children (3) . id ; { } 263 newTiles N. children (3) . n3 = Child3 . id ; { } 264 265 % Our neighbor is a white tile , so follow Rule 7. 266 elseif N. color == ’w ’ 267 % Referencing the third child ( P2) of the pink tile . 268 Child3 = newTiles thisTile . children (3) ; { } 269 % P2 is connected on the third side to the first child ( B4) 270 % of the neighbor ( blue) tile . 271 Child3 . n3 = newTiles N. children (1) . id ; { } 272 newTiles N. children (1) . n3 = Child3 . id ; { } 273 end 274 end 275 276 % Checks if our pink tile has a neighbor on the 3 side ( no arrows) . 277 % If it does it will be blue , according to Rule 1. ON THE SPECTRUM OF THE PENROSE LAPLACIAN 19

278 % In Rule 1, the neighbor is a blue tile . 279 if isfield( thisTile , ’ n3 ’ ) 280 281 %This is the neighbor on the 3 side of this pink tile ( which will always be blue) . 282 N = tempTiles thisTile . n3 ; { } 283 % Referencing the first child (B2) of the pink tile . 284 Child4 = newTiles thisTile . children (1) ; { } 285 % B2 is connected on the third side to the first child ( P1) 286 % of the neighbor ( blue) tile . 287 Child4 . n3 = newTiles N. children (1) . id ; { } 288 newTiles N. children (1) . n3 = Child4 . id ; { } 289 290 % Referencing the third child ( P2) of the pink tile . 291 Child5 = newTiles thisTile . children (3) ; { } 292 % P2 is connected to on the first side to the third child (B1) 293 % of the neighbor ( blue) tile . 294 Child5 . n1 = newTiles N. children (3) . id ; { } 295 newTiles N. children (3) . n1 = Child5 . id ; { } 296 end 297 end 298 299 %Now we run through the external adjacencies for tiles other than pink . 300 % thisTile is blue . 301 if thisTile . color == ’ b ’ 302 303 % Checks if the blue tile has a neighbor on the first (1 arrow) side . 304 if isfield( thisTile , ’ n1 ’ ) 305 306 % This is the neighbor on the 1 side of the blue tile . 307 % Follow Rule 2 or Rule 6: 308 % In Rule 2, the neighbor is a pink tile . 309 % In Rule 6, the neighbor is a white tile . 310 N = tempTiles thisTile . n1 ; { } 311 % Follow Rule 2. 312 if N. color == ’ p ’ 313 % Referencing the first child ( P1) of the blue tile . 314 Child6 = newTiles thisTile . children (1) ; { } 315 % P1 is connected on the second side to the first child ( B2) 316 % of the neighbor ( pink) tile . 317 Child6 . n2 = newTiles N. children (1) . id ; { } 318 newTiles N. children (1) . n2 = Child6 . id ; { } 319 320 Child7 = newTiles thisTile . children (2) ; { } 321 % Referencing the second child (Y1) of the blue tile . 322 Child7 . n3 = newTiles N. children (2) . id ; { } 323 % Y1 is conncetd on the third side to the second child ( W2) 324 % of the neighbor ( pink) tile . 325 newTiles N. children (2) . n3 = Child7 . id ; { } 326 327 % Follow Rule 6. 328 elseif N. color == ’w ’ 329 % Referencing the first child ( P1) of the blue tile . 330 Child6 = newTiles thisTile . children (1) ; { } 331 % P1 is connected on the second side to the first child ( B4) 332 % of the neighbor ( white) tile . 333 Child6 . n2 = newTiles N. children (1) . id ; { } 334 newTiles N. children (1) . n2 = Child6 . id ; { } 335 % Referencing the second child (Y1) of the blue tile . 336 Child7 = newTiles thisTile . children (2) ; { } 337 % Y1 is connected on the third side to the second child ( W4) 338 % of the neighbor ( white) tile . 339 Child7 . n3 = newTiles N. children (2) . id ; { } 340 newTiles N. children (2) . n3 = Child7 . id ; { } 341 end 342 end 20 M.DAIRYKO,C.HOFFMAN,J.PATTYSON,ANDH.PECK

343 344 % Checks if the blue tile has a neighbor on the second (2 arrows) side . 345 if isfield( thisTile , ’ n2 ’ ) 346 347 % This is the neighbor on the 2 side of the blue tile . 348 % Follow Rule 4 or Rule 9: 349 % In Rule 4, the neighbor is a pink tile . 350 % In Rule 9, the neighbor is a yellow tile . 351 N = tempTiles thisTile . n2 ; { } 352 % Follow Rule 4. 353 if N. color == ’ p ’ 354 355 % Referencing the third child (B1) of the blue tile . 356 Child8 = newTiles thisTile . children (3) ; { } 357 % B1 is connected on the third side to the third child ( P2) 358 % of the neighbor ( pink) tile . 359 Child8 . n3 = newTiles N. children (3) . id ; { } 360 newTiles N. children (3) . n3 = Child8 . id ; { } 361 % Follow Rule 9. 362 elseif N. color == ’ y ’ 363 % Referencing the third child (B1) of the blue tile . 364 Child8 = newTiles thisTile . children (3) ; { } 365 % B1 is connected on the third side to the first child ( P3) 366 % of the neighbor ( yellow) tile 367 Child8 . n3 = newTiles N. children (1) . id ; { } 368 newTiles N. children (1) . n3 = Child8 . id ; { } 369 end 370 end 371 372 % Checks if the blue tile has a neighbor on the 3 ( no arrows) side . 373 if isfield( thisTile , ’ n3 ’ ) 374 375 % This is the neighbor on the 3 side of the blue tile ( will always be pink) . 376 % Follow Rule 1: In Rule 1, the neighbor is a pink tile . 377 N = tempTiles thisTile . n3 ; { } 378 379 % Referencing the first child ( P1) of the blue tile . 380 Child9 = newTiles thisTile . children (1) ; { } 381 % P1 is connected on the third side to the first child ( B2) 382 % of the neighbor ( pink) tile . 383 Child9 . n3 = newTiles N. children (1) . id ; { } 384 newTiles N. children (1) . n3 = Child9 . id ; { } 385 % Referencing the third child (B1) of the blue tile . 386 Child10 = newTiles thisTile . children (3) ; { } 387 % B1 is connected on the first side to the third child ( P2) 388 % of the neighbor ( pink) tile . 389 Child10 . n1 = newTiles N. children (3) . id ; { } 390 newTiles N. children (3) . n1 = Child10 . id ; { } 391 end 392 end 393 394 % thisTile is white . 395 if thisTile . color == ’w ’ 396 397 % Checks if the white tile has a neighbor on the first (1 arrow) side . 398 if isfield( thisTile , ’ n1 ’ ) 399 400 % This is the neighbor on the 1 side of the white tile ( will always be blue) . 401 % Follow Rule 6. In Rule 6, the neighbor is a blue tile . 402 N = tempTiles thisTile . n1 ; { } 403 % Referencing the first child (B4) of the white tile . 404 Child11 = newTiles thisTile . children (1) ; { } 405 % B4 is connected on the second side to the first child ( P1) ON THE SPECTRUM OF THE PENROSE LAPLACIAN 21

406 % of the neighbor ( blue) tile . 407 Child11 . n2 = newTiles N. children (1) . id ; { } 408 newTiles N. children (1) . n2 = Child11 . id ; { } 409 % Referencing the second child (W4) of the white tile . 410 Child12 = newTiles thisTile . children (2) ; { } 411 % W4 is connected on the third side to the second child ( Y1) 412 % of the neighbor ( blue) tile . 413 Child12 . n3 = newTiles N. children (2) . id ; { } 414 newTiles N. children (2) . n3 = Child12 . id ; { } 415 end 416 417 % Checks if the white tile has a neighbor on the second (2 arrow) side . 418 if isfield( thisTile , ’ n2 ’ ) 419 % This is the neighbor on the 2 side of the white tile . 420 % Follow Rule 7 or Rule 8. 421 N = tempTiles thisTile . n2 ; { } 422 423 % In Rule 7, the neighbor is a pink tile . 424 if N. color == ’ p ’ 425 % Follow Rule 7. 426 % Referencing the first child (B4) of the white tile . 427 Child13 = newTiles thisTile . children (1) ; { } 428 % B4 is connected on the third side to the third child ( P2) 429 % of the neighbor ( pink) tile 430 Child13 . n3 = newTiles N. children (3) . id ; { } 431 newTiles N. children (3) . n3 = Child13 . id ; { } 432 433 % In Rule 8, the neighbor is a yellow tile . 434 elseif N. color == ’ y ’ 435 % Follow Rule 8. 436 % Referencing the first child (B4) of the white tile . 437 Child13 = newTiles thisTile . children (1) ; { } 438 % B4 is connected on the third side to the first child ( P3) 439 % of the neighbor ( yellow) tile . 440 Child13 . n3 = newTiles N. children (1) . id ; { } 441 newTiles N. children (1) . n3 = Child13 . id ; { } 442 end 443 end 444 445 % Checks if the white tile has a neighbor on the third ( no arrows) side . 446 if isfield( thisTile , ’ n3 ’ ) 447 448 % This is the neighbor on the 3 side of the white tile ( will always be yellow) . 449 % Follow Rule 3. In Rule 3, the neighbor is a yellow tile . 450 N = tempTiles thisTile . n3 ; { } 451 452 % Referencing the second child (W4) of the white tile . 453 Child14 = newTiles thisTile . children (2) ; { } 454 % W4 is connected on the second side to the second child (Y3) 455 % of the neighbor ( yellow) tile . 456 Child14 . n2 = newTiles N. children (2) . id ; { } 457 newTiles N. children (2) . n2 = Child14 . id ; { } 458 end 459 end 460 461 % thisTile is yellow . 462 if thisTile . color == ’ y ’ 463 464 % Checks if the yellow tile has a neighbor on the first (1 arrow) side . 465 if isfield( thisTile , ’ n1 ’ ) 466 467 % This is the neighbor on the first side of the yellow tile ( will always be pink) . 468 % Follow Rule 5. In Rule 5, the neighbor is a pink tile . 22 M.DAIRYKO,C.HOFFMAN,J.PATTYSON,ANDH.PECK

469 N = tempTiles thisTile . n1 ; { } 470 471 % Referencing the first child ( P3) of the yellow tile . 472 Child15 = newTiles thisTile . children (1) ; { } 473 % P3 is connected on the second side to the first child ( B2) 474 % of the neighbor ( pink) tile . 475 Child15 . n2 = newTiles N. children (1) . id ; { } 476 newTiles N. children (1) . n2 = Child15 . id ; { } 477 %Referencing the second child (Y3) of the yellow tile . 478 Child16 = newTiles thisTile . children (2) ; { } 479 % Y3 is connected on the third side to the second child ( W2) 480 % of the neighbor ( pink) tile . 481 Child16 . n3 = newTiles N. children (2) . id ; { } 482 newTiles N. children (2) . n3 = Child16 . id ; { } 483 end 484 485 % Checks if the yellow tile has a neighbor on the second (2 arrows) side . 486 if isfield( thisTile , ’ n2 ’ ) 487 488 % This is the neighbor on the second side of the yellow tile . 489 % Follow Rule 8 or Rule 9. 490 N = tempTiles thisTile . n2 ; { } 491 492 % In Rule 8, the neighbor is a white tile . 493 if N. color == ’w ’ 494 % Follow Rule 8. 495 % Referencing the first child ( P3) of the yellow tile . 496 Child17 = newTiles thisTile . children (1) ; { } 497 % P3 is connected on the third side to the first child ( B4) 498 % of the neighbor ( white) tile . 499 Child17 . n3 = newTiles N. children (1) . id ; { } 500 newTiles N. children (1) . n3 = Child17 . id ; { } 501 502 % In Rule 9, the neighbor is a blue tile . 503 elseif N. color == ’ b ’ 504 % Follow Rule 9. 505 % Referencing the first child ( P3) of the yellow tile . 506 Child18 = newTiles thisTile . children (1) ; { } 507 % P3 is connected on the third side to the third child ( B1) 508 % of the neighbor ( blue) tile . 509 Child18 . n3 = newTiles N. children (3) . id ; { } 510 newTiles N. children (3) . n3 = Child18 . id ; { } 511 end 512 end 513 514 % Checks if the yellow tile has a neighbor on the third ( no arrows) side . 515 if isfield( thisTile , ’ n3 ’ ) 516 517 % This is the neighbor on the third side of the yellow tiley ( will always be white) . 518 N = tempTiles thisTile . n3 ; { } 519 % Follow Rule 3. In Rule 3, the neighbor is a white tile . 520 % Referencing the second child (Y3) of the yellow tile . 521 Child19 = newTiles thisTile . children (2) ; { } 522 % Y3 is connected on the second side to the second child (W4) 523 % of the neighbor ( white) tile . 524 Child19 . n2 = newTiles N. children (2) . id ; { } 525 newTiles N. children (2) . n2 = Child19 . id ; { } 526 end 527 end 528 end

A.2. tilingLaplacian.m.

1 % tilingLaplacian .m ON THE SPECTRUM OF THE PENROSE LAPLACIAN 23

2 % Michael Dairyko , Christine Hoffman , Julie Pattyson , Hailee Peck 3 % 4 % This function takes the numbered newTiles generated by genPenTiling as input , combines 5 % tiles that share a third side , and computes the Laplacian matrix of the dual 6 % graph of iterations of the tiling . Two numbered tiles are considered to be adjacent 7 % if they share a side . The function outputs the eigenvalues of this matrix , 8 % which is the spectrum of the Laplacian . 9 10 function [ EIG ]=tilingLaplacian( newTiles ) 11 12 % Here we create the adjacency matrix . 13 % Creates a matrix of zeros ( an nxn matrix with n = # of tiles in newTiles) 14 A = zeros( length( newTiles)); 15 % Go through newTiles one by one . 16 for i =1: length( newTiles) 17 % thisTile = ith entry of newTiles = ith row of the matrix 18 thisTile = newTiles i ; { } 19 % Checks if thisTile has a neighbor on the first side . 20 if isfield( thisTile , ’ n1 ’ ) 21 % Then put a 1 in the matrix in the row and 22 % column corresponding to thisTile and the neighbor on the first side . 23 A( thisTile . id , thisTile . n1)=1; 24 end 25 % Checks if thisTile has a neighbor on the second side . 26 if isfield( thisTile , ’ n2 ’ ) 27 % Put a 1 in the row/ column corresponding to thisTile and the neighbor . 28 A( thisTile . id , thisTile . n2)=1; 29 end 30 % Checks if thisTile has a neighbor on the third side . 31 if isfield( thisTile , ’ n3 ’ ) 32 % Put a 1 in the row/ column corresponding to thisTile and the neighbor . 33 A( thisTile . id , thisTile . n3)=1; 34 end 35 end 36 37 % Here we find the ordered pairs containing the id numbers of each set of 38 % two tiles which are adjacent on their third side . We need to 39 % then condense the rows/ columns that correspond to these tiles in the adjacency 40 % matrix into one row/ column ( transforming our triangles back into 41 % rhombi/ diamonds) . 42 % Start off with an empty array , which we will fill . 43 pairs = ; {} 44 for i =1:length( newTiles ) 45 thisTile = newTiles i ; { } 46 L = length( pairs); 47 % Checks if thisTile has a neighbor on the third side . 48 if isfield( thisTile , ’ n3 ’ ) 49 % Increase the empty array by 1. 50 L = L +1; 51 % Put in the ordered pair of thisTile and its neighbor on the third side . 52 pairs L =[thisTile . id , thisTile . n3 ]; { } 53 end 54 end 55 56 % We need to get rid of repeated ordered pairs . These repeats 57 % occur because if tile1 is connected to tile2 on side 3, then tile2 is connected to 58 % tile1 on side 3, so we count the same pair twice . 59 % Start off with an empty array which we will fill with the ordered pairs without repeats . 60 OP = ; {} 61 % Start with an identification number of 1. 62 ID =1; 63 L2 = length(OP); 64 % Go through each pair of tiles which are neighbors on the third side . 65 for j =1:length( pairs) 24 M.DAIRYKO,C.HOFFMAN,J.PATTYSON,ANDH.PECK

66 thisPair = pairs j ; { } 67 % If the first entry of the ordered pair is less than the second , then we add it to OP . 68 if thisPair (1) < thisPair (2) 69 % Increase the length of OP by 1. 70 L2 = L2 +1; 71 % Puts this pair in OP . 72 OP ID = thisPair ; { } 73 % Gives this pair an id number . 74 ID = ID +1; 75 end 76 end 77 78 % This is the ordered pairs array we just built with no repeats . 79 P = OP ; 80 81 % Now we combine the tiles connected on the 3 rd sides . This means 82 % we need to add the two rows and the two columns of these pairs 83 % of tiles in our adjacency matrix , resulting in 1 row and 1 column for each 84 % new combined tile . 85 86 for i =1: length(P) 87 % Go through each 1 x2 matrix ( which are pairs of tiles with no 88 % repeats that are adjacent on the third side) one by one . 89 newPair=P i ; { } 90 91 % This adds the rows and columns of the first and second entries of 92 % each 1 x2 matrix ( pair) above . 93 A( newPair (1) ,:) = A( newPair (1) ,:) + A( newPair (2) ,:) ; 94 A(: ,newPair (1)) = A(: , newPair (1)) + A(: , newPair (2)) ; 95 end 96 % Set up a vector . 97 ordVec =[]; 98 for i =1:length(P) 99 % Go through each orderd pair one by one . 100 newPair=P i ; { } 101 % Let the ith entry of our vector be the second entry of the ith ordered pair in P 102 ordVec( i )= newPair (2) ; 103 end 104 % Sort the entries in ordVec in ascending order 105 % so when we delete rows and columns , we start 106 % with the biggest and then shrink the matrix down . 107 % This guarantees that the row/ column we are deleting has an 108 % index that is smaller than our dimensions of the matrix , even with 109 % deleted rows and columns from the previous iterations . 110 S = sort( ordVec); 111 112 for i=length( S ): 1:1 113 % Delete the ith row in the adjacency matrix . 114 A( S ( i ), :) = []; 115 % Delete the ith column in the adjacency matrix . 116 A(: , S ( i )) = []; 117 end 118 119 for j=1:length(A) 120 % Change the diagonal to zeros ( we want only adjacencies , no degrees) . 121 A( j , j )=0; 122 end 123 % AJ is the adjacency matrix for an iteration of the Penrose tiling 124 % because we have combined the tiles back into the Penrose rhombus 125 % and diamond tiles . 126 AJ = A; 127 128 % Now we create the degree matrix . 129 % Creates a matrix of zeros ( square matrix with the same dimensions as AJ) 130 D = zeros( length(AJ)); 131 132 for i =1: length(AJ) 133 % Sum the entries in each row from the adjacency matrix and enter this sum on 134 % the diagonal of the degree matrix ( ith entry of each row , column) . ON THE SPECTRUM OF THE PENROSE LAPLACIAN 25

135 % This is the degree matrix because each adjacency was designated with a ’1 ’ in that row . 136 D( i , i )=sum (AJ( i ,:)); 137 end 138 139 % The Laplacian is found by taking D AJ ( where D is the degree matrix and AJ is the adjacency matrix) . 140 L = D AJ ; 141 % Compute the eigenvalues of the Laplacian matrix to find the spectrum of the Laplacian . 142 EIG = eig(L); 143 end

A.3. plotMat.m.

1 % plotMat .m 2 % Michael Dairyko , Christine Hoffman , Julie Pattyson , Hailee Peck 3 % 4 % This function takes input of a cell array of eigenvalues ( from tilingLaplacian) 5 % and outputs a plot of the eigenvalues . We can plot the eigenvalues of 6 % multiple iterations of the tiling at once . 7 % Input onto terminal window as plotMat( B ; C; ... ) where B, C, ... are { } 8 % the output of tilingLaplacian ( the eigenvalues of multiple iterations of the Penrose 9 % tiling Laplacian matrices) . Then , we may have to adjust the graph manually at the end to 10 % expand the x and y windows , in order to see the plot better . 11 12 13 function []=plotMat( S ) 14 15 16 17 for i =1: length( S ) 18 % The ith entry of the cell array ( set of eigenvalues) . 19 L = S i ; { } 20 % Multilpy by i to separate each matrix ’ s eigenvalues on the plot . 21 y =(i ) ones (1 , length(L)); ⇤ 22 p = plot( L , y , ’ . ’ , ’ MarkerSize ’ ,5); 23 set( p , ’ Color ’ , ’ black ’ , ’ LineWidth ’ ,1); 24 xlabel( ’ Eigenvalues ’ , ’ FontSize ’ ,18) ; 25 ylabel( ’ Iteration of Penrose Tiling ’ , ’ FontSize ’ ,18) ; 26 title( ’ it Spectrum of Finite Iterations of Penrose Tiling ’ , ’ FontSize ’ \ { } ,18) ; 27 % Hold to plot multiple plots together . 28 hold all ; 29 30 end 31 32 end

A.4. cdf.m. 1 % cdf .m 2 % Michael Dairyko , Christine Hoffman , Julie Pattyson , Hailee Peck 3 % 4 % Given a cell array of eigenvalues S , this function outputs the 5 % probability plot ( cdf) . The plot represents the probability that a 6 % randomly chosen eigenvalue of EIG ( some entry in S ) is less than each 7 % real number on the x axis . This is the integrated density of states , also 8 % known as the cumulative density function . 9 % 10 function [ graph ]=cdf( S ) 11 12 % Since our cdf has jumps at every eigenvalue , 13 % this vector doubles each eigenvalue . 14 % Therefore , every eigenvalue maps 15 % to the the beginning and end of each 16 % vertical step . 17 for m =1: length( S ) 18 EIG = S m ; { } 19 doubleeig = zeros (1 , 2 length(EIG)); ⇤ 26 M.DAIRYKO,C.HOFFMAN,J.PATTYSON,ANDH.PECK

20 21 % We prepare a row vector that we will fill with the jumps that occur 22 % at each eigenvalue . 23 eigstep = zeros (1 , 2 length(EIG)); ⇤ 24 eigstep (1 ,1) = 0; 25 eigstep (1 , 2 length(EIG)) = 1; ⇤ 26 27 % Doubles every eigenvalue . 28 for i =1:length(EIG) 29 doubleeig (1 , 2 i 1) = abs(EIG( i )); ⇤ 30 doubleeig (1 , 2 i )=abs(EIG( i )); ⇤ 31 end 32 33 prob =0; 34 for j =1:(length(EIG) 1) 35 % This makes the probability jump at every eigenvalue . The 36 % jump at each eigenvalue will be of magnitude 37 % 1/( total number of eigenvalues) 38 prob = prob +(1/(length(EIG))); 39 eigstep (1 , 2 j )=prob ; ⇤ 40 eigstep (1 , 2 j +1) = prob ; ⇤ 41 end 42 43 % Plots cdf of the probability that an eigenvalue is less than or equal 44 % to each real number . 45 graph = plot( doubleeig , eigstep ); 46 xlabel( ’R ’ , ’ FontSize ’ ,12) ; 47 ylabel( ’ Probability ’ , ’ FontSize ’ ,12) ; 48 title( ’ it Probability of Eigenvalue less than R ’ , ’ FontSize ’ ,12) ; \ { } 49 hold all ; 50 end 51 end

A.5. ndsTable.m. 1 % ndsTable .m 2 % Michael Dairyko , Christine Hoffman , Julie Pattyson , Hailee Peck 3 % 4 % Given the spectrum ( a vector of eigenvalues) from the Penrose laplacian 5 % and a guess at the Hausdorff dimension , this function 6 % outputs a 10X1 column of values of n deltaˆ s where delta = 1/(2ˆw) , ⇤ 7 % for w ranging from 1 to 10. Furthermore , n is the number of delta intervals needed to 8 % contain all eigvalues and s is our guess at the Hausdorff dimension , 9 % which is a value between 0 and 1. 10 % This function will take our eigenvalues of our Laplacian and s , 11 % in order to find the best estimate the Hausdorff dimension of our spectrum . Given the 12 % column vector of this function , we will then determine whether the values 13 % are increasing or decreasing down the column . Increasing values 14 % correspond to a Hausdorff dimension of our spectrum to be greater than 15 % our imputed s value , and decreasing values correspond to a lower 16 % Hausdorff dimension than s . For values near the Hausdorff dimension of 17 % the spectrum , it will be more unclear whether the values increase or 18 % decrease down the column . 19 20 function [ nds ]=ndsTable( EIG , s ) 21 22 eigarray = cell (1 , 10) ; 23 % w is the part of our delta ( where delta = 1/(2ˆw) ) . 24 for w =1:10 25 % We are partitioning our interval [0 ,13] into partitions of length 1/(2ˆw) . 26 I =0:(1/(2ˆw)):13; 27 28 % We start off with no eigenvalues in a given interval and will 29 % count how many are in each partition . We will 30 % find how many eigenvalues lie within each 31 % of the intervals [0 , 1/(2ˆw) ) , (1/(2ˆw) , 2/(2ˆw) ) , 32 % [2/(2ˆw) , 3/(2ˆw) ) , ... etc . 33 Numbereigs =0 ; 34 35 % We prepare a row vector with the same number of entries as the number ON THE SPECTRUM OF THE PENROSE LAPLACIAN 27

36 % of intervals . 37 NMB = zeros (1 , (length( I ) 1)) ; 38 39 % We denote each interval by the last value not included in that partition 40 % ( i . e . the interval [0 , 1/(2ˆw) ) would be denoted by 1/(2ˆw) . 41 for j =2: length( I ) 42 43 for k =1:length(EIG) 44 45 % Here we find the number of eigenvalues in each interval . 46 if EIG( k ) < I ( j )&&I ( j 1) <= abs(EIG( k )) 47 % Counts this number of eigenvalues . 48 Numbereigs = Numbereigs +1; 49 end 50 end 51 52 NMB (1 ,j 1) = Numbereigs ; 53 Numbereigs =0 ; 54 55 end 56 % This is a 10x1 array where each entry is a vector of the length of 57 % the number of partitions for each delta . 58 eigarray 1,w = NMB ; { } 59 end 60 61 62 deltacovers = zeros (1 , length( eigarray)); 63 for w =1:length( eigarray) 64 % This counts the number of delta covers that are 65 % needed to cover ( or contain) all of the eigenvalues . This 66 % is going to be the number of intervals that contain at 67 % least one eigenvalue . 68 numdcover =0; 69 70 INT = eigarray 1,w ; { } 71 for m =1:length(INT) 72 % If the the mth term in the INT row vector is not zero , 73 if INT(m)˜=0 74 % then we increase the number of delta covers by one . 75 numdcover = numdcover +1; 76 end 77 end 78 % This is a 10x1 vector that lists the number of delta covers needed when delta is 1/(2ˆw) 79 % for w ranging from 1 to 10. 80 deltacovers (1 ,w)=numdcover ; 81 end 82 83 nds = zeros( length( deltacovers),1); 84 for w =1:length( deltacovers) 85 % These are the number of delta covers needed to contain all eigenvalues . 86 dc = deltacovers (1 ,w); 87 % This computes n deltaˆ s . ⇤ 88 tablevalue = dc ((1/(2ˆw))ˆs ); ⇤ 89 % This is the column vector for s . 90 nds(w,1) = tablevalue ; 91 end 92 93 end 28 M.DAIRYKO,C.HOFFMAN,J.PATTYSON,ANDH.PECK

References [1] M. Baake, U. Grimm, and R. V. Moody. What is Aperiodic Order.2002. [2] A. J. Chorin. Numerical estimates of Hausdor↵dimension. J. Comput. Phys.,46(3):390–396, 1982. [3] F. R. K. Chung. Spectral graph theory,volume92ofCBMS Regional Conference Series in Mathematics.PublishedfortheConferenceBoardoftheMathematicalSciences,Washington, DC, 1997. [4] D. Damanik, M. Embree, and A. Gorodetski. Spectral properties of schr¨odingeroperators arising in the study of quasicrystals. arXiv : 1210.5753. [5] N. G. de Bruijn. Algebraic theory of Penrose’s nonperiodic tilings of the plane. I, II. Nederl. Akad. Wetensch. Indag. Math.,43(1):39–52,53–66,1981. [6] K. Falconer. Hausdor↵Measure and Dimension, pages 27–38. John Wiley & Sons, Ltd, 2005. [7] N. P. Frank. A primer of substitution tilings of the euclidean plane. Expositiones Mathemat- icae,26(4):295–326,2008. [8] M. Gardner. Penrose tiles to trapdoor ciphers.MAASpectrum.MathematicalAssociation of America, Washington, DC, 1997. lotsand the return of Dr. Matrix, Revised reprint of the 1989 original. [9] B. Gr¨unbaum and G. C. Shephard. Tilings and patterns.ASeriesofBooksintheMathe- matical Sciences. W. H. Freeman and Company, New York, 1989. An introduction. [10] L. Jiong-Sheng and Z. Xiao-Dong. A new upper bound for eigenvalues of the laplacian matrix of a graph, 1997. [11] M. Senechal. Quasicrystals and geometry.CambridgeUniversityPress,Cambridge,1995. [12] D. Shechtman, I. Blech, D. Gratias, and J. W. Cahn. Metallic phase with long-range orien- tational order and no translational symmetry. Phys. Rev. Lett.,53:1951–1953,Nov1984. [13] D. Spielman. Spectral graph theory. 2009.

Department of Mathematics, Iowa State University, 396 Carver Hall, Ames, IA 50011 E-mail address: [email protected]

Department of Mathematics and Statistics, Smith College, 44 College Lane, Northamp- ton, MA 01063 E-mail address: [email protected]

Department of Mathematical Sciences, University of Saint Joseph, 1678 Asylum Av- enue, West Hartford, CT 06117 E-mail address: [email protected]

Department of Mathematics, Millikin University, Decatur, IL 62522 E-mail address: [email protected]