Buscando la mejor manera de encontrar triples pitagóricos donde B−A=±1B−A=±1B-A=\pm1.

triples pitagóricos donde A B = ± 1 son algunos de los más raros; el 19 t h tiene términos A , B , C en los cuatrillones. Encontré una fórmula en un libro, "Triángulos de Pitágoras" que los genera en secuencia comenzando con un triple semilla T 1 = ( 3 , 4 , 5 ) : A = 3 A + 2 C + 1 B = 3 A + 2 C + 2 C = 4 A + 3 C + 2 Generará T 2 = ( 20 , 21 , 29 ) T 3 = ( 119 , 120 , 169 ) T 4 = ( 697 , 696 , 985 ) etcétera. Diecinueve iteraciones te da la primera 19 triplica y eso es genial, pero desarrollé una fórmula que usa menos cómputo hasta que llegas al norte t h triple que desea ver. Genera los parámetros ( metro , norte ) para alimentar la fórmula de Euclides:

A = metro 2 norte 2 B = 2 metro norte C = metro 2 + norte 2

la fórmula es metro X + 1 = 2 metro X + norte X norte X + 1 = metro X y genera los siguientes pares con una semilla: PAG 0 = ( 1 , 0 ) .

PAG 1 = ( 2 , 1 ) PAG 2 = ( 5 , 2 ) PAG 3 = ( 12 , 5 ) PAG 4 = ( 29 , 12 ) PAG 5 = ( 70 , 29 ) PAG 6 = ( 169 , 70 ) . . .

Me gustaría poder generar el 6 t h o el 1000 t h emparejar directamente sin generar 1 -a través de- 5 o 1 -a través de- 999 para llegar allí, pero no he podido encontrar ninguna forma de generar un par individual directamente. Yo he tratado 2 = 2 1 , 5 = 2 2 + 2 1 , 12 = 2 3 + 2 2 , h metro metro , 29 = 2 4 + 2 3 + 2 2 + 2 1 + 2 0 y otras cosas como factores de 2 , 5 , 12 , 29... y me quedo sin ideas.

¿Es posible generar un X t h par de miembros usando solo X como un número de entrada o, por la naturaleza de esta secuencia, ¿es necesario generarlos todos en orden hasta llegar al par deseado?

Alguien dijo que mi fórmula no funciona pero aquí está funcionando en una hoja de cálculo.

ingrese la descripción de la imagen aquí

Tu propio trabajo no genera la T norte , y T 0 Está Mal.
ternas pitagóricas de la forma ( a , a + 1 , C ) son raros porque los a -valor de la norte -th más pequeño de tal triple crece exponencialmente, es decir, tan rápido como ( 1 + 2 ) norte . Entre triples pitagóricos ( a , b , C ) con 0 a b metro , solo puede esperar alrededor en ( metro ) en ( 1 + 2 ) triples de la forma ( a , a + 1 , C ) .
Aquí puede encontrar un algoritmo para el cálculo eficiente de los números de Fibonacci/Lucas mediante el cuadrado repetido: math.stackexchange.com/a/2081266/44121 . En su caso, debe generar números de Pell, pero el principio es más o menos el mismo: para calcular ( PAG 2 metro , PAG 2 metro + 1 ) solo necesitas ( PAG metro , PAG metro + 1 ) .
@ Jack D'Aurizio La ecuación de la página de ecuaciones de Pells:
PAG norte = ( 1 + 2 ) norte ( 1 2 ) norte 2 2
es perfecto para mis necesidades.

Respuestas (2)

El cálculo de las ternas pitagóricas de la forma T norte = ( a norte , a norte + 1 , C norte ) es equivalente al cálculo de algunos convergentes de la fracción continua de 2 : En particular

[ 1 ; 2 , 2 , , 2 , 2 2 norte  veces ] = 2 a norte + 1 C norte
dónde
C norte = ( 1 + 2 ) 2 norte + 1 ( 1 2 ) 2 norte + 1 2 2 , 2 a norte + 1 = ( 1 + 2 ) 2 norte + 1 + ( 1 2 ) 2 norte + 1 2 = d norte
ambos cumplen la recurrencia norte + 2 = 6 norte + 1 norte . Se pueden expresar en términos de D norte y D norte + 1 , dónde
D norte = ( 3 + 2 2 ) norte + ( 3 2 2 ) norte = σ norte + σ ¯ norte
es la huella de la norte -ésima potencia de a 2 × 2 matriz. Esta secuencia cumple

