29 votos

Encontrar fórmula a partir de valores

¿Existe algún "algoritmo" o pasos a seguir para obtener una fórmula a partir de una tabla de valores?

Ejemplo:

Usando estos valores:

X                Resultado
1                3
2                5
3                7
4                9

Me gustaría obtener:

Resultado = 2X+1

Editar

¿Quizás usando Excel?

Editar 2

Información adicional:

No siempre será un polinomio y puede tener varios parámetros (creo que 2).

1 votos

A menos que tenga una forma funcional asumida, su problema es insoluble.

0 votos

@J.M.: ¡Yo también lo pensaba - pero luego encontré la herramienta mencionada abajo!

19voto

dwj Puntos 2006

La mejor herramienta para hacer esto es ese impresionante software: http://www.nutonian.com/products/eureqa/

Editar: Para tu ejemplo muy fácil mencionado anteriormente, incluso WA encontrará la fórmula correcta: http://www.wolframalpha.com/input/?i=3,+5,+7,+9,...

Editar 2: Lamentablemente Nutonian fue comprada por DataRobot y su producto ya no está disponible de forma gratuita (ni siquiera para uso académico). Sin embargo, en muchos casos existen otras soluciones, consulta por ejemplo mi publicación en el blog aquí: Regresión simbólica, Programación genética... o si Kepler hubiera tenido R.

3 votos

La parte "usando bloques de construcción" del software está asumiendo una forma funcional (o una familia de ellas según sea el caso)... mi punto es que uno no puede simplemente sacar una fórmula de la nada sin comprensión de dónde provienen los datos.

0 votos

@J.M.: Ok, ahora entiendo lo que quieres decir - ¡Estoy de acuerdo con eso!

3 votos

...y más o menos, Wolfram Alpha/ Mathematica hizo exactamente lo que estoy haciendo en mi respuesta. InterpolatingPolynomial[] utiliza la fórmula de diferencia dividida de Newton en su implementación.

8voto

giacomelli Puntos 101

He creado un ejemplo en mi biblioteca de algoritmos genéticos en C#, GeneticSharp, que resuelve tu pregunta.

El ejemplo llamado "Constructor de Funciones" recibe los valores de los argumentos de la función y el resultado esperado, luego, utilizando algoritmos genéticos, intenta descubrir la función matemática.

Echa un vistazo:

GeneticSharp: Ejemplo de Constructor de Funciones

1 votos

Sería útil si hubiera descargas binarias para poner en marcha esta herramienta de consola con la última versión de Mac OS X. No se encontró ningún enlace :-(

0 votos

¿Hay un repositorio o códigos fuente para esto por favor?

0 votos

7voto

Andrew Puntos 140

Un método más fácil (asumiendo que los valores fueron generados por un polinomio) sería notar que las diferencias divididas sucesivas $\frac{y_{i+1}-y_i}{x_{i+1}-x_i}$ son constantes y iguales a 2; por lo tanto, tu función es de la forma $y=2x+c$. La constante $c$ se determina reemplazando tanto $x$ como $y$ con valores apropiados, y luego resolviendo para $c.

0 votos

+1: No sabía eso, ¡interesante! Acabo de encontrar esta referencia: es.wikipedia.org/wiki/Diferencias_divididas

3voto

dguaraglia Puntos 3113

Una forma de obtener la relación deseada es utilizar el análisis de regresión. En el caso de que sepas qué forma de relación esperas, por ejemplo si sabes que $f(x) = a * x + b$ es muy sencillo encontrar los parámetros $a$ y $b$ (ver por ejemplo). En el caso de que no sepas qué forma puede tomar tu fórmula, es común utilizar las técnicas de regresión no paramétrica.

0voto

solarflare97 Puntos 66

Una herramienta gratuita sólida que puedes usar es Mathulus. Puedes escribir el modelo o hacer una búsqueda que probará una serie de ecuaciones de 2 parámetros y ver cuál se ajusta mejor a los datos.

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