Archivo de la categoría: Física

Libro de ecuaciones diferenciales. Capítulo «La ciencia del enamorarse»

Voy con la idea de escribir algunos artículos sobre ecuaciones diferenciales, que podrían desembocar en un libro. Me gustaría darle un tono ameno, centrarme en aspectos prácticos, para demostrar que las ecuaciones diferenciales se pueden aplicar a muchos ámbitos diferentes. El título podría ser alguna cosa como: Ecuaciones diferenciales por doquier: de cómo el cálculo infinitesimal resuelve problemas en todos los campos del conocimiento

De hecho he pensado un guión para el libro, sería algo como:
Fı́sica

  • Problemas clásicos: el muelle y el péndulo
  • Dinámica de cohetes. Ecuación de Tsiolkovski
  • Isótopos radioactivos

Biologı́a

  • Ecologı́a de poblaciones
  • Teorı́a de la evolución
  • Hábitos de alimentación en poblaciones animales

Sociologı́a

  • La ciencia del amor
  • Sistemas de votación, dinámica de partidos polı́ticos

Economı́a

  • Evolución de los precios
  • Crisis financiera

Matemáticas

  • Ecuación de la cuerda pesante: la catenaria
  • La braquistócrona y la tautócrona

Medicina

  • Dinámica de los tumores
  • Modelizar el cáncer: competencia y selección natural

Electrónica

  • Carga del condensador. Osciladores LC, RLC
  • Unión PN, difusión de portadores

Quı́mica

  • Dinámica de las reacciones quı́micas
  • Intercambio de calor

Fluidos

  • Ley de Torricelli
  • Mecánica de fluidos. Coeficiente de resistencia

Sistemas complejos

  • Caos
  • Fractales

Puedes descargar este capítulo en el siguiente enlace:

Block (or book) stacking problem

Esta mañana he resuelto el problema de apilar libros (o bloques). Se trata de estudiar bajo qué condiciones puedo apilar bloques (de longitud L) de manera que los vaya desplazando un respecto al anterior, de manera que no caigan. Cuál es la condición límite para que no caigan? Con bloques de longitud L puedo conseguir un desplazamiento de longitud L?

Este problema recuerdo haberme peleado con él (y creo que en su día no lo llegué a solucionar) el verano de 1989 en Bagà, pues el problema estaba enunciado en el Schaum de Mecánica Teórica (Murray R, Spiegel). He buscado el libro (lo he encontrado en pdf en la red, seguro que lo tengo en una estantería), y en la foto se ve el enunciado del libro en la pág 249. NOTA: La figura que enseña el libro está mal y genera confusión: es al revés, el bloque de arriba es el que sobresale la mitad, y los bloques de abajo son los que están más juntos (la figura del llibre tiene un apilamiento claramente inestable, los bloques segur que caen porque el centro de gravedad está fuera del bloque de más abajo).

En aquella época no existía Internet, o sea que uno se peleaba con el problema solo, sin poder pedir ayuda. Ahora lo he resuelto (solito, hay que decirlo, ver el pdf en los enlaces de abajo), y después de resolverlo he buscado información complementaria que he encontrado de lo más interesante (videos de Youtube incluidos), ver los enlaces.

La solución. Todo el sistema de los blocs 1…N-1 que están sobre el bloque N no caen si su centro de masas cae justo en el extremo del bloque N. Se puede resolver de forma iterativa: el bloque 1 se aguanta sobre el bloque 2 si lo ponemos en la mitad, L/2. El sistema bloques 1+2 se aguanta sobre el bloque 3 si el centro de masas de los bloques 1+2 está justo en el extremo del bloque 3. Vamos poniendo bloques, y vamos calculando los centros de masas, y vamos viendo cuál es la condición de equilibrio. Y al final (ver la solución) se encuentra que el centro de masas es una serie armónica:

Xi+1cm = L/2 * (1 + 1/2 + 1/3 + … + 1/i)

Y ahora un poco de matemáticas: la serie armónica es divergente (aunque diverge muy lentamente). Lo que significa que se puede conseguir un desplazamiento teórico tan grande como se quiera (vere el video del enlace, donde se consigue un desplazamiento bastante grande).

