To be able to edit code and run cells, you need to run the notebook yourself. Where would you like to run the notebook?

This notebook takes about 1 minute to run.

In the cloud (experimental)

Binder is a free, open source service that runs scientific notebooks in the cloud! It will take a while, usually 2-7 minutes to get a session.

On your computer

(Recommended if you want to store your changes.)

  1. Download the notebook:
  2. Run Pluto

    (Also see: How to install Julia and Pluto)

  3. Open the notebook file

    Type the saved filename in the open box.

Frontmatter

If you are publishing this notebook on the web, you can set the parameters below to provide HTML metadata. This is useful for search engines and social media.

Author 1

Cálculo científico con Julia 🧪

¿Qué es Julia?

Julia es un moderno lenguaje de programación especialmente diseñado para el cálculo científico que destaca principalmente en la construcción de modelos matemáticos.

👀 Reading hidden code
md"""
# Cálculo científico con Julia 🧪

!!! question "¿Qué es Julia?"
Julia es un moderno lenguaje de programación especialmente diseñado para el cálculo científico que destaca principalmente en la construcción de modelos matemáticos.
"""
3.9 ms

Determinación del valor de la gravedad 🍎

En este taller veremos cómo determinar experimentalmente el valor de la aceleración de la gravedad con la ayuda de un péndulo y Julia.

👀 Reading hidden code
md"""
## Determinación del valor de la gravedad 🍎
En este taller veremos cómo determinar experimentalmente el valor de la aceleración de la **gravedad** con la ayuda de un **péndulo** y Julia.
"""
200 μs

Péndulo

👀 Reading hidden code
md"""
![Péndulo](https://upload.wikimedia.org/wikipedia/commons/b/b1/Simple_Pendulum_Oscillator.gif)
"""
19.3 ms

Mecánica del péndulo

El periodo de un péndulo ($T$) depende de la longitud del péndulo ($L$), de la aceleración de la gravedad ($g$), y del ángulo en el punto de máxima altura ($\theta$).

No obstante, si $\theta$ es pequeño el efecto del ángulo es despreciable y el perido puede aproximarse mediante la ecuación

$$T = 2 \pi \sqrt{\frac{L}{g}}$$

👀 Reading hidden code
2.8 ms

Podemos definir una función en Julia para calcular el periodo $T$ en función de $L$ y $g$.

👀 Reading hidden code
1.7 ms
T (generic function with 1 method)
T(L, g) = 2π * sqrt(L/g)
👀 Reading hidden code
209 μs

Con esta función podemos, por ejemplo, averiguar el periodo de un péndulo de 1 m de longitud, tomando $g=9.8$.

👀 Reading hidden code
125 μs
2.007089923154493
T(1, 9.8)
👀 Reading hidden code
4.5 μs

Experimentación 🧪

Vamos a determinar experimentalmente el periodo de un péndulo. Este experimento se puede reproducir incluso en casa, improvisando un péndulo con una cuerda rígida y un pequeño peso atado a ella. Sujetando la cuerda desde un lugar alto, se puede provocar una pequeña oscilación y cronometrar lo que tarda el péndulo en hacer una oscilación completa, es decir su periodo.

Para obtener una aproximación más precisa del periodo se puede cronometrar varias oscilaciones, por ejemplo 10, y dividir luego el tiempo total por el número de oscilaciones.

El experimento debe repetirse para distintas longitudes de la cuerda.

Datos

Si no tienes tiempo para realizar el expermiento puedes usar estos datos

👀 Reading hidden code
1.0 ms

Usaremos el paquete DataFrames para cargar los datos en la variable datos.

👀 Reading hidden code
126 μs
LT
Float64Float64
1
2.21
2.984
2
2.21
2.984
3
2.21
2.986
4
2.21
2.996
5
2.21
2.988
6
1.79
2.712
7
1.79
2.69
8
1.79
2.686
9
1.79
2.696
10
1.79
2.836
more
30
0.47
1.334
datos = DataFrames.DataFrame(CSV.File("datos/datos-periodo.csv"))
👀 Reading hidden code
1.2 s

Visualización de datos

Vamos a representar gráficamente los datos experimentales mediante un diagrama de puntos. Para ello podemos utilizar la función scatter del paquete Plots.

👀 Reading hidden code
154 μs
Plots.scatter(datos.L, datos.T, label="Observaciones", xlabel="Longitud del péndulo (m)", ylabel="Periodo (s)", xlimits=(0,3), ylimits=(0,4))
👀 Reading hidden code
237 ms

Cálculo de la gravedad

Para obtener una idea aproximada de la aceleración de la gravedad, podemos dibujar la gráfica el periodo del péndulo para distintos valores de $g$.

Para ello podemos definir g como un parámetro interactivo.

👀 Reading hidden code
140 μs
@bind g PlutoUI.Slider(5:0.1:15.0)
👀 Reading hidden code
61.6 ms

Podemos jugar con el parámetro para ver qué valor parámetro nos da el modelo que mejor se ajusta a los datos experimentales.

👀 Reading hidden code
95.4 μs
begin
Plots.scatter(datos.L, datos.T, label="Observaciones", xlabel="Longitud del péndulo (m)", ylabel="Periodo (s)", xlimits=(0,3), ylimits=(0,4))
Plots.plot!(x -> T(x, g), label = "Modelo g=$g")
end
👀 Reading hidden code
244 ms

¿Qué valor de g da el mejor ajuste? 🤔

👀 Reading hidden code
72.8 μs

Ajuste del modelo

Para determinar el valor óptimo de $g$ podemos buscar el modelo con el menor error en el ajuste.

Si $o_i$ es el periodo observado en la medición $i$ y $p_i$ es la predicción del modelo para la longitud del péndulo correspondiente, podemos definir el error en cada medición como

$$e_i = |p_i - o_i|$$

y el error total del modelo en las $n$ mediciones como

$$\text{E} = \sum_{i=1}^n|p_i - o_i|$$

Podemos definir una función de Julia para calcular los errores de un modelo correspondiente a un valor particular de $g$.

👀 Reading hidden code
114 μs
error (generic function with 1 method)
function error(g)
predicciones = T.(datos.L, g)
errores = predicciones .- datos.T
sum(abs.(errores))
end
👀 Reading hidden code
390 μs

Y ahora podemos buscar el valor de $g$ que haga mínimo el error. Ese será el valor óptimo de $g$.

👀 Reading hidden code
98.9 μs
Loading more cells...