Integer Relation Algorithms

Last year, I investigated polynomial continued fractions at some length. I found some pretty cool relationships; if you wanted to inscribe them on my grave, I wouldn't be upset - not that I'm planning to die. 

For many continued fractions that seem to converge to real values, I was not able to find separate finite closed-form expressions, but I'm ready to try again. My technique in the last post was to search through coefficients of Möbius transformations of famous mathematical constants for coincidences with convergent values of continued fractions. My technique in this post will be... Integer Relation Algorithms!

One of the simplest and oldest ones is called the Lenstra-Lenstra-Lovász algorithm, or LLL. Another famous one is the PSLQ algorithm, which seems better, but I'm going to start with LLL. Apparently, it's basically a combination of the Euclidean algorithm for finding greatest common divisors with the Gram-Schmidt orthogonalization process. I like both of those things! It seems that you can take a given real-valued constant, and construct from it a matrix that represents some unknown polynomial, perform the LLL algorithm on the matrix, and sometimes you get out integer coefficients for a polynomial which has the given constant as a root! Amazing! An algebraic number explainer. And there are some generalizations for finding expressions for a given constant where the polynomials have non-integer coefficients or even non-algebraic coefficients. That's what this post will be about. Starting with the integer coefficients.

...

Hm. I tried to express six mysterious constants from the PCF post as roots of quadratic polynomials with integer coefficients without luck. Let's do an example. Our constant r will be T3 from the PCF post, 1.1263572396234227708. We set up the following matrix for a quadratic polynomial:

[1, 0, 0, 10000 * (r ** 2)],
[0, 1, 0, 10000 * r],
[0, 0, 1, 10000],

and run LLL reduction on it. The first vector of the resulting basis will have four components. If the fourth component is nearly zero (or at least much smaller in magnitude than the other components?), then the first three components are likely our polynomial coefficients, defined up to a sign change.

But the first vector in the LLL reduced basis with that {r} is

[8, -17, 9, 13],

, and the corresponding quadratic polynomial

y = 8x^2 - 17x + 9

has a root nearby {r} at 

x = 9/8 = 1.125

, but not at {r}. Sad.

Let's try higher degree polynomials!

Let's start with a sanity check. The polynomial x^3 - 2x^2 + x + 2, which I just made up, has a single real-valued root at ~ -0.6956207695598. Let's see if we can recover the coefficients from the root.

Here's the matrix:

[1, 0, 0, 0, 10000 * (r ** 3)],
[0, 1, 0, 0, 10000 * (r ** 2)],
[0, 0, 1, 0, 10000 * r],
[0, 0, 0, 1, 10000],

.  I run LLL reduction on that and the first vector in the new basis that I get out is:

[1, -2, 1, 2, 0]

which has the desired coefficients. Radical. But it didn't work for T3 or any of the other constants I was testing.

I tried fourth degree polynomials and I got a match, but I'm pretty sure it's a false positive. The number {2 / (sqrt(pi) * e * erfc(1))} is pretty close to a root of 

y = 3x^4 - 5x^3 - 4x^2 - 9x - 2

, in particular the erf thing is about

2.6389674131942744

and the root is about

2.6389675142347912

.

The constant T1, {0.4084843294696858}, from the PCF post is moderately close to a root of 

x^4 - 2x^3 + 2x^2 - 3x + 1

and the constant T2, {0.8120409412226914}, is close to a root of 

x^5 - x^4 - 2x^3 - 1x^2 + x + 1

.

I've suddenly lost hope in this project. In the polynomial continued fraction post, the constants were all rational, quadratic, or non-algebraic. There weren't any third roots, for example. My old techniques were good enough to find quadratic constants, and while this technique might find third roots and higher, I doubt that PCFs produce third roots.

Also, I think there's something slightly wrong with my LLL implementation: when I get the coefficeints out, my coefficients match other sources, but the last number in my vector is always an integer and other sources have non-integer entries. So.... I don't think fixing it would change anything substantive above - clearly my code can find polynomials with nearby roots, but I'm a little sad that my code doesn't exactly match my references.

Might come back to this later with a generalization of LLL.

...

No comments:

Post a Comment