viernes, 10 de julio de 2015

Gráfico de caída libre

[Lenguajes: R]

Problema

Dado que el lenguaje R tiene la posibilidad de manejar vectores de una manera muy natural, los problemas de la mecánica clásica se pueden resolver de manera bastante sencilla, con la posibilidad, incluso, de presentar los resultados gráficos muy atractivos.

En seguida propongo un problema sencillo.

Problema de mecánica clásica

De un edificio, a una altura de 15 m, se ha lanzado con un ángulo de 50 grados, un proyectil a una velocidad de 7 m/s. ¿Cuáles serán las alturas (coordenadas y) del proyectil a cada 0.5 m de distancia horizontal desde donde se lanzó y hasta los 11 m?

Se requiere además hacer una gráfica que muestre la trayectoria del proyectil.

Solución

Las ecuaciones físicas que gobiernan este fenómeno son las siguientes:

(Desgraciadamente Blogger falla en desplegar las ecuaciones de abajo, sugiero que vean este post en el PEGOTE de Rpubs , abajo.)

\[x=v_{0x}t+x_{0}\] \[y=-\frac{1}{2}gt^{2}+v_{0y}t+y_{0}\]
Aquí, $g$ es la aceleración de la gravedad, el parámetro \(t\) se refiere al tiempo, y la velocidad está descompuesta en sus componentes: \(v_{0x}\) y \(v_{0y}\).
g <- 9.81 # aceleracion gravedad
x0 <- 0   # x inicial
y0 <- 15  # y inicial
vi <- 7  # velocidad inicial
alphaD <- 50 # angulo-grados

y para encontrar las componentes de la velocidad:

# Se convierte el ángulo a radianes:
alpha <- (pi/180)*alphaD # angulo-radianes
(vox <- vi*cos(alpha)) # componente x de velocidad inicial
## [1] 4.499513
(voy <- vi*sin(alpha)) # componente y de velocidad inicial
## [1] 5.362311

Con esto es suficiente para proceder con el problema. Primeramente se obtienen las x para las que se desea hacer el cálculo, de la siguiente forma:

# desde 0 hasta 11 de 0.5 en 0.5:
las.x <- seq(from=0, to=11, by=0.5)

Nótese que en las fórmulas que gobiernan el fenómeno, dadas anteriormente, no se tiene \(y\) en función de \(x\), sino que las dos coordenadas dependen del parámetro \(t\), esto es, del tiempo. Para resolver este asunto simplemente se despeja en parámetro \(t\), en la ecuación de \(x\), y obtenemos:

\[t=(x-x_{0})/v_{0x}\]

Así, obtenemos los valores de \(t\) correspondientes a las \(x\), usando esta fórmula en R:

las.t <- (las.x - x0)/vox

Finalmente, encontramos las y correspondientes a las t, recien encontradas, aplicando la fórmula para y:

las.y <- -(g/2)*las.t^2 + voy*las.t + y0
# Los resultados:
las.x
##  [1]  0.0  0.5  1.0  1.5  2.0  2.5  3.0  3.5  4.0  4.5  5.0  5.5  6.0  6.5
## [15]  7.0  7.5  8.0  8.5  9.0  9.5 10.0 10.5 11.0
las.y
##  [1] 15.0000000 15.5353081 15.9494790 16.2425125 16.4144087 16.4651675
##  [7] 16.3947891 16.2032734 15.8906203 15.4568299 14.9019022 14.2258372
## [13] 13.4286349 12.5102953 11.4708183 10.3102040  9.0284524  7.6255636
## [19]  6.1015373  4.4563738  2.6900730  0.8026348 -1.2059407

El gráfico se podría hacer con los resultados anteriores utilizando la función plot(), con su parámetro type=“l”, que corresponde a líneas, de la siguiente manera:

plot(las.x, las.y, type="l")

plot of chunk unnamed-chunk-6

Nótese la diferencia de escalas en los ejes. Un método más elegante consiste en utilizar la función curve(), diseñada específicamente para graficar funciones. Para ello, los cálculos anteriores deben ser transformados a funciones, de la manera que se muestra a continuación:

ft <- function(x) (x-x0)/vox # tiempo para una x dada
# Las 'y' en función de x:
y <- function(x) {t <- ft(x); -(g/2)*t^2 + voy*t + y0}
curve(y,xlim=c(0,11),asp=1, main="Lanzamiento proyectil")
abline(v=0,col="red") # linea vertical x=0
abline(h=0,col="red") # linea horizontal y=0
points(x0,y0,pch=19, col="red") # Punto inicial

plot of chunk unnamed-chunk-7


Si quieres ver este mismo post en mis publicaciones de Rpubs:


No hay comentarios.:

Publicar un comentario