Ahora sólo me falta hacer la experiencia con Maria y Pere, a ver si lo podemos hacer este mes. Si lo conseguimos, colgaremos también el video.

Enlaces:

Libro: Elementary Mechanics Using Python

Tengo un nuevo reto para lo que queda de 2019 y para el primer semestre del 2020. He empezado a leer el libro Elementary Mechanics Using Python: A Modern Course Combining Analytical and Numerical Techniques, de Anders Malthe-Sørenssen. Es todo un curso de física, y combina de manera comprensible los ejemplos clásicos de movimiento, fuerzas, energía,… con sus soluciones numéricas, utilizando las libreriías matemáticas y de gráficos de Python.

Se trata de implementar todos los ejemplos del libro a código Python. No he visto ningún enlace para descargar todo el código, en cualquier caso, los ejemplos quiero adaptarlos y hacérmelos míos. He empezado por el ejemplo del peso suspendido de un muelle, que como todo el mundo sabe la solución del movimiento es sinusoidal entorno al punto de equilibrio, la velocidad es cero en los puntos máximo y mínimo, y la velocidad es máxima en el punto de equilibrio. Este ejemplo se explica en el apartado 5.7, que habla de fuerzas, y no basta con copiar y pegar el código, sino que lo he tenido que adaptar. Esta es mi solución:

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np

# Initialize
m = 1.0
# kg
k = 100.0 # N/m
v0 = 1.0
# in m/s
time = 2.0 # s
g = 9.8 # m/s^2

# Numerical setup
dt = 0.0001 # s
n = int(round(time/dt))
t = np.zeros(n,float)
y = np.zeros(n,float)
v = np.zeros(n,float)
# Initial values
y[0] = 0.0
v[0] = v0
# Simulation loop
for i in range(n-1):
\tF = -k*y[i] – m*g
\ta = F/m
\tv[i+1] = v[i] + a*dt
\ty[i+1] = y[i] + v[i+1]*dt
\tt[i+1] = t[i] + dt

fig = plt.figure()
fig.suptitle(u»Objecte suspès d’una molla»)
plot1 = fig.add_subplot(211)
#plot1.set_xlabel(‘t [s]’)
plot1.set_ylabel(‘y [m]’)
plot1.xaxis.grid()
plot1.plot(t,y)
plot2 = fig.add_subplot(212)
plot2.set_xlabel(‘t [s]’)
plot2.set_ylabel(‘v [m/s]’)
#plot1.grid(axis=’y’)
#plt.grid(b=True, which=’minor’, color=’#666666′, linestyle=’-‘)
plot2.xaxis.grid()
plot2.plot(t,v)

for i in range(10, n-1, 400):
\tplot1.plot(t[i],y[i],’ob’)
\tplot2.plot(t[i],v[i],’ob’)

plt.show()

Estos son los capítulos y temas que se tratan en el libro:

4. Motion in One Dimension .
5. Forces in One Dimension .
6. Motion in Two and Three Dimensions
7. Forces in Two and Three Dimensions
8. Constrained Motion
9. Forces and Constrained Motion
10. Work
11. Energy
12. Momentum, Impulse, and Collisions
13. Multiparticle Systems
14. Rotational Motion
15. Rotation of Rigid Bodies
16. Dynamics of Rigid Bodies

Experimento del péndulo para encontrar la constante de la gravitación g

Este verano estuve haciendo pruebas para captar la seal de un sensor LDR al ordenador, con un programa C++ que leía por el puerto serie los datos que enviaba el Arduino. Y se comprobaba como la luminosidad al atarcecer disminuye como una sigmoide (1).

Estas eran las primeras pruebas para el experimento que quería hacer y documentar, que es la búsqueda de la constante g a partir del experimento del péndulo. Resumiendo, medimos el periodo del péndulo para diferentes longitudes, y podemos encontrar la constante g=9.81 m/s2. Sabemos que el periodo del péndulo no depende de la masa, sino sólo de la longitud de la cuerda y de la constante g obviamente.

