Processing math: 100%

6 votos

¿Esta extensión de la secuencia de Collatz convergen para n = 550?

La función de Collatz, o 3n+1 función es bien conocido. Una heurística argumento de que la mayoría de las entradas deberían converger con la aplicación repetida de la función es como sigue. Con una probabilidad de 1/2 de entrada de n será par o impar. Si es que, incluso, será multiplicado por un factor de 1/2. Si es impar, será multiplicado por un factor de aproximadamente 3, y luego se divide por 2. Así, en promedio, se esperaría que la tasa de crecimiento por dos iteraciones para ser 1232=34<1.

Ahora considere la siguiente extensión a los números de pq.

f(n) = \begin{cases}
    n/p       & \quad \text{if } n \text{ is divisible by }p\\
    qn \text{ rounded up to the nearest multiple of }p  & \quad \text{if } n \text{ is not divisible by }p\\
  \end{casos}

También podemos expresar esta función (para facilidad de cálculo)

f(n) = \begin{cases}
    n/p       & \quad \text{if } n \text{ mod }p=0\\
    qn + p - (qn\text{ mod }p)  & \quad \text{otherwise}\\
  \end{casos}

A continuación, de forma heurística podemos argumentar que una entrada de n 1p de probabilidad de ser un múltiplo de p y, por tanto, será multiplicado por el 1p p1p de probabilidad de ser multiplicada por un factor de qp. Por lo que el promedio del factor de crecimiento esperamos que después de p iteraciones es 1p(qp)p1.

Ahora, considere el caso p=3, q=5. La heurística del factor de crecimiento es 13(53)2=2527<1, por lo que podemos predecir la convergencia. De hecho, por cada partida n549 la secuencia formada por la aplicación repetida de f converge a uno de los dos ciclos.

421736124

8421472248

Sin embargo, la secuencia, comenzando con n=550 eventualmente se desborda la aritmética de enteros en Matlab. (~10200). Tenga en cuenta que la secuencia se cierne en el 1015 rango por un tiempo antes de que las nubes directamente a 10200, por lo que no acabo de confiar en el cálculo.

Puede que alguien o (a) muestran que 550 realmente hace converger utilizando mejor los caracteres numéricos o (b) demostrar que 550 diverge?

1voto

Gudmundur Orn Puntos 853

Aquí le damos un poco de python que se puede ejecutar esta tarea.

def f(n, p, q, max_trials=10000):
    if n <= 0:
        return 0
    trial = 0
    ret = []
    while (n != 4) and (n != 8) and (trial<max_trials):
        ret.append(n)
        if n%p == 0:
            n = n/p
        else:
            n = q*n + p - (q*n % p)
    return ret

if __name__ == "__main__":
    print f(550, 3, 5)

Como se mencionó en los comentarios, la secuencia termina en un lazo en el paso 2831st. Hay 8 números en la secuencia más grande que 1017, 77 mayor que 1016 y 167 mayor que 1015. Tan los términos "más" en la secuencia son más pequeños que 1015.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X