Con unos datos, me he puesto manos a la obra para hallar una función que pasase por una serie de puntos. Intenté hacerlo a mano (calculadora en una y lápiz en otra) y al cabo de unos minutos vi que no llegaba a ningún sitio.
Busqué algún programa que me permitiese hacer eso, y encontré
gnuplot. Me bajé la versión 4.1 (la última) y me dispuse a empezar.
Gráficamente se ve el patrón que sigue, pero al intentar aproximarla el gnuplot no puede acercarse más y logra una ecuación con un 36% de error (excesivo!!).
Aqui está el resultado, en rojo la aproximación y en verde los datos.
Los datos son estos, que guardo en un archivo a.txt (alarde de originalidad...):
0 1.50
4000 1.4521
6000 1.44
8000 1.428
8200 1.40
60000 1.359
103000 1.340
200000 1.3165
400000 1.2914
600000 1.2765
1000000 1.2578
1500000 1.2428
2000000 1.232
Lo que hago es esto:
gnuplot> f(x)=a+b/(x-c)
gnuplot> fit f(x) 'a.txt' via a,b,c
Gnuplot arroja los resultados:
Final set of parameters -Asymptotic Standard Error
=================================================
a = 1.24162 +/- 0.01321 (1.064%)
b = 16982.9 +/- 6249 (36.8%)
c = -77976 +/- 2.722e+004 (34.91%)
Vamos, un error del 36%, que no me sirve.
Gráficamente se ve como la función tiene que tener esa forma 1/x, pero si intento meter más variables, el programa peta ("Singular matrix in Invert_RtR", "Undefined value during function evaluation" o un % de error brutal).
Por ejemplo, si pongo f(x)=a+b/(d*x-c), empieza a calcular y da un error del 10000% (!!)
He intentado varias opciones, desde Taylor hasta un exponente invertido xD pero lo que sale es peor y al final lo "mejor" es f(x)=a+b/(x-c), pero con demasiado error.
Esta es la primera vez que uso gnuplot y no tengo ni idea de como funciona, si se puede optimizar, etc.
¿Alguien podría echarme una manita?
Polinomio de regresión o red neuronal
(Puntos:3, Informativo)( http://mcpolu.blogspot.com/ | Última bitácora: Miércoles, 05 Marzo de 2014, 00:04h )
Si sigues teniendo problemas, una red neuronal sencilla tipo perceptrón te resolverá el problema, aunque a primera vista usar un perceptrón para esos datos es matar moscas a cañonazos.
En España la mejor manera de guardar un secreto es escribir un libro.
Papel, lápiz y coseno
(Puntos:1, Informativo)MATBLAB
(Puntos:1)( http://wordpress.rodriguezbarros.com/phpBB2/ | Última bitácora: Lunes, 18 Junio de 2007, 16:22h )
A la mierda el Karma
Interpolación polinómica por Lagrange
(Puntos:1)( http://barrapunto.com/ | Última bitácora: Martes, 15 Junio de 2010, 16:08h )
Es un método de interpolación polinómica, te dará un polinomio de grado igual al número de datos del conjunto menos uno.
Al margen de ese problema (no es práctico si tienes un montón de puntos) no está mal.. es de lo más básico... de hecho...
¡¡Ojo!! eso sí, está bien para interpolar, ¡pero para extrapolar es un desastre! Quedas avisado
Tienes los coeficientes del polinomio expresados aquí [wolfram.com]
Asymptotic Standard Error
(Puntos:2)Otra cosa que puedo decir con seguridad es que intentar interpolar con un polinomio de grado igual al número de datos del conjunto menos uno es el camino directo a la catástrofe a no ser que los datos sean exactos y sepas con seguridad que la función es un polinomio.
Finalmente, ¿de dónde han salido esos datos?
-- Escriba un millón de veces "no volveré a derrochar ancho de banda"
Otra aproximación...
(Puntos:2)( http://barrapunto.com/ | Última bitácora: Jueves, 13 Abril de 2006, 15:10h )