(R) D 2 norte = D norte 2 2 , D 2 norte + 1 = D norte D norte + 1 6
entonces la pareja ( D norte , D norte + 1 ) se puede calcular mediante un algoritmo de repetición de cuadrados. Se espera que un ejemplo concreto aclare cómo . Supongamos que queremos calcular D 23 y D 24 . La representación binaria de 23 es 10111 2 , entonces calculamos las parejas ( D metro , D metro + 1 ) para metro = 1 2 , 10 2 , 101 2 , 1011 2 y finalmente 10111 2 a través de ( R ) .
( D 1 , D 2 ) = ( 6 , 34 )
( D 2 , D 3 ) = ( 34 , 198 )
( D 5 , D 6 ) = ( 6726 , 39202 )
( D 11 , D 12 ) = ( 263672646 , 15367968024 )
( D 23 , D 24 ) = ( 405211279147678086 , 2361744410637427202 )
esto nos da C 23 y d 23 , de este modo T 23 , con no más de 3 registro 2 ( 23 ) multiplicaciones

La ecuación en mi comentario a su comentario anterior es todo lo que necesito. Lo puse en una hoja de cálculo y los números son perfectos. Tu respuesta mostró una variación, así que marqué la tuya como correcta. No sigo el resto, pero el resto no parece importar. Ahora puedo incrustar esta ecuación en algún lugar y generar el 1000 t h par de parámetros o terna pitagórica en un solo paso. Gracias.

Respuesta editada...

que comienza con un comentario.

El título Buscando la mejor manera de encontrar ternas pitagóricas donde B A = ± 1 es posiblemente engañoso para la pregunta real, que después de muchos comentarios solo puede extraerse del hecho de que la respuesta inicial para el ( A , C ) la recursión (permaneció en la secuela) no es la respuesta deseada. Siempre aclare en el OP cuál es la pregunta (sin alternativas, es mejor expresarla como pregunta, no como un deseo).

El OP ofrece dos formas de construir triples pitagóricos, una es "de un libro" y construye triples T X = ( A X , B X , C X ) recursivamente, el otro proviene de una fórmula, construye pares intermedios PAG X = ( metro X , norte X ) dada por otra recursividad, que puede usarse para reconstruir ( A X , B X , C X ) . Como extraigo la información de los comentarios, solo necesitamos el PAG X (a pesar del título, y de la digresión/divagación inicial sobre los triples). Bien, esto es aún más simple.


Tenemos la fórmula de recursión lineal para el par escrita como vector columna

[ metro X + 1 norte X + 1 ] = [ 2 1 1 0 ] [ metro X norte X ] = [ 1 + 2 1 2 1 1 ] C [ 1 + 2 1 2 ] D 1 2 2 [ 1 2 1 1 2 + 1 ] C 1 [ metro X norte X ]   ,
con una matriz diagonal D arriba. los poderes de [ 2 1 1 0 ] no son inmediatos, sino los poderes de D son. Obtenemos directamente para su fórmula de pares la versión explícita con prueba:
[ metro X norte X ] = ( C D C 1 ) X [ metro 0 norte 0 ] = C D X C 1 [ 1 0 ] = 1 2 2 [ 1 + 2 1 2 1 1 ] [ ( 1 + 2 ) X ( 1 2 ) X ] [ 1 2 1 1 2 + 1 ] [ 1 0 ] = 1 2 2 [ ( 1 + 2 ) X + 1 ( 1 2 ) X + 1 ( 1 + 2 ) X ( 1 2 ) X ] [ 1 2 1 1 2 + 1 ] [ 1 0 ] = 1 2 2 [ ( 1 + 2 ) X + 1 ( 1 2 ) X + 1 ? ( 1 + 2 ) X ( 1 2 ) X ? ] [ 1 0 ] = 1 2 2 [ ( 1 + 2 ) X + 1 ( 1 2 ) X + 1 ( 1 + 2 ) X ( 1 2 ) X ]   ,
lo que da norte X = 1 2 2 (   ( 1 + 2 ) X ( 1 2 ) X   ) .

