20 de mayo de 2013

Usando cálculo numérico para mejorar un programa

Este es el problema que teníamos era el siguiente al intentar leer un archivo desde una posición p0 fallaba, pero desde otras posiciones todo funcionaba correctamente.
El archivo en cuestión era un .mpg que contenía un video con audio. Estos archivos no están pensados para que se pueda acceder de manera aleatoria, sino para ser usado en modo de streaming.
Podemos pensar el problema del siguiente modo, queremos encontrar la función h(t) = p tal que dada un tiempo t, nos devuelva la posición donde empieza el cuadro de video t.
Pero lo que podemos averiguar es g(p) = t, es decir dada una posición p a que tiempo t de cuadro de video corresponde. Podemos suponer que al principio tenemos g(0) = 0, y que si P es la posición máxima de video, y T es el tiempo máximo entonces tenemos g(P) =T.
Luego dado un tiempo t intermedio entre 0 y T, podemos aplicar cualquier método de búsqueda de raíces a f(x) = g(x) - t.
En nuestro caso lo que sucedía es que la función g no se comportaba muy bien el la cercanía de la posición problemática. La función g es monótona y creciente, pero la convergencia era lenta, y el programa para evitar demorar demasiado y parecer colgado generaba un error.

1 comentario: