11 votos

Predecir el próximo número de una serie

¿Qué métodos puedo usar para predecir el próximo número de una serie de números?

Conozco el número mínimo y máximo posible de antemano.

5 votos

Cualquier método que funcione.

16 votos

Conecta tu secuencia (si está compuesta por enteros) aquí \=)

6 votos

Conoce a la persona que ha hecho la pregunta lo suficientemente bien como para adivinarla. Matemáticamente, no hay realmente una respuesta correcta.

25voto

user8269 Puntos 46

Hoy en día, el método número 1 para predecir el siguiente número de una secuencia (suponiendo que la secuencia haya surgido de forma "natural") es buscarlo en el Enciclopedia en línea de las secuencias de números enteros. En su libro de 1973, A Handbook of Integer Sequences, Sloane da algunas sugerencias sobre qué hacer si su secuencia no está en la Enciclopedia/Handbook. Éstas incluyen,

  1. Suma o resta 1 o 2 a todos los términos y trata de buscarlo de nuevo;

  2. Multiplica todos los términos por 2, o divídelos por cualquier factor común, e intenta buscarlo de nuevo;

  3. Busca una recurrencia.

Sloane profundiza en esta última sugerencia. Menciona el método de las diferencias, en el que se sustituye la secuencia $a_0,a_1,\dots$ con $a_1-a_0,a_2-a_1,\dots$ y, si es necesario, repetir la diferenciación, hasta obtener algo con un patrón obvio. Por supuesto, luego hay que saber qué hacer con una recurrencia una vez que se tiene, pero esa es otra historia.

Sloane también dice que si una secuencia está cerca de una secuencia conocida, se puede intentar restar la secuencia conocida y luego tratar el residuo con uno de los métodos anteriores.

Si los ratios $a_{n+1}/a_n$ parecen estar cerca de una secuencia reconocible $r_n$ entonces mira la secuencia dada por $a_{n+1}-r_na_n$ .

La factorización de los números en una secuencia, o en una secuencia cercana a la secuencia dada, a menudo dará una pista sobre lo que está sucediendo.

Para ver ejemplos de todos estos principios (y otros que no he mencionado) en funcionamiento, le remito al Manual.

11voto

Matthew Scouten Puntos 2518

Una posibilidad es utilizar la función de Maple gfun para adivinar una función generadora. Véase http://algo.inria.fr/libraries/papers/gfun.html

0 votos

De hecho, si alguien pregunta "qué métodos puedo utilizar", es muy razonable señalar el software real. También hay un paquete de adivinación en FriCAS, aunque nunca lo he utilizado. La documentación parece estar en el propio FriCAS, así que no puedo señalar una página web con la descripción. Sin duda hay algo de ese tipo para Mathematica también.

4 votos

@Yrogirg: Claro, Mathematica tiene InterpolatingPolynomial[] , FindSequenceFunction[] y FindLinearRecurrence[] entre otras cosas...

5voto

Drasko Puntos 30

En cuanto al software, desde Página de inicio de Christian Krattenthaler:

Si necesitas adivinar secuencias de números muy a menudo, entonces mi máquina de adivinar" RATE de Mathematica (que ahora forma parte de la Enciclopedia de Sloane's Encyclopedia of Integer Sequences) puede ser útil para usted. El implementación en Maple de François Béraud y Bruno Gauthier se llama GUESS. Una implementación de Maxima, DEVINE, escrita por Martin Rubey, está también está disponible. El paquete de adivinación Axiom Guess, también escrito por Martin Rubey, es aún más potente ya que su gama de fórmulas detectadas es mayor.

Para los hipervínculos a los paquetes, vaya a la página en sí. En cuanto al paquete Guess, también está presente en FriCAS y ha habido cambios en él durante el año pasado.

2voto

Thomas Baruchel Puntos 163

Desde la versión 1.0 del Sympy también puede utilizar el módulo sympy.concrete.guess (escrito por mí para el proyecto); eche un vistazo a la documentación del docstring en https://raw.githubusercontent.com/sympy/sympy/master/sympy/concrete/guess.py donde encontrará varios ejemplos.

Por ejemplo:

>>> from sympy.concrete.guess import guess_generating_function as ggf
>>> ggf([k+1 for k in range(12)], types=['ogf', 'lgf', 'hlgf'])
{'hlgf': 1/(-x + 1), 'lgf': 1/(x + 1), 'ogf': 1/(x**2 - 2*x + 1)}

>>> from sympy import sympify
>>> l = sympify("[3/2, 11/2, 0, -121/2, -363/2, 121]")
>>> ggf(l)
{'ogf': (x + 3/2)/(11*x**2 - 3*x + 1)}

>>> from sympy import fibonacci
>>> ggf([fibonacci(k) for k in range(5, 15)], types=['ogf'])
{'ogf': (3*x + 5)/(-x**2 - x + 1)}

>>> from sympy import simplify, factorial
>>> ggf([factorial(k) for k in range(12)], types=['ogf', 'egf', 'lgf'])
{'egf': 1/(-x + 1)}

>>> ggf([k+1 for k in range(12)], types=['egf'])
{'egf': (x + 1)*exp(x), 'lgdegf': (x + 2)/(x + 1)}

N-th root of a rational function can also be detected (below is an example
coming from the sequence A108626 from http://oeis.org).
The greatest n-th root to be tested is specified as maxsqrtn (default 2).

>>> ggf([1, 2, 5, 14, 41, 124, 383, 1200, 3799, 12122, 38919])['ogf']
sqrt(1/(x**4 + 2*x**2 - 4*x + 1))

Sin embargo, hay que tener en cuenta que el módulo está más bien orientado a la detección de funciones generadoras (y no de fórmulas directas).

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