En particular, para X > 0 podemos calcular norte X redondeando a un número entero el número norte X = 1 2 2 ( 1 + 2 ) X . Por ejemplo, para X = 7 obtenemos 168.99926035179 y después de redondear obtenemos norte 7 = 169 .


Respuesta anterior para la forma explícita de la ( A , C ) recursión:

Puede intentar escribir explícitamente la fórmula de recurrencia como si pasara de un par ( A , C ) al siguiente par ( A , C ) en la forma:

[ A C 1 ] = [ 3 2 1 4 3 2 0 0 1 ] =: T [ A C 1 ]   ,  extraído del pasaje mencionado A = 3 A + 2 C + 1   , C = 4 A + 3 C + 2   ,
introduciendo así una matriz T . Su polinomio característico es ( X 1 ) ( X 2 6 X + 1 ) , entonces tenemos la siguiente diagonalización sobre q ( a ) con a = 2 . Esperamos una matriz diagonal con entradas diagonales correspondientes a las raíces del polinomio característico anterior, son 1 y 3 ± 2 2 . Escritura asistida por computadora :

sage: K.<a> = QuadraticField(2)
sage: a^2
2
sage: T = matrix( K, 3,3, [3,2,1, 4,3,2, 0,0,1] )
sage: T
[3 2 1]
[4 3 2]
[0 0 1]
sage: D, change = T.jordan_form(transformation=True)
sage: D
[ 2*a + 3|       0|       0]
[--------+--------+--------]
[       0|       1|       0]
[--------+--------+--------]
[       0|       0|-2*a + 3]
sage: change
[ 1  1  1]
[ a  0 -a]
[ 0 -2  0]
sage: change * D * change^-1 == T
True

Edición posterior: usemos y escribamos explícitamente la fórmula obtenida para T , y por lo tanto también para los poderes de T . Abajo, S es la matriz de cambio de base.

T = [ 1 1 1 a 0 a 0 2 0 ] S [ 3 + 2 a 1 3 2 a ] 1 4 [ 2 a 1 0 0 2 2 a 1 ] S 1 T norte = 1 4 [ 1 1 1 a 0 a 0 2 0 ] [ ( 3 + 2 a ) norte 1 ( 3 2 a ) norte ] [ 2 a 1 0 0 2 2 a 1 ]  Arriba  a = 2   .  Esto da un  fórmula explícita : [ A norte C norte 1 ] = T norte [ A 0 C 0 1 ] = T norte [ 0 1 1 ] = 1 4 [ 1 1 1 a 0 a 0 2 0 ] [ ( 3 + 2 a ) norte 1 ( 3 2 a ) norte ] [ 2 a 1 0 0 2 2 a 1 ] [ 0 1 1 ]   .


Deje de leer aquí si los experimentos informáticos no son bienvenidos. (Publiqué esto ya que la forma del OP también tiene una recopilación de datos similar. A menudo es para mí un control, y en este caso también puede ser útil para algunos lectores).


Ejemplo de un cálculo explícito:

Para calcular -digamos- el 15 .ésimo término (más o menos) ya tenemos D 15 , entonces calcule con sage el producto:

1 4 [ 1 1 1 a 0 a 0 2 0 ] [ ( 3 + 2 a ) 15 1 ( 3 2 a ) 15 ] [ 2 a 1 0 0 2 2 a 1 ] [ 0 1 1 ]   ,
y obtenemos:

sage: Z = matrix(3, 1, [0,1,1])    # initial solution, A=0, C=1
sage: change * D^15 * change^-1 * Z
[183648021599]
[259717522849]
[           1]
sage: A15, C15 = 183648021599, 259717522849
sage: B15 = A15 + 1
sage: A15^2 + B15^2 == C15^2
True