En la foto podemos ver el esquema del experimento. Tenemos un péndulo; un fotodetector con Arduino capaz de detectar el paso del péndulo; enviamos por el puerto serie al ordenador los datos; un programa C++/SDL lee los datos del puerto serie; procesamos los datos con Python y encontramos la recta de regresión; calculamos g y el error correspondiente. Todo esto es lo que desarrollaremos en el siguiente post.

A parte del experimento de encontrar la constant g, la idea es hacer una serie de experimentos que sigan el mismo esquema. Si tenemos diversos experimentos preparados, se podría hacer más adelante una propuesta didáctica para Secundaria.

Experimentos de verano: modelo matemático de como decae la luz solar al atardecer

Me está rondando por la cabeza hacer una serie de experimentos captando dades amb sensors y procesando los datos en el ordenador. Espero hablar de ello pronto, hay bastantes ideas chulas que se pueden desarrollar. Aquí va una pequeña muestra. Y una de las técnicas clave para hacer todo esto que quiero hacer es enviar por el protocolo serie los datos de un sensor (arduino) a un programa C++ que se está ejecutando en el ordenador.

En la foto se puede ver cómo se recogen los datos del sensor en el ordenador. Los datos se van grabando en un fichero, y se pueden procesar a posteriori. En este caso tengo un sensor LDR que capta la luz solar, y se trata de ver cómo decae la iluminación a medida que se va haciendo oscuro. ¿Qué comportamiento tendrá? El estado inicial es asintótico (iluminación plena), y el estado final también (oscuridad). ¿Qué pasa en medio? Sabemos que a la naturaleza no le gustan los cambios bruscos. Hemos de unir las dos rectas con una curva. Esto nos puede dar una curva sigmoide, en la que habría un punto de inflexión de cambio máximo en el decrecimiento de la iluminación? ¿Será cierto este comportamiento, este modelo matemático? Vamos a comprobarlo.

Una vez tenemos el fichero con los datos, los procesaremos con las librerías científicas numpy y scipy de Python. Como podemos ver en el código, se propone una línea de máximo ajuste de tipo sigmoide. Y efectivamente obtenemos una buena solución y un buen ajuste como se puede ver en la gráfica. En este caso, la ecuación obtenida es:

y =987.24 * (1 / 1 + exp(-0.07*(x-393.87))) +-8.02

No hemos de hacer demasiado caso a los datos del eje X, son tan sólo puntso. Sencillamente tener en cuenta que la distancia entre puntos son 30 segundos.

Esta es una sencilla y buena demostración de verano (un divertimento) de que la Naturaleza se describe con funciones matemáticas. Las mates son una buena herramienta para describir el comportamiento de la Naturaleza. Y que los fenómenos exponenciales son inherentes a la Física.

Este último año he estado estudiando métodos numéricos y las librerías científicas de Python, y realmente le veo muchas posibilidades, que quiero ir explorando este curso que comenzará de aquí poco.

# -*- coding: utf-8 -*-
#cel·la LDR que ha gravat com decau la llum al capvespre.
#La funció que s’ajusta a les dades és una sigmoide

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

def sigmoid(x, a, b, c, d):
y = c / (1 + np.exp(-b*(x-a))) + d
return y

y = np.loadtxt(‘../dades/LDR_capvespre.txt’)
x = np.linspace(1,len(y),len(y))
#print (x)
#print (len(x))

popt, pcov = curve_fit(sigmoid, x, y, p0=[350, 0.001,1000, 2]) #és necessari ficar uns bons paràmetres inicials

print popt
print (‘y =c * (1 / 1 + exp(-b*(x-a))) +d ‘)
print (‘y =’ + ‘%.2f’%popt[2] + ‘ * (1 / 1 + exp(‘ + ‘%.2f’%popt[1] + ‘*(x-‘ + ‘%.2f’%popt[0] + ‘))) +’ + ‘%.2f’%popt[3] )

plt.figure()
plt.plot(x, y, ‘k’, label=»Original Noised Data»)
plt.plot(x, sigmoid(x, *popt), ‘r-‘, label=»Fitted Curve»)

