3 votos

Recursos para llevar las matemáticas a la web

Una pregunta fuera de tema planteada en Mathoverflow por Andrew Stacey, pero uno que encaja aquí:

Una cosa que se desprende de las recientes publicaciones del blog de Terry Tao sobre este asunto ( primer puesto y seguimiento ) es que es difícil tener una visión general de todas las diferentes formas de llevar las sorprendentes matemáticas de uno a la web. He pensado que sería útil reunir una lista de ellas. Se trata de una lista de formas de hacerlo, no de ejemplos de lo que ya se está haciendo.

Reglas estándar de la wiki comunitaria: una cosa por respuesta y no dudes en editar las respuestas de los demás.

Reglas adicionales: sería útil tener algo más que enlaces. Una breve descripción, pros y contras (sea objetivo), plataformas (sólo funciona en Linux, algo así) - cosas que podrían ayudar a alguien a decidir qué cosas examinar más a fondo.

3voto

Shawn Miller Puntos 3875

Hace poco hice algo así, para simular un sistema de dos masas conectadas por un muelle. Dichas masas estaban colocadas horizontalmente en un plano sin fricción. Una de estas masas recibió un impulso inicial y a partir de ahí se dejó el sistema solo. Mientras que todo el sistema (el controide que se precia) se mueve con velocidad constante, las dos masas oscilan, mientras se mueven hacia adelante. Aquí hay un breve dibujo ASCII del sistema

 Initial Impulse     ______              ______ 
 ---->               | m1 |/\/\/\/\/\/\/\| m2 |
_____________________|____|______________|____|______________________

Después de escribir las ecuaciones diferenciales, escribí un pequeño programa en python para simular el problema. Este programa se basa en el método de los pequeños pasos (también llamado método Eueler). Aquí está el artículo correspondiente de la wikipedia:

http://en.wikipedia.org/wiki/Euler_method

He implementado este alogoritmo para el problema descrito anteriormente y he trazado los resultados utilizando gnuplot:

gnuplot.info (sólo se me permite añadir un hipervínculo, así que añada www)

Pero usted es libre de utilizar cualquier herramienta que desee para este fin. Aquí viene el código fuente de mi pequeño programa:

#!/usr/bin/python
import os

steps = 100000
time = 100.

# Initial conditions
D = 0.9
m1 = 1.2
m2 = 0.4
v1 = 1.3
v2 = 0.
x1 = 0.
x2 = 1.
l = 1.

#Since I also tried to implement other algorithmus i specify which one to use
Euler = 1

#Euler 

if Euler == 1:
    timesteps = time / steps
    # Open the files for writing the results to
    f = open('results_x1', 'w')
    f2 = open('results_x2', 'w')
    f3 = open('results_com', 'w')

    # The real calculation   
    for i in range(0,steps):
        x1 = x1 + (D * (x2 - x1 -l) / m1)* (timesteps**2) + v1 * timesteps
        x2 = x2 - (D * (x2 - x1 -l) / m2)* (timesteps**2) + v2 * timesteps
        v1 = v1 + (D * (x2 - x1 -l) / m1)* (timesteps)
        v2 = v2 - (D * (x2 - x1 -l) / m2)* (timesteps)  
        f.write(str(i*timesteps) + " " + str(x1) + "\n")
        f2.write(str(i*timesteps) + " " + str(x2) + "\n")
        f3.write(str(i*timesteps) + " " + str((x1*m1 + x2*m2)/(m1+m2)) + "\n")

    f.close()
    f2.close()
    f3.close()

Por supuesto que hay mejores alogoritmos que el de euler, pero este es definitivamente el más fácil de implementar (fracasé implementando algoritmos más avanzados ;-)).

Así que estos son los pasos que probablemente deberías seguir:

  • Escribe las ecuaciones diferenciales de tu problema
  • Comprender el método de Euler
  • Tome mi código como punto de referencia y modifíquelo para su problema

Sé que es un tema bastante extenso y que, por tanto, mi respuesta es sólo superficial. Sólo tienes que decir lo que quieres saber más, y voy a tratar de añadir los comentarios correspondientes ;-)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X