287 lines
8.1 KiB
Plaintext
287 lines
8.1 KiB
Plaintext
---
|
|
title: "Stereography, Algebraic, and Hyperspheres"
|
|
description: |
|
|
TODO
|
|
format:
|
|
html:
|
|
html-math-method: katex
|
|
jupyter: python3
|
|
date: "2026-09-11"
|
|
categories:
|
|
- algebra
|
|
draft: true
|
|
---
|
|
|
|
```{python}
|
|
#| echo: false
|
|
|
|
import sympy
|
|
from IPython.display import Markdown
|
|
from tabulate import tabulate
|
|
|
|
x, x1, z = sympy.symbols("x x_1 z")
|
|
```
|
|
|
|
The Algebra Part
|
|
----------------
|
|
|
|
Though I alluded to the ability of the stereoscopic circle to generate the Chebyshev polynomials,
|
|
there is an important caveat which differs their use from typical spheres.
|
|
|
|
To review, the stereoscopic definition of the circle is:
|
|
|
|
$$
|
|
\begin{align*}
|
|
o_1(t) &= {1 + it \over 1 - it}
|
|
\\
|
|
&= c_1 + i s_1
|
|
= {1 - t^2 \over 1 + t^2} + i{2t \over 1 + t^2}
|
|
\end{align*}
|
|
$$
|
|
|
|
The second line decomposes the first into real and nonreal terms, which are each rational functions.
|
|
We can further define terms for the numerator and denominator:
|
|
|
|
$$
|
|
\begin{gather*}
|
|
x_1 = 1 - t^2
|
|
\qquad
|
|
y_1 = 2t
|
|
\qquad
|
|
d = 1 + t^2 = 2 - x_1
|
|
\\
|
|
o_1 = {z_1 \over d} = {x_1 \over d} + i{y_1 \over d}
|
|
\end{gather*}
|
|
$$
|
|
|
|
We have a recurrence relation for *o*, but it does not obey same relations as *z*:
|
|
|
|
$$
|
|
\begin{align*}
|
|
o_{n+2} &= 2c_1 o_{n+1} - o_n
|
|
\\
|
|
z_{n+2} &\stackrel{✗}{=} 2x_1 z_{n+1} - z_n
|
|
\end{align*}
|
|
$$
|
|
|
|
Fortunately, the correction is simple.
|
|
The denominator term $d^{n+2}$ can be multiplied through the top equation to produce:
|
|
|
|
$$
|
|
z_{n+2} = 2x_1 z_{n+1} - z_n d^2
|
|
$$
|
|
|
|
The only term that changes is the term lagging two terms behind, so the generating function *Z* is:
|
|
|
|
$$
|
|
\begin{align*}
|
|
O(x; o_1)
|
|
&= {1 + x(o_1 - 2 c_1) \over 1 - 2 c_1 x + x^2}
|
|
\\[10pt]
|
|
Z(x; z_1)
|
|
&= {1 + x(z_1 - 2 x_1) \over 1 - 2 x_1 x + \textcolor{red}{d^2} x^2}
|
|
\end{align*}
|
|
$$
|
|
|
|
We can express *d* in terms of $x_1$, so the terms of the series, like the one for *F*, have
|
|
|
|
- A real component which is a polynomial in $x_1$ (cf. $c_1$)
|
|
- An imaginary component which is the product of $y_1$ (cf. $s_1$) and a polynomial in $x_1$
|
|
|
|
$$
|
|
Z(x; z_1) = X(x; x_1) + i y_1 Y(x; x_1)
|
|
$$
|
|
|
|
Surprisingly, the polynomials in *Y* still factor cleanly,
|
|
like the [Chebyshev *U* polynomials](../../chebyshev/1/#tbl-chebyshevu).
|
|
|
|
```{python}
|
|
#| code-fold: true
|
|
#| label: tbl-newupolynomials
|
|
#| tbl-cap: "Table of numerator polynomials"
|
|
#| classes: plain
|
|
|
|
# cosine series
|
|
X = ( 1 - x1*x ) / ( 1 - 2*x1*x + (2 - x1)**2*x**2 )
|
|
# sine series
|
|
Y = x / ( 1 - 2*x1*x + (2 - x1)**2*x**2 )
|
|
|
|
def factor_sequence(polys, offset=0, symbol_name="p"):
|
|
ret = []
|
|
symbols = []
|
|
for i, poly in enumerate(polys):
|
|
new_poly = poly.copy()
|
|
old_factor = 1
|
|
for old, symbol in zip(ret, symbols):
|
|
q, r = sympy.div(new_poly, old)
|
|
if r == 0:
|
|
new_poly = q
|
|
old_factor *= symbol
|
|
|
|
if new_poly != 1:
|
|
ret.append(new_poly)
|
|
symbols.append(sympy.symbols(f"{symbol_name}_{i + offset}"))
|
|
|
|
yield poly, old_factor*new_poly.factor()
|
|
|
|
Markdown(tabulate(
|
|
[
|
|
[ n+1, "$" + sympy.latex(poly) + "$", sympy.Poly(unfactored, z).as_list() ]
|
|
for n, (unfactored, poly) in enumerate(
|
|
factor_sequence(
|
|
sorted(
|
|
[
|
|
i.subs(x,1).subs(x1, z).expand().factor()
|
|
for i in Y.series(x, n=11).args
|
|
][:-1],
|
|
key=lambda x: sympy.degree(x, z)
|
|
),
|
|
1
|
|
)
|
|
)
|
|
],
|
|
headers=[ "*n*", "$[x^n]Y(x; z) = p_n(z)$", "Coefficients (descending powers)" ],
|
|
numalign="left",
|
|
stralign="left",
|
|
))
|
|
```
|
|
|
|
|
|
Unfortunately, the sequence formed by the coefficients of the polynomials
|
|
does not appear in the OEIS.
|
|
Their factorizations appear to have the following traits:
|
|
|
|
- Like the Chebyshev *U* polynomials, they have "cyclotomic factoring" --
|
|
for the new term of index *n*, the factors can be separated into old factors
|
|
at indices of factors of *n* and new factors.
|
|
- If the index is even, then there is only one new monic, irreducible factor.
|
|
- If the index is odd, then there are two new irreducible factors
|
|
- If the index is prime or a prime power, the new factors are a monic and a non-monic
|
|
whose leading coefficient is that prime.
|
|
- Otherwise, the new factors are both monic.
|
|
|
|
The characterization of the leading terms of the new factor corresponds to
|
|
[OEIS A014963](https://oeis.org/A014963), which is related to cyclotomic polynomials.
|
|
|
|
|
|
### Similar Sequences
|
|
|
|
In fact, for a polynomial $q(z)$, it seems to be the case that the terms of
|
|
|
|
$$
|
|
Y(x; z) = {x \over 1 - 2 z x + q(z) x^2}
|
|
$$
|
|
|
|
tend to factor similarly.
|
|
Naturally, the *U* polynomials are the choice where *q = 1* and the new polynomials
|
|
are the choice when $q = (2 - z)^2$.
|
|
One can also write down a series for $z^n - 1$, which factor as the cyclotomic polynomials,
|
|
and also end up being generated by an order-2 recurrence.
|
|
|
|
$$
|
|
\begin{align*}
|
|
N(x; z) &= \sum_n (z^n - 1)x^n = {x(z - 1) \over 1 - (z + 1)x + zx^2}
|
|
\\
|
|
&= \sum_n \left ( x^n \prod_{d | n} \Phi_d(z) \right )
|
|
\end{align*}
|
|
$$
|
|
|
|
Actually, this shouldn't be terribly surprising.
|
|
For example, a simple result from generating functions tells us
|
|
that a series for the integers is:
|
|
|
|
$$
|
|
\begin{align*}
|
|
F(z) &= {1 \over 1 - z}
|
|
= \sum_n z^n
|
|
&& \text{All coefficients equal 1}
|
|
\\
|
|
F'(z) &= {1 \over ( 1 - z )^2 }
|
|
= \sum_n n z^{n - 1}
|
|
&& \text{Integers}
|
|
\\
|
|
z F'(z) &= {z \over 1 - 2z + z^2}
|
|
= \sum_n n z^n
|
|
&& \text{Integers matching powers}
|
|
\end{align*}
|
|
$$
|
|
|
|
The denominator being a quadratic polynomial means that the series terms *n*,
|
|
the integers, obey an order-2 recurrence, and factor in a similar way.
|
|
Obviously, the integers factor into primes by the fundamental theorem of arithmetic.
|
|
There's still an important distinction to be made about the polynomials, though.
|
|
Factoring a composite like 6 into 2 and 3 leaves an empty product behind, but
|
|
for polynomials, nonprime indices end up accumulate an "extra" factor.
|
|
|
|
Additionally (or rather, probably because of this), *all* factors of the index correspond
|
|
to a factor in the factorization, rather than pairing off as in integers.
|
|
For example, factoring 12 once gives either 3 and 4 or 2 and 6,
|
|
but the polynomial at index 12 includes polynomials at indices of all factors: 2, 3, 4, 6, and 12.
|
|
|
|
### Higher-order Recurrences
|
|
|
|
The integers also obey an order-3 recurrence:
|
|
|
|
$$
|
|
\begin{align*}
|
|
F(x) &= {x \over 1 - 2x + x^2} = {x(1 - x) \over (1 - 2x + x^2)(1 - x)}
|
|
\\
|
|
&= {x - x^2 \over 1 - 3x + 3x^2 - x^3}
|
|
\\[10pt]
|
|
&\equiv a_{n+3} = 3a_{n+2} - 3a_{n+1} + a_n
|
|
\end{align*}
|
|
$$
|
|
|
|
Another sequence that obeys similar factoring rules rules to the integers is
|
|
|
|
$$
|
|
G(x; z) = {x - x^2 \over 1 - z x + z x^2 - x^3}
|
|
$$
|
|
|
|
```{python}
|
|
#| code-fold: true
|
|
#| tbl-cap: "Table of G polynomials"
|
|
#| classes: plain
|
|
|
|
G = (x - x**2) / ( 1 - z*x + z*x**2 - x**3 )
|
|
|
|
Markdown(tabulate(
|
|
[
|
|
[ n+1, "$" + sympy.latex(poly) + "$", sympy.Poly(unfactored, z).as_list() ]
|
|
for n, (unfactored, poly) in enumerate(
|
|
factor_sequence(
|
|
sorted(
|
|
[
|
|
i.subs(x,1).subs(x1, z).expand().factor()
|
|
for i in G.series(x, n=11).args
|
|
][:-1],
|
|
key=lambda x: sympy.degree(x, z)
|
|
),
|
|
1,
|
|
"o"
|
|
)
|
|
)
|
|
],
|
|
headers=[ "*n*", "$[x^n]G(x; z) = o_n(z)$", "Coefficients (descending powers)" ],
|
|
numalign="left",
|
|
stralign="left",
|
|
))
|
|
```
|
|
|
|
There are a couple of things to note here.
|
|
Some of the factor polynomials here are the
|
|
[minimal polynomials of cosine](/posts/math/chebyshev/1/#tbl-cosinepolynomials)
|
|
|
|
The row where *n* = 5 is somewhat interesting.
|
|
Namely, $x^2 - x - 1$ has $\varphi$ (the golden ratio) as a root.
|
|
The other polynomial, $x^2 - 3x + 1$, has $\varphi^2$ as a root.
|
|
This seems to indicate that the other polynomial has roots which are
|
|
an algebraic expression of the other's, but I haven't bothered attempting a proof of this.
|
|
|
|
Unfortunately, peppering polynomials into the denominator and hoping that the same factorization
|
|
occurs isn't as easy as in the order-2 recurrence.
|
|
In fact, higher-order recurrences become more and more restrictive as $x^\bullet$ terms are added to
|
|
the numerator and denominator.
|
|
If there is a rule to determine what relation must be obeyed between the coefficients
|
|
for factorization to occur, it is not obvious, especially as the order grows.
|