Archivo de la categoría: Matemáticas

Geometría para acabar el año

Para acabar el año, el reto de hacer y entender una demostración de geometría.

El problema: dado un polígono regular de N lados (por ejemplo un heptágono como el de la figura), demostrar que los ángulos que forman las diagonales que salen de un vértice, tienen todos estos ángulos el mismo valor, y decir qué valor tiene.

La demostración del reto está en el pdf de abajo. No es una demostración evidente, es un de aquellos casos en que el enunciado es muy fácil, piensas que la demostración será rápida y fácil, y después no lo es. En este caso, he tenido que profundizar en los cuadriláteros inscritos en una circunferencia (que también se llaman cíclicos), y sus propiedades: concretamente, en un polígono inscrit los ángulos opuestos son suplementarios (suman 180º).

Para hacer la demostración es necesaria una cadena de resultados y demostraciones previas, algunas evidentes, i otras no tanto.

Feliz año 2022 y muchas matemáticas para el nuevo año!

La demostración: demostración de que en un polígono regular las diagonales que parten de un vértice tienen el mismo ángulo: 180/N.

Gráficos interactivos con Jupyter Notebooks: tiro parabólico

Ahora que ya he empezado a hacer pruebas con Jupyter Notebook, el siguiente paso que quiero probar es hacer gráficos interactivos. Pues ha resultado ser más fácil y rápido de lo que pensaba.

Partimos de un script python que simula los datos experimentales de una trayectoria parabólica, y calcula la parábola que mejor se ajusta (regresión cuadrática). A partir de la ecuación de la parábola se puede deducir la constante g (=9,81 m/s2). Simulamos los datos experimentales introduciendo un error de ruido en los datos teóricos. Pues bien, con mi gráfico interactivo puedo jugar con el nivel de ruido y con el número de puntos del muestreo, tal com se ve en el video. El código queda de la siguiente forma:

%matplotlib inline
from ipywidgets import interactive
import numpy as np
import pylab as plt
from IPython.display import display, Math, Latex

# tir parabòlic: y = vy*t - .5gt^2
vy = 10 # 10m/s
g = 9.81 # m/s^2
t_max = 2*vy/g

def f(nivell_soroll, num_punts):
    t = np.linspace(0, t_max, num_punts)
    y_or = vy*t - .5*g*t**2
    noise = np.random.normal(0, nivell_soroll, num_punts) # simulem dades experimentals
    y = y_or + noise

    # ajustament a una paràbola
    z = np.polyfit(t, y, 2)
    g_exp = 2.0*z[0]

    t_ = np.linspace(0, t_max, 100)
    y_ = z[0]*t_**2 + z[1]*t_ + z[2]

    fig, ax = plt.subplots()
    plt.plot(t_, y_, t, y, 'bo')
    plt.suptitle("Tir parabòlic. Regressió quadràtica")
    plt.title("y = " + str(round(z[0],3)) + "t^2 + " + str(round(z[1],3)) + "t + " + str(round(z[2],3)) + " -> g exp = " + str(round(g_exp,3)) + " m/s^2")
    ax.set(xlabel='temps (s)', ylabel='y (m)')
    ax.grid()
    plt.show()
    
interactive_plot = interactive(f, nivell_soroll=(0.0, 2.0),  num_punts=(10, 50))
interactive_plot

Otra cosa que me interesa es la manera de exportar estos Jupyter Notebooks a una web, conservando las gráficas y las fórmulas en format Latex (aunque se pierda la interacció con las gráficas). Esto se consigue directamente exportando el Notebook a html:

$ jupyter nbconvert --execute tir_parabolic.ipynb --to html

e integrando este código en una web donde haya más texto y explicaciones, y con la librería Bootstrap.

Introducción a Jupyter Notebooks

Ya hace tiempo que tenía ganas de mirar qué es esto de Jupyter Notebook, del que se está hablando mucho y cada vez se hablará más. Este es el primer ejemplo que hago, la solución de la ecuación de 2o grado con python y la librería sympy, que he cogido de una página que me gusta mucho: arachnoid.com.

El siguiente paso será mirar Jupyter Lab, que proporciona una interfície más moderna, y tengo ganas de jugar con widgets y sliders para poder hacer cosas más interactivas. Ahora que estoy programando bastante con Python para preparar ejemplos para las clases de CNED en la UPC, hacerlo con las Notebooks de Jupyter sería una manera muy puntera de hacer clases interactivas.

Referencias:

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:

OpenCV: detectar círculos

Una vez ya sabemos detectar las rectas, ahora vamos a la parte de detectar los círculos. OpenCV nos da el círculo de mejor ajuste, con su centro y su radio. Por sólo nos falta aplicar el algoritmo de calcular el error de ajuste, como se explica en el anterior post.

Como fichero de entrada tenemos un CSV con los nombres de los participantes, el nombre del fichero de las rectas, y el nombre del fichero de los círculos. Como salida tenemos el fichero resultados.txt con las puntuaciones obtenidas por cada uno de los participantes.

Así pues, ahora sólo falta llevarlo a la práctica. Espero que sea pronto.

Medir la rodondez de un círculo

Después de resolver el problema de medir la linearidad de una recta, ahora toca medir la redondez de un círculo. En la imagen hay una captura de la solución que hemos implementado.

Hay bastante literatura sobre el tema, pero he preferido buscar la solución por mi cuenta. Dado un círculo, openCV ya nos da el círculo de mejor ajuste, con el centre y el radio. La primera idea es recorrer todos los puntos del círculo y hacer el sumatorio de todas las diferencias entre el punto y el radio. El valor da una buena idea de cómo de bueno es el círculo, en términos absolutos. Pero si ahora escalamos x2 o por x0.5 nuestro círculo, los resultados serán diferentes. Por tanto, no he de buscar un error absoluto, sino un error relativo.

La segunda idea es medir áreas. Concretamente, el cociente entre la diferencia de áreas del círculo dibujado y el círculo aproximado, dividido por el área del círculo. Como se ve en el papel, ahora sí que obtenemos un valor relativo de la rodondez del círculo. Una cosa que hemos de tener en cuenta es que cuando sumamos áreas, hay que coger el valor absoluto de la diferencia, para que no haya cancelaciones.

Cuanto más se aproxima a 0 el valor, más bueno es el círculo. Si el valor lo resto de 1, entonces el círculo perfecto valdrá R=1, y R=0.98 no sería tan bueno. Ahora falta implementarlo en mi programa.

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 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.