Historias
Slashboxes
Comentarios
 

Login Barrapunto

Login

[ Crear nueva cuenta ]

Down Kill Up Publicidad

Bitácora de Andres_age (12730)

Martes, 08 de Agosto 2006

Aproximando una función...

11:23h.
Bitácoras
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?

Este hilo ha sido archivado. No pueden publicarse nuevos comentarios.
Mostrar opciones Umbral:
Y recuerda: Los comentarios que siguen pertenecen a las personas que los han enviado. No somos responsables de los mismos.
  • Polinomio de regresión o red neuronal

    (Puntos:3, Informativo)
    por McPolu (19560) <McPolu@gmail.com> el Martes, 08 Agosto de 2006, 11:30h (#791110)
    ( http://mcpolu.blogspot.com/ | Última bitácora: Miércoles, 05 Marzo de 2014, 00:04h )
    A ojo la función no parece muy complicada, así que un polinomio de regresión no demasiado grande te debería valer.

    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)
    por pobrecito hablador el Martes, 08 Agosto de 2006, 11:37h (#791120)
    Usa el método de interpolación por coseno, que es muy sencillo y te quedan unas gráficas la mar de chulas.
  • MATBLAB

    (Puntos:1)
    por NiMind (23239) el Martes, 08 Agosto de 2006, 14:24h (#791236)
    ( http://wordpress.rodriguezbarros.com/phpBB2/ | Última bitácora: Lunes, 18 Junio de 2007, 16:22h )
    y la asignatura de Análisis Numérico de la Universidad de Huelva. Tienen funciones que les pasa los resultados (interpolación) y te da una aproximación de la función. Hace tiempo que lo hice así que no puedo recordar.
    --
    A la mierda el Karma
  • por Ballfire (6514) el Martes, 08 Agosto de 2006, 15:50h (#791288)
    ( 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]

  • por Argos (6303) el Martes, 08 Agosto de 2006, 18:01h (#791357)
    ¿Sabes lo que es el "Asymptotic Standard Error"? Mis escasos conocimientos de estadística y una búsqueda superficial en Google no me permiten darte una definición entendible, pero yo me enteraría de lo es es antes de descartar la función por un error del 36%, por muy grande que te parezca. Lo que sí puedo decir con total seguridad es que usar f(x)=a+b/(d*x-c) es exactamente lo mismo que usar f(x)=a+b/(x-c) (saca factor común), así que ese error del 10000% no sé que sentido puede tener (volvemos a qué es el ASE).

    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"
  • por ptarra (15708) el Martes, 08 Agosto de 2006, 21:00h (#791466)
    ( http://barrapunto.com/ | Última bitácora: Jueves, 13 Abril de 2006, 15:10h )
    Ahora mismo no dispongo del software apropiado en mi equipo pero he probado a tomar logaritmos de la primera variable con una hoja de cálculo: una regresión lineal del tipo y= a + b * log(x) + e parece que se aproximaría bastanta (aunque hace algún pico extraño. Ya se que el log de 0 no existe, pero puedes poner un 0 (o dado el dominio de la variable X supón que en lugar de 0, vale 1, y ya tienes logaritmo y un error despreciable). Un saludo