Autor: Pablo Fernández (theansweris27.com)
Éste notebook nace como una contribución a los comentarios a la entrada Telemetría - Caso práctico I en el blog de DeltaGap.
El reto consiste en tratar de obtener la pérdida de tiempo, para dos vueltas, en cuatro sectores. Para ello nos centraremos únicamente en la gráfica de la velocidad.
from IPython.display import Image
Image(url='http://deltagap.org/wp-content/uploads/2014/10/traza-marcada.png')
La intuición nos llevará a pensar que el tiempo está relacionado con el área bajo la curva; pero en éste caso eso no es así. Ello se debe a que en el eje $x$ está representada la distancia, y por definición
$$v = \frac{ds}{dt}$$O de otra manera, si lo que queremos es calcular el tiempo
$$dt = \frac{ds}{v}$$vemos que para obtener el tiempo $t$ no nos podemos apoyar en la integración de Riemann, pues $v$ y $ds$ no se están multiplicando. Sin embargo, si podríamos calcular la distancia recorrida en una gráfica función del tiempo, pues en ese caso tendríamos que $ds = v\, dt$.
Por tanto, y a partir de la gráfica, para obtener el tiempo empleado en recorrer cierta distancia tenemos que
$$ t = \int\limits_{s_1}^{s_2} \frac{ds}{v(s)} $$con lo que la diferencia de tiempos sería
$$ \Delta t = \int\limits_{s_1}^{s_2} \frac{ds}{v_2(s)} - \int\limits_{s_1}^{s_2} \frac{ds}{v_1(s)} $$o compactándalo todo un poco
$$ \Delta t = \int\limits_{s_1}^{s_2} \frac{1}{v_2(s)} - \frac{1}{v_1(s)}\,ds = \int\limits_{s_1}^{s_2} \frac{v_1(s) - v_2(s)}{v_2(s)\cdot v_1(s)}\, ds$$El hecho de explicar todo este proceso en un notebook de IPython no es trivial, pues utilizaremos el lenguaje de programación Python para resolver estas expresiones.
Para resolver el problema primero vamos a discretizar. Lo ideal sería tener a mano los valores proporcionados por el sistema de adquisición de datos del vehículos, pero en éste caso nos apañaremos con las gráficas proporcionadas. Y para obtener una serie de valores discretos a partir de gráficas no he encontrado mejor herramienta que WebPlotDigitizer, con la que hemos obtenido los valores de $v_1$ y $v_2$ a intervalos de 10 m.
Importamos el fichero CSV generado con WebPlotDigitizer a Python:
import pandas as pd
%matplotlib inline
velocidades = pd.DataFrame.from_csv('plot_data.csv')
velocidades.head(6)
Blue | Red | |
---|---|---|
Dist | ||
950 | 140.446128 | 141.187921 |
960 | 141.772618 | 142.179718 |
970 | 142.920651 | 143.603031 |
980 | 143.661435 | 144.651549 |
990 | 145.157671 | 145.863872 |
1000 | 146.860980 | 147.541183 |
velocidades.plot(figsize=(10,5), color=['blue','red'], legend=False)
<matplotlib.axes.AxesSubplot at 0x882ec18>
Como podemos ver, los datos digitalizados se ajustan razonablemente bien a lo que nos ha proporcionado Daniel García-Carpintero en su blog. Como en el enunciado del problema Daniel nos pide analizar cuatro sectores, de unos 150 m cada uno, realizamos las diviviones correspondientes.
Tomamos los tramos desde:
v11 = velocidades.Blue.ix[1300:1450] / 3.6 # de km/h a m/s
v21 = velocidades.Red.ix[1300:1450] / 3.6
v12 = velocidades.Blue.ix[1450:1600] /3.6
v22 = velocidades.Red.ix[1450:1600] /3.6
v13 = velocidades.Blue.ix[1880:2030] /3.6
v23 = velocidades.Red.ix[1880:2030] /3.6
v14 = velocidades.Blue.ix[2150:2300] /3.6
v24 = velocidades.Red.ix[2150:2300] /3.6
La integral la realizaremos empleando la regla del trapecio.
from scipy.integrate import trapz
velocidades.ix[1300:1450].plot(figsize=(10,5), color=['blue','red'], legend=False)
<matplotlib.axes.AxesSubplot at 0x89d00b8>
dt1 = trapz((v11 - v21)/(v21*v11),dx=10)
dt1
0.60160768955812671
velocidades.ix[1450:1600].plot(figsize=(10,5), color=['blue','red'], legend=False)
<matplotlib.axes.AxesSubplot at 0x9b386d8>
dt2 = trapz((v12 - v22)/(v22*v12),dx=10)
dt2
0.22966861600074526
velocidades.ix[1880:2030].plot(figsize=(10,5), color=['blue','red'], legend=False)
<matplotlib.axes.AxesSubplot at 0x9cacbe0>
dt3 = trapz((v13 - v23)/(v23*v13),dx=10)
dt3
0.12525465180815937
velocidades.ix[2150:2300].plot(figsize=(10,5), color=['blue','red'], legend=False)
<matplotlib.axes.AxesSubplot at 0x9c09048>
dt4 = trapz((v14 - v24)/(v24*v14),dx=10)
dt4
0.3555458607658758
Como podemos ver a partir de los resultados numéricos, los puntos donde más tiempo se pierde son aquellos tramos más lentos. Por orden serían:
Y cuanto menor sea la distancia entre muestras, más precisa será la medida del tiempo.