tweaks to all chebyshev posts

This commit is contained in:
queue-miscreant 2025-06-28 16:59:51 -05:00
parent 869c35c1a4
commit e4aa0dd8d9
3 changed files with 134 additions and 111 deletions

View File

@ -9,7 +9,9 @@ date: "2021-08-18"
date-modified: "2025-06-17"
categories:
- geometry
- generating functions
- algebra
- python
---
<style>
@ -18,6 +20,10 @@ categories:
object-fit: contain;
height: 100%;
}
.figure-img.wide {
max-width: 768px;
}
</style>
```{python}
@ -53,7 +59,7 @@ When constructing a regular polygon, one wants a ratio between the length of a e
![
Regular triangle, square, and pentagons inscribed in a unit circle.
Note the right triangle formed by the apothem, half of an edge, and circumradius.
](./central_angle_figures.png)
](./central_angle_figures.png){.wide}
In a convex polygon, the total central angle is always one full turn, or 2π radians.
The central angle of a regular *n*-gon is ${2\pi \over n}$ radians,
@ -216,7 +222,7 @@ Markdown(tabulate(
for poly in [sympy.chebyshevu_poly(n - 1, z / 2) if n > 0 else sympy.sympify(0)]
],
headers=[
"n",
"*n*",
"$[x^n]B(x; z / 2) = U_{n - 1}(z / 2)$",
"Factored",
],
@ -227,8 +233,8 @@ Markdown(tabulate(
Evaluating the polynomials at $z / 2$ cancels the 2 in the denominator (and recurrence),
making these expressions much simpler.
This evaluation can also be interpreted intuitively by recalling from the previous diagram
we used *half* the length of a side.
This evaluation has an interpretation in terms of the previous diagram --
recall we used *half* the length of a side as a leg of the right triangle.
For a unit circumradius, the side length itself is then $2\sin( {\pi / n} )$.
To compensate for this doubling, the Chebyshev polynomial must be evaluated at half its normal argument.
@ -255,9 +261,9 @@ $$
According to how we derived this series, when $z = 2\cos(\theta)$, the roots of this polynomial
correspond to when $\sin(5\theta) / \sin(\theta) = 0$.
This relation itself is true when for $\theta = \pi / 5$, since $\sin(5 \pi / 5) = 0$.
This relation itself is true when $\theta = \pi / 5$, since $\sin(5 \pi / 5) = 0$.
One of the factors in terms must therefore be the minimal polynomial of $2\cos(\pi / 5 )$.
One of the factors must therefore be the minimal polynomial of $2\cos(\pi / 5 )$.
The former happens to be correct correct, since $2\cos( \pi / 5 ) = \varphi$, the golden ratio.
Note that the second factor is the first evaluated at -*z*.
@ -278,7 +284,7 @@ $$
Whichever is the minimal polynomial (the former), it is a cubic, and constructing
a regular heptagon is equivalent to solving it for *z*.
But there are no (nondegenerate) cubics that one can produce via compass and straightedge,
and the construction fails.
and all constructions necessarily fail.
#### Decagons
@ -341,7 +347,7 @@ Markdown(tabulate(
n,
"$" + sympy.latex(poly) + "$",
k,
int(poly.coeff(z, n - k)), # type: ignore
int(poly.coeff(z, k)), # type: ignore
]
for n, k in zip(range(4, 8), range(3, -1, -1))
for poly in [sympy.chebyshevu_poly(n - 1, z / 2) if n > 0 else sympy.sympify(0)]
@ -350,15 +356,15 @@ Markdown(tabulate(
"*n*",
"$[x^n]B(x; z / 2)$",
"*k*",
"$[z^{n - k}][x^n]B(x; z / 2)$",
"$[z^{k}][x^n]B(x; z / 2)$",
],
numalign="left",
stralign="left",
))
```
The last column looks like an alternating row of Pascal's triangle, and can be expressed
as ${n - k \choose k}(-1)^k$.
The last column looks like an alternating row of Pascal's triangle
(namely, ${n - \lfloor {k / 2} \rfloor - 1 \choose k}(-1)^k$).
This resemblance can be made more apparent by listing the coefficients of the polynomials in a table.
```{python}
@ -389,10 +395,10 @@ Markdown(tabulate(
*[
0 if k % 2 == 1
else rainbow_class(
comb(n - (k // 2) - 1, nm - (k // 2)) * (-1)**(k // 2),
comb(n - (k // 2) - 1, k // 2) * (-1)**(k // 2),
n - (k // 2) - 1,
)
for nm, k in zip(range(n), range(10))
for k in range(n)
]
]
for n in range(1, 11)
@ -433,12 +439,13 @@ $$
= x^{n+1} (1 + x^2)^{-n - 1}
\\
&= x^{n+1} \sum_{k=0}^\infty {-n - 1 \choose k}(x^2)^k
\quad \text{Binomial theorem}
\end{align*}
$$
While the use of the binomial theorem in $1 + x^2$ is more than enough to justify
While the use of the binomial theorem is more than enough to justify
the appearance of Pascal's triangle (along with explaining the 0's),
I will press onward until it becomes excruciatingly obvious.
I'll simplify further to explicitly show the alternating signs.
$$
\begin{align*}
@ -507,7 +514,7 @@ Conveniently, $U_{2 -\ 1}(z / 2) = z$ is also a factor, and 2 is likewise a fact
This pattern is present throughout the table; $n = 6$ contains factors for
$n = 2 \text{ and } 3$ and the prime numbers have no smaller factors.
If this observation is legitimate, call the new term $f_n(z)$
If this observation is legitimate, call the newest term $f_n(z)$
and denote $p_n(z) = U_{n -\ 1}( z / 2 )$.
@ -711,9 +718,9 @@ Markdown(tabulate(
)
]
] + [[
"",
"-",
"[OEIS A055034](http://oeis.org/A055034)",
"",
"-",
"[OEIS A187360](http://oeis.org/A187360)",
]],
headers=[

View File

@ -8,11 +8,24 @@ format:
date: "2021-08-19"
date-modified: "2025-06-24"
categories:
- geometry
- algebra
- linear algebra
- generating functions
- graph theory
- python
---
<style>
.figure-img {
max-width: 512px;
object-fit: contain;
height: 100%;
}
.figure-img.wide {
max-width: 768px;
}
</style>
In the [previous post](../1), I tied the geometry regular polygons to a sequence of polynomials
though some clever algebraic manipulation.
@ -36,17 +49,18 @@ Only examining these figures by their connectedness is precisely the kind of thi
*graph theory* deals with.
"Graph" is a potentially confusing term, since it has nothing to do with "graphs of functions",
but the name is supposed to evoke the fact that they are "drawings".
For the graphs we're interested, there's some additional terminology:
For the graphs we're interested in, there's some additional terminology:
- Vertices themselves are sometimes instead called *nodes*
- Edge in the graph have no direction associated to them, so the graph is called *undirected*.
- Additionally, these graphs are *planar* since the nodes can be arranged
so that no edges appear to intersect.
- The lower-right figure in the above diagram has intersecting edges,
- Edge in the graph have no direction in how they connect nodes, so the graph is called *undirected*.
- If the nodes in a graph can be arranged so that no edges appear to intersect,
the graph is *planar*.
- For example, lower-right figure in the above diagram appears to have intersecting edges,
but the nodes can be rearranged to look like the other graphs, so it is planar.
Graphs themselves typically come in families.
If the graph is a simple loop, it is called a [*cycle graph*](https://en.wikipedia.org/wiki/Cycle_graph).
It's easiest to study families of graphs, rather than isolated examples.
If the graph is a simple loop of nodes, it is called a
[*cycle graph*](https://en.wikipedia.org/wiki/Cycle_graph).
They are denoted by $C_n$, where *n* is the number of nodes.
In a cycle graph, since all nodes are identical to each other (they all connect to two edges)
and all edges are identical to each other (they connect identical vertices),
@ -67,8 +81,12 @@ In the case of an undirected graph, these are unordered pairs.
While such a list is convenient, it doesn't convey a lot of information about the graph
besides the number of edges.
Alternatively, these pairs can also be interpreted as addresses in a matrix,
Alternatively, these pairs can also be interpreted as addresses in a square matrix,
called an *adjacency matrix*.
Each column and row correspond to a specific node, and an entry is 1
when the nodes of a row and column of are joined by an edge (and 0 otherwise).
For undirected graphs, these matrices are symmetric, since it is possible
to traverse an edge in either direction.
$$
\begin{align*}
@ -113,13 +131,10 @@ $$
\end{align*}
$$
Each adjacency matrix is square, where each column and row refer to a specific node.
An entry is 1 when the nodes corresponding to the row and column of its address are joined by an edge (and zero otherwise).
For undirected graphs, these matrices are symmetric, since it is possible to traverse an edge in either direction.
Swapping the labels on two nodes is as simple as exchanging two rows and two columns.
Just one of these swaps would flip the sign of the determinant of the adjacency matrix.
However, since they occur in pairs, the determinant is invariant of the labelling (equally, a graph invariant).
Swapping the labels on two nodes is will exchange two rows and two columns
of the adjacency matrix.
Just one of these swaps would flip the sign of its determinant, but since they occur in pairs,
the determinant is invariant of the labelling (equally, a graph invariant).
Prismatic Recurrence
@ -292,7 +307,7 @@ The various $P_n$ are in fact the adjacency matrices of a path on *n* nodes.
![
Example path graphs of orders 2, 3, and 4
](./path_graphs.png)
](./path_graphs.png){.wide}
$$
\begin{align*}
@ -409,20 +424,20 @@ Therefore, the sequence of polynomials $p_n(\lambda)$ is:
$$
\begin{gather*}
p_0(\lambda) &= && 1
p_0(\lambda) &=&& && 1
\\
p_1(\lambda) &= && \lambda
p_1(\lambda) &=&& && \lambda
\\
p_2(\lambda) &= \lambda \lambda - 1
p_2(\lambda) &=&& \lambda \lambda - 1
&=& \lambda^2 - 1
\\
p_3(\lambda) &= \lambda (\lambda^2 - 1) - \lambda
p_3(\lambda) &=&& \lambda (\lambda^2 - 1) - \lambda
&=& \lambda(\lambda^2 - 2)
\\
p_4(\lambda) &= \lambda (\lambda(\lambda^2 - 2)) - (\lambda^2 - 1)
p_4(\lambda) &=&& \lambda (\lambda(\lambda^2 - 2)) - (\lambda^2 - 1)
&=& \lambda^4 - 3\lambda^2 + 1
\\
\vdots & \vdots && \vdots
\vdots & && \vdots && \vdots
\end{gather*}
$$
@ -442,7 +457,7 @@ $$
P(x; \lambda) = {B(x; \lambda / 2) \over x} = {1 \over 1 - \lambda x +\ x^2}
$$
Discarding the initial $c_0$ and $c_1$ by setting them to 0[^2], the generating function is
Discarding the initial $c_0$ and $c_1$ by setting them to zero[^2], the generating function is
[^2]: It's a good idea to ask why we can do this.
Try examining $c_2$ and $c_3$.
@ -450,7 +465,7 @@ Discarding the initial $c_0$ and $c_1$ by setting them to 0[^2], the generating
$$
\begin{align*}
c_{n+2}(\lambda) &= \lambda p_{n+1}(\lambda) - 2(p_n(\lambda) + 1)
\\ \\
\\[14pt]
{C(x; \lambda) - c_0(\lambda) - x c_1(\lambda) \over x^2}
&= \lambda \left( {P(x; \lambda) - 1 \over x} \right)
- 2\left( P(x; \lambda) + {1 \over 1 - x} \right)
@ -465,7 +480,7 @@ $$
+ 2 x^3 + x^2 \lambda^2 - 4 x^2
\\
&= x^2 (\lambda - 2) (x^2 - \lambda x - x + \lambda + 2)
\\ \\
\\[14pt]
C(x; \lambda) &= x^2 (\lambda - 2)
{(x^2 - (\lambda + 1) x + \lambda + 2)
\over (1 - x)(1 - \lambda x + x^2)}
@ -507,36 +522,18 @@ Paths are degenerate trees, but we can make them slightly more interesting by in
![
Nondegenerate tree graphs based on 3-, 4-, 5-, and 6-paths
](./tree_graphs.png)
](./tree_graphs.png){.wide}
In this notation, the subscripts denote the consituent paths if the "added" node and the
one it is connected to are both removed.
It's easy to see that $T_{a,b} \cong T_{a,b}$, since this just swaps the arms.
Also, $T_{a, 0} \cong T_{0, a} \cong P_{a + 2}$.
Let's try dissecting some of the larger trees.
The adjacency matrices for $T_{1,3}$ and $T_{2,2}$ are:
$$
\begin{align*}
T_{1,1} := \begin{matrix}[
(0, 1), \\
(1, 2), \\
(1, 3)
]\end{matrix} & \cong
\begin{pmatrix}
0 & 1 & 0 & 0 \\
1 & 0 & 1 & 1 \\
0 & 1 & 0 & 0 \\
0 & 1 & 0 & 0
\end{pmatrix}
\\ \\
T_{1,2} := \begin{matrix} [
(0, 1), \\
(1, 2), \\
(2, 3), \\
(1, 4)
]\end{matrix} & \cong
\begin{pmatrix}
0 & 1 & 0 & 0 & 0 \\
1 & 0 & 1 & 0 & 1 \\
0 & 1 & 0 & 1 & 0 \\
0 & 0 & 1 & 0 & 0 \\
0 & 1 & 0 & 0 & 0
\end{pmatrix}
\\ \\
T_{1,3} := \begin{matrix}[
(0, 1), \\
(1, 2), \\
@ -571,13 +568,7 @@ $$
\end{align*}
$$
The subscripts denote the consituent paths if the "added" node and the
one it is connected to are both removed.
It's easy to see that $T_{a,b} \cong T_{a,b}$, since this just swaps the arms.
Also, $T_{a, 0} \cong T_{0, a} \cong P_{a + 2}$.
Let's try dissecting one of the larger trees.
Starting with $T_{1,3}$, its characteristic polynomial is:
$$
\begin{align*}
@ -593,7 +584,7 @@ $$
\end{matrix}
\right |
\\
&= (-1)^{6 + 6} \lambda m_{6,6} + (-1)^{2 + 6} (-1) m_{2,6}
&= \lambda (-1)^{6 + 6} m_{6,6} + (-1) (-1)^{2 + 6} m_{2,6}
\end{align*}
$$
@ -614,7 +605,7 @@ $$
\end{matrix}
\right |
\\
&= (-1)^{5 + 2} (-1)
&= (-1) (-1)^{5 + 2}
\left |
\begin{matrix}
\lambda & 0 & 0 & 0 \\
@ -645,7 +636,7 @@ $$
\end{matrix}
\right |
\\
&= (-1)^{6 + 6} \lambda m_{6,6} + (-1)^{3 + 6} (-1) m_{3,6}
&= (-1)^{6 + 6} \lambda m_{6,6} + (-1) (-1)^{3 + 6} m_{3,6}
\\ \\
m_{3,6}
&= \left |
@ -658,7 +649,7 @@ $$
\end{matrix}
\right |
\\
&= (-1)^{5 + 3} (-1)
&= (-1) (-1)^{5 + 3}
\left |
\begin{matrix}
\lambda & -1 & 0 & 0 \\
@ -674,7 +665,7 @@ Here we get something similar: a combination of $p_5(\lambda)$ and an extra term
In this case, the final determinant can be written as $p_2(\lambda)^2$.
Now it can be observed that the extra terms are the polynomials corresponding
to $P_a$ and $P_b$ ($p_1(\lambda) = \lambda$, after all).
to $P_a$ and $P_b$ (recall that $p_1(\lambda) = \lambda$, after all).
In both cases, the second expansion was necessary to get rid of the symmetric -1
entries added to the matrix.
The sign of this extra term is always negative, since the -1 entries cancel
@ -683,10 +674,10 @@ The sign of this extra term is always negative, since the -1 entries cancel
Therefore, the expression for these characteristic polynomials should be:
$$
t_{a,b}(z) = z \cdot p_{a + b + 1}(z) - p_a(z) p_b(z)
t_{a,b}(\lambda) = \lambda p_{a + b + 1}(\lambda) - p_a(z) p_b(\lambda)
$$
Note that if *b* is 0, this coincides with the recurrence for $p_n(z)$.
Note that if *b* is 0, this agrees with the recurrence for $p_n(\lambda)$.
### Examining Small Trees
@ -694,13 +685,14 @@ Note that if *b* is 0, this coincides with the recurrence for $p_n(z)$.
Due to the subscript of the first term of the RHS, this recurrence is harder to turn into
a generating function.
Instead, let's look at a few smaller trees to see what kind of polynomials they build.
We'll also change the variable of the polynomial to *z* for simplicity.
The first tree of note is $T_{1,1}$.
This has characteristic polynomial
$$
\begin{align*}
t_{1,1}(z) &= z \cdot p_{3} - p_1(z) p_1(z)
t_{1,1}(z) &= z p_{3}(z) - p_1(z) p_1(z)
\\
&= z (z^3 - z^2) - z^2
\\
@ -713,9 +705,9 @@ By symmetry, these are the same graph, so we have characteristic polynomial
$$
\begin{align*}
t_{1,2}(z) &= z \cdot p_{4} - p_1(z) p_2(z)
t_{1,2}(z) &= z p_{4}(z) - p_1(z) p_2(z)
\\
&= z (z^4 - 3z^2 + 2) - z (z^2 - 1)
&= z (z^4 - 3z^2 + 2) - z \cdot (z^2 - 1)
\\
&= z (z^4 - 4z^2 + 2)
\end{align*}
@ -725,13 +717,13 @@ Finally, let's look at $T_{1,3}$ and $T_{2,2}$, the trees we used to derive the
$$
\begin{align*}
t_{1,3}(z) &= z \cdot p_{5} - p_1(z) p_3(z)
t_{1,3}(z) &= z p_{5}(z) - p_1(z) p_3(z)
\\
&= z (z^5 - 4z^3 + 3z) - z \cdot (z^3 - 2z)
\\
&= z^2 (z^4 - 5z^2 + 5)
\\[10pt]
t_{2,2}(z) &= z \cdot p_{5} - p_2(z) p_2(z)
t_{2,2}(z) &= z p_{5}(z) - p_2(z) p_2(z)
\\
&= z (z^5 - 4z^3 + 3z) - ( z^2 - 1 )^2
\\
@ -746,10 +738,8 @@ From the last post, we saw that $z^4 - 5z^2 + 5$ is a factor of $p_9(z)$, from w
This is also true for:
- In $t_{1,2}$,
- $z^4 - 4z^2 + 2$, $p_7(z)$, and $2 \cos(\pi / 8)$, respectively
- In $t_{2,2}$,
- $z^4 - 4z^2 + 1$, $p_11(z)$, and $2 \cos(\pi / 12)$, respectively
- In $t_{1,2}$, the factor $z^4 - 4z^2 + 2$, $p_7(z)$, and $2 \cos(\pi / 8)$, respectively
- In $t_{2,2}$, the factor $z^4 - 4z^2 + 1$, $p_11(z)$, and $2 \cos(\pi / 12)$, respectively
We established that the subscripts of the tree (*a* and *b*) indicate constituent *n*-paths,
which we know to correspond to *n+1*-gons.

View File

@ -9,8 +9,21 @@ date: "2021-08-27"
date-modified: "2025-06-25"
categories:
- algebra
- generating functions
---
<style>
.figure-img {
max-width: 512px;
object-fit: contain;
height: 100%;
}
.figure-img.wide {
max-width: 768px;
}
</style>
In the [previous](../1) [two](../2) posts, I made clear the ties between the
Chebyshev polynomials, constructibile polygons, and graph theory.
@ -90,20 +103,28 @@ Using a generic quadratic polynomial $p_2(z) = a z^2 + b z + c$, the second and
$$
\begin{align*}
1 \cdot p_2 &= \int_{-1}^1 (a z^2 + b z + c) dz
= \left[
{a z^3 \over 3} + c z
\right]_{-1}^1
= {2 \over 3}a + 2c = 0 \implies a = -3c
\langle 1, p_2 \rangle
&= \int_{-1}^1 (a z^2 + b z + c) dz
= \left[
{a z^3 \over 3} + c z
\right]_{-1}^1
= {2 \over 3}a + 2c = 0
\\
z \cdot p_2 &= \int_{-1}^1 (a z^3 + b z^2 + c z) dz
&\implies a = -3c
\\[14pt]
\langle z, p_2 \rangle
&= \int_{-1}^1 (a z^3 + b z^2 + c z) dz
= \left[
{b z^3 \over 3}
\right]_{-1}^1
= {2 \over 3}b = 0 \implies b = 0
= {2 \over 3}b = 0
\\
p_2 \cdot p_2 &= \int_{-1}^1 (a z^2 + c)^2 dz
= \int_{-1}^1 (a^2 z^4 + 2ac z^2 + c^2) dz = {2 \over 5}
&\implies b = 0
\\[14pt]
\langle p_2, p_2 \rangle
&= \int_{-1}^1 (a z^2 + c)^2 dz
= \int_{-1}^1 (a^2 z^4 + 2ac z^2 + c^2) dz
= {2 \over 5}
\end{align*}
$$
@ -113,7 +134,7 @@ The final integral, though not challenging, requires some additional steps to re
$$
\begin{align*}
\int_{-1}^1 (a^2 z^4 + 2ac z^2 + c^2) dz
\langle p_2, p_2 \rangle
&= \left[
a^2 {z^5 \over 5} + ( 2ac ) {z^3 \over 3} + c^2 z
\right]_{-1}^1
@ -145,15 +166,20 @@ This family is called the
named after Adrien-Marie Legendre.
Intriguingly, only a few surviving portraits of this mathematician are known, one of which is a fairly humorous caricature.
::: {.row .centered}
<a title="Julien-Léopold Boilly, Public domain, via Wikimedia Commons" href="https://commons.wikimedia.org/wiki/File:Legendre.jpg">
<img width="256" alt="Legendre" src="https://upload.wikimedia.org/wikipedia/commons/0/03/Legendre.jpg?20210711144200">
</a>
<!-- TODO: better wikimedia imports -->
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<a title="Julien-Léopold Boilly, Public domain, via Wikimedia Commons" href="https://commons.wikimedia.org/wiki/File:Legendre.jpg">
<img class="img-fluid figure-img" alt="Legendre" src="https://upload.wikimedia.org/wikipedia/commons/0/03/Legendre.jpg?20210711144200">
</a>
Public domain image retrieved from Wikimedia
:::
<figcaption>
Public domain image retrieved from Wikimedia
</figcaption>
</figure>
</div>
Such a family is useful when doing numeric computations involving integrals.
An orthogonal family of polynomials is useful when doing numeric computations involving integrals.
Expressing a (scaled and shifted) general polynomial in an orthogonal basis not only
simplifies the math, but can prevent errors from accumulating.
These polynomials also have applications in electrical engineering.