```
In [1]:
```import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns

In discrete mathematics a Graph is a set of *vertices* or *nodes* that are connected to each other by *edges* or *lines*. If those *edges* don't have directionality, the graph is said to be *undirected*. Graphs are used to model social and communications networks (Twitter, Facebook, Internet) as well as natural systems such as molecules.

A Complete Graph, $K_n$ on $n$ nodes has an edge that connects each node to every other node.

Here is $K_5$:

```
In [2]:
```import networkx as nx
K_5=nx.complete_graph(5)
nx.draw(K_5)

```
```

The Laplacian Matrix is a matrix that is extremely important in graph theory and numerical analysis. It is defined as $L=D-A$. Where $D$ is the degree matrix and $A$ is the adjecency matrix. For the purpose of this problem you don't need to understand the details of these matrices, although their definitions are relatively simple.

The degree matrix for $K_n$ is an $n \times n$ diagonal matrix with the value $n-1$ along the diagonal and zeros everywhere else. Write a function to compute the degree matrix for $K_n$ using NumPy.

```
In [23]:
```def complete_deg(n):
return (n-1)*np.identity(n, dtype=int)

```
In [24]:
```D = complete_deg(5)
assert D.shape==(5, 5)
assert D.dtype==np.dtype(int)
assert np.all(D.diagonal()==4*np.ones(5))
assert np.all(D-np.diag(D.diagonal())==np.zeros((5,5),dtype=int))

```
In [27]:
```def complete_adj(n):
return np.ones((n,n), dtype=int)-np.identity(n, dtype=int)

```
In [28]:
```A = complete_adj(5)
assert A.shape==(5,5)
assert A.dtype==np.dtype(int)
assert np.all(A+np.eye(5,dtype=int)==np.ones((5,5),dtype=int))

*spectrum* of the Laplacian *L* of $K_n$. What patterns do you notice as $n$ changes? Create a *conjecture* about the general Laplace *spectrum* of $K_n$.

```
In [48]:
```def L(n): return complete_deg(n)-complete_adj(n)
smalleig = np.empty((100,))
for n in np.arange(2,100):
lap = L(n)
eig = np.linalg.eigvals(lap)
np.append(smalleig, np.min(eig))
plt.plot(np.arange(100), smalleig)

```
Out[48]:
```

The smallest eigenvalues of all the laplacians of $K_n$ are equal to n, the order of the graph.

```
In [ ]:
```