Este es el tipo de cálculo directo necesario. (La matriz diagonal D tiene entradas diagonales 1 , y 3 ± 2 2 , por lo que el único cálculo involucrado es el de las potencias de estas entradas diagonales).

Lo que quiero evitar es la recursión y no tengo idea de qué idioma está usando en sus ejemplos en gris. Los números de Pell me dieron la respuesta que necesitaba y una sola ecuación me da cualquier número de Pell que elija.
La presente respuesta fue diseñada para responder a la pregunta: ¿es posible generar un par de miembros x usando solo x como número de entrada o, por la naturaleza de esta secuencia, es necesario generarlos todos en orden hasta llegar al pareja deseada? La respuesta descrita anteriormente es la siguiente. Considere la matriz diagonal D en mi respuesta Supongo que puedes calcular las potencias de 3 + 2 a = ( 3 + 2 2 ) . (Numéricamente también puede estar bien, ya que el resultado final será un número entero). Para X = 15 calcule esa multiplicación de cuatro matrices, que se muestra explícitamente. Sin recursividad.
@poetasis El lenguaje de programación utilizado es sage, www.sagemath.org. Es una pieza de software estructurada matemáticamente, a menudo utilizada en cálculos matemáticos. Pero si esto es molesto, simplemente acepte la descomposición de la matriz en forma de Jordan escrita T , explícitamente
T = S D S 1
con una matriz de cambio de base explícita S . Usando solo este simple mecanismo de álgebra lineal, obtenemos el pasaje de un par ( A X , C X , 1 ) al siguiente. La forma Jordan vive sobre el campo q ( 2 ) . estoy usando la notación corta a para 2 . ¿Qué es lo que aún no está claro, por favor?
Soy un aficionado, 40 años retirado de la academia. Hago mucho con las computadoras, pero no sé nada sobre el lenguaje sabio y no entiendo las matemáticas que presentaste. Si tiene que ver con la fórmula que encontré en un libro, no responde a mi pregunta sobre metro y fórmula, que creo que es mejor. La ecuación de Pell resolvió mi problema. Tu respuesta me desconcertó porque las cosas de las que hablaste están fuera de mi experiencia... ¿la forma de Jordan? Espero que tu respuesta pueda ayudar a otros más eruditos que yo.
@poetasis Los 40 años son muchos, pero aun así, la multiplicación de matrices no debería ser problema para ellos, esto es básico. Tenga en cuenta que lo anterior viene con una prueba de una fórmula que rápidamente da, como solicitó el 6 .th o el 1000 .ésimo término La pregunta puede haber cambiado desde el momento en que la respondí, fue una respuesta rápida. Tal como llegó, no había nada sobre la "ecuación de Pell" y los "números de Pell". (Todavía no hay en el OP). El proceso de diagonalización es natural en tales casos, solo eche un vistazo a las recurrencias lineales. Aquí hay un enlace...
... en.wikipedia.org/wiki/… (La ecuación de Pell también se menciona allí). Incluso si esto es demasiado avanzado, hay una simple verificación del hecho de que arriba tenemos una fórmula válida. Mencione cuál es su fórmula, la que es mejor.
Para la parte asistida por computadora, traté de reescribir la respuesta, de modo que se convirtiera solo en una herramienta auxiliar, que puede (y debe en su caso) ignorarse por completo. Ahora me refiero al comentario sobre la salvia, un idioma que nunca escuchaste. Bueno, estoy bastante seguro de que has oído hablar de Python, es el lenguaje de programación que ahora está en la cima para el desarrollo de software decente. William Stein hizo un trabajo maravilloso al juntar todo el software matemático existente en el mercado libre (o no libre), como PARI, GAP, Singular, Maxima, NTL, GMP, (mathematica, magma, ...), todo esto es sabio o sagemath.
@ dan_fulea He oído hablar de Python pero nunca lo usé. La mayoría de mis necesidades son satisfechas por C o incluso BASIC. Los números de Pell fueron recomendados por Jack D'Aurizio en su primer comentario a mi pregunta. Atendieron mis necesidades y nada más fue útil.
Mi fórmula es aquella en la que metro X + 1 = metro X + norte X norte X + 1 = metro X .