plt.legend()
plt.show()

# Resultat:
#y =c * (1 / 1 + exp(-b*(x-a))) +d
#y =987.24 * (1 / 1 + exp(-0.07*(x-393.87))) +-8.02

Jules Verne: De la Terre à la Lune

Con este post abro una serie de escritos y comentarios a lecturas con los que quiero homenajear, desde ahora hasta julio del 2019, el 50 aniversario de la misión Apollo XI y la llegada del hombre a la Luna. Comencemos por un clásico, una lectura que creo interesante para afrontar esta efeméride.

En 1865 Julio Verne publicó De la Tierra a la Luna. En este libro. el presidente del Gun-Club, el señor Barbicane, propone enviar un proyectil a la Luna. Y para resolver dudas, se pone en contacto con el Observatorio de Cambridge (Massachussets), y les plantea una serie de preguntas. La primera: Est-il possible d’envoyer un projectile dans la Lune?.

En el capítulol IV tenemos la respuesta de Cambridge:

Oui, il est possible d'envoyer un projectile dans la Lune, si l'on parvient à animer ce projectile d'une vitesse initiale de douze mille yards par seconde. 

Vamos a repasar de donde sale este valor.

Para calcular la velocidad de escape, la velocidad que hemos de imprimir al coete será aquélla que venza todo el campo gravitatorio de la Tierra, que irá disminuyendo a medida que el proyectil vaya subiendo. La energía gravitatoria o potencial que hemos de vencer es la diferencia entre la energía potencial en la superficie de la Tierra, menos la energía potencial fuera del campo gravitatorio (en el infinito) que valdrá 0. Y esta energía potencial que hemos de superar tiene que ser igual que la energía cinética que tenemos que imprimir (conservación de la energía). Ver la imagen con las fórmulas.

Por tanto, la velocidad de escape no depende de la masa del proyectil, y tampoco depende de la dirección de lanzamiento, como hemos visto haciendo un razonamiento puramente energético.

La velocidad de escape de la Tierra es pues ve = sqrt(2 x 9,81 x 6371000) = 11180 m/s = 11,2Km/s = 40320 Km/h. Y como una yarda son 1 yd = 0.9144 m, ve = 12226 yd/s, que es precisamente la velocidad que se comenta en el libro.

Me ha parecido que este sencillo cálculo es una buena manera de empezar este homenaje a los hombres que pisaron la luna el 20 de julio de 1968, y a los científicos e ingenieros que lo hicieron posible.

Enlaces:

Libro de ecuaciones diferenciales. Capítulo «Ecuación de la cuerda pesante: la catenaria»

Recuedo en mis días de la facultad que resolvimos en la pizarra la ecuación de la cuerda pesante. Es un caso típico de análisis infinitesimal, con solución analítica: la curva catenaria. La ecuación fue obtenida por primera vez por Leibniz, Huygens y Johann Bernoulli en 1691.

Me lo he pasado muy bien escribiendo este artículo. Me ha servido para profundizar en LaTeX, y en la librería Matplotlib para hacer las gráficas con Python.

Como se comenta en el artículo, un caso práctico muy divertido podría ser la construcción de una bicicleta de ruedas cuadradas que circulase sobre una superfície hecha a base de curvas catenarias. La idea sería propia del Cirque du Soleil, seguro que triunfaría!

Puedes descargar este capítulo en el siguiente enlace:

Ecuaciones diferenciales. MDF: Mètodo de las diferencias finitas

En análisis numérico, el método de las diferencias finitas es un método utilizado para calcular de manera aproximada las soluciones a las ecuaciones diferenciales usando ecuaciones diferenciales finitas para aproximar derivadas.

En este artículo hemos hecho una introducción y una exposición aclarativa sobre este método básico de cálculo numérico para la resolución de ecuaciones diferenciales, y lo hemos aplicado al ejemplo de la balística, en tres supuestos: proyectil sin rozamiento; rozamientoproporcional a la velocidad; y rozamiento proporcional al cuadrado de la velocidad.