Search This Blog

Tuesday, July 20, 2010

Diferencias Finitas


Durante el curso veremos primero las leyes naturales de la Mecánica. Hasta donde sé, esta es una contribución de Isaac Newton en el siglo XVII. Durante el principio de ese siglo Galileo Galilei decubrió la ley de Inercia, aunque creo que cometió el error conceptual de pensar que los planetas siguen una órbita circular por inercia. Sin embargo los experimentos con planos inclinados lo convencieron, con ayuda de la imaginación, que un cuerpo en movimiento rectilíneo en ausencia de fuerzas, mantiene tal movimiento. Pueden ver animaciones en este lugar. El texto está en inglés, pero se entienden las animaciones.

Cuando yo estudié Mecánica en la universidad en 1967, la Historia de la Física tenía una marcada predilección por los trabajos hechos en Europa. Sin embargo con la gran cantidad de petroleo producido por los árabes desde 1973, los estudiosos árabes nos han educado sobre sus contribuciones a la mecánica. En particular, junto con Alejandra López Rodríguez, empecé a traducir la Historia de la Mecánica Clásica en Wikipedia. Este trabajo está inconcluso, debido creo yo, en parte a la reticencia de la gente no islámica, a aceptar la contribución Islámica. La otra parte por la que está inconcluso, es por flojera tanto mía como de Alejandra. Los invito a terminar bien ese trabajo.

En cualquier caso, y haya sido como haya sido; conocemos las leyes de la Mecánica Clásica. En esta nota introduzco la Mecánica Discreta, para lo cual los invitó a que lean las notas en pdf que ya puse en Sites. Aquí presento la descripción en Mecánica Clásica del movimiento uniforme en una dimensión. Uso relaciones de recurrencia, y las motivo. Posteriormente escribiré las ideas del Prof. Karl Menger, que nos permitirán entender la notación computacional de Scheme del libro eimc.

Mecánica Discreta

En el conjunto [;\mathbb Q;] definimos [;x_n;] y [;t_n;] . Donde [;n;] está en [;\mathbb N;] . El tiempo discreto se define como [;t_n = n \epsilon;], donde [;\epsilon;] es el tiempo más pequeño que existe en este mundo discreto, el cuál cumple [;\{ \epsilon \in \mathbb Q \};] . La imagen física que motiva estas definiciones es la de un cuarto oscuro donde con ayuda de una cámara estroboscópica se toman fotos cada [;\epsilon;] segundos, o fracciones de segundo. Por ejemplo nuestros ojos reproducen un mundo continuo con sólo unas pocas decenas de fotos por segundo como en el cine o la TV.

Imagínense pues, una pelota moviéndose en línea recta en una superficie tan lisa como la que pudo lograr Galileo. El hecho empírico es que el cuerpo recorre distancias iguales en tiempos iguales. Empecemos por definir la Cinemática.


``La Cinemática (del griego κινεω, kineo, movimiento) es la rama de la mecánica clásica que estudia las leyes del movimiento de los cuerpos sin tener en cuenta las causas que lo producen, limitándose, esencialmente, al estudio de la trayectoria en función del tiempo.''

El movimiento de los cuerpos es apreciado por un niño de pocos años, de una manera que se mantiene en su mente hasta que toma su primer curso de Mecánica. Este conocimiento es producto de muchos años de experimentación con su propio cuerpo. Por experiencia, no científica, no metódica, asocia las palabras espacio, y tiempo, a series de actos que le ``enseñan'' los conceptos. En la primaria, y si vive en cuartos con paredes rectas que se juntan en la esquina perpendicularmente, piensa en el espacio de tres dimensiones. Ancho, grueso, y alto. Si observa el movimiento del Sol y la Luna, piensa en el día, el mes, y tal vez el año. Si tiene relojes, entonces en la hora, el minuto, y el segundo.

Así pues, por experiencia cotidiana, y observaciones astronómicas, espero que el estudiante que toma este curso de Mecánica ya tiene idea de espacio y de tiempo. Lo que sigue a continuación es la expresión en el lenguaje de las funciones recurrentes, del movimiento uniforme en una dimensión, con tiempo absoluto como lo conceptualizó Newton; por primera vez en 1687.

Recursión

``Recursión es, en ciencias de computación, una forma de atajar y solventar problemas. De hecho, recursión es una de las ideas centrales de ciencia de computación. [1] Resolverr un problema mediante recursión significa que la solución depende de las soluciones de pequeñas instancias del mismo problema. [2]''

En particular me interesan los algoritmos recursivos.

Uno antiguo, es la llamada Criba de Eratóstenes. Criba o como decimos en México, cedazo o colador, es un instrumento de cocina que sólo deja pasar objetos de un tamaño crítico y menores. Aquí tienen una animación tomada de Wikipedia.



Para ver la animación tiene que poner su ratón sobre la figura y apretar el botón izquierdo.

Otro algoritmo recursivo antiguo es el Algoritmo de Euclides para calcular el máximo común divisor.

En Scheme, que es el programa que vamos a usar en este curso, ya existe un algoritmo que calcula el máximo común divisor (en inglés greatest common divisor gcd). Aquí lo escribo:

(define gcd(lambda (m n)
(if (zero? n) m 
(gcd n (remainder m n)))))

Noten que gcd está en la definición, y en el cuerpo de la definición. Es decir tenemos un objeto que se define en términos de sí mismo. Realmente lo importante del Algoritmo de Euclides, es la instrucción remainder, que en español se llama residuo. La operación de restar el chico del grande se detiene hasta que el residuo es cero. Si no se llega a cero, entonces no se puede dividir, y se dice que el máximo divisor común es el número [;1;] que divide a todos los números.

Para correr el programa se escribe:

(gcd m n)

donde m y n $\in \mathbb N$

No sé porque los griegos inventaron este algoritmo, esta serie precisa de operaciones que hasta una computadora automática puede obedecer. Tal vez porque no tenían el número cero, y tampoco álgebra. Sus argumentos estaban basados en construcciones de regla y compás, es decir construcciones geométricas.

Antes de pasar al problema de movimiento uniforme en una dimensión con ayuda de las diferencias finitas, un último punto de matemáticas es el del principio de Inducción Matemática.

``Premisa mayor: El número entero a tiene la propiedad P.
Premisa menor: El hecho de que cualquier número entero n tenga la propiedad P implica que n + 1 también la tiene.
Conclusión: Todos los números enteros a partir de a tienen la propiedad P.''
Tomado de la liga a Wikipedia mostrada.

Los números [;\mathbb N;] pueden definirse así. Si [;n;] está, entonces [;n +1 ;] también está en el conjunto [;\mathbb N;] .

Finalmente veamos el cálculo de la posición de un cuerpo en el tiempo [;t_n;] cuando sabemos su posición en el tiempo [;0;] , y además sabemos que se mueve a velocidad constante [;v_n;].

Este problema es matemático, es decir cinemático. La cinemática nos lleva intuitivamente a definir conceptos de movimiento que tenemos antes de tomar el curso de la universidad. Las leyes del movimiento corresponden a la parte científica de la Mecánica, y está descrita por las llamadas Leyes de Newton. Aquí sólo me interesa describir el movimiento rectilíneo uniforme de un cuerpo que recorre distancias iguales en tiempos iguales, como un problema matemático y computacional usando las diferencias finitas.

Posición y velocidad

Sea [;x_n;] la posición sobre un eje [;O;]. Ver figura:











La línea horizontal ([;O;]), enmedio del cuadro es todo lo que necesitamos por lo pronto. El valor de [;\epsilon;] es tan pequeño que no se ve la diferencia entre un punto y el siguiente. Por cada número natural hay un pixel, y son tantos los pixels que nos hacemos la ilusión de una línea continua.

La velocidad se calcula con la distancia recorrida y el tiempo transcurrido. La primera diferencia que nos interesa es la de posiciones. La diferencia puede ser positiva, si el punto siguiente está a la derecha del anterior, o negativa en caso contrario. Al usar el conjunto [;\mathbb Q;] aceptamos los valores negativos de los números. Los racionales se construyen con [;\mathbb Z;] . Por lo tanto tienen signo, los positivos los usamos para movimientos a la derecha, y los otros a la izquierda. El número [;0;] corresponde al caso de desplazamiento cero, o reposo.

Realmente el índice, [;n;] que usamos admite también valores negativos, por lo que en rigor [;n \in \mathbb Z;] . Por razones prácticas queremos usar la posibilidad de que el momento en que empezamos a medir el tiempo, el que corresponde a [;0;] , puede tener tiempos antecedentes. Por ejemplo antes de que nacieran, nació su mamá.

El desplazamiento es una cantidad derivada.

[; x_{n+1} - x_n;]

La diferencia de dos posiciones en el eje [;O;] mide el desplazamiento. El tiempo transcurrido correspondiente a ese desplazamiento es:

[;t_{n+1} - t_n;]

Con estas dos cantidades definimos la velocidad:

[;v_n = \frac{x_{n+1} - x_n}{t_{n+1} - t_n};]

En general, como veremos después, es importante decidir que índice usar para [;v;], en este caso, al ser constante, se puede usar [;n+1;] o [;n;] .

Problema

Un cuerpo se mueve a velocidad constante [;v;], si en [;t_0;] está en [;x_0;], encuentre su posición en el tiempo [;t_n;]. También se conoce el tiempo mínimo [;\epsilon;].

Solución

De la definición cinemática de [;v_n;] multiplicamos ambos lados por [;t_{n+1} - t_n;] . Como [;v_n;] no depende de [;n;], usamos [;v;].

[;x_{n+1} - x_n = v \times (t_{n+1} - t_n);]

$t_n = n\times \epsilon$

El tamaño del tiempo transcurrido o intervalo de tiempo no depende de [;n;] por lo que el problema es relativamente sencillo, desde el punto de vista algebraico, [;t_{n+1} - t_n = \epsilon;].

[;x_{n+1} - x_n = v \times \epsilon;]

Si sabemos [;x_n;] podemos calcular [;x_{n+1};] . Como dominós que caen, así podemos resolver todo el problema.











Dado [;x_0;] calculamos, [;x_1;], con el cual calculamos [;x_2;] y así consecutivamente, hasta que se nos acabe el tiempo, por lo cual nunca llegamos a la posición en un tiempo [;\infty;], pero sí podemos llegar a cualquier valor [;n;] finito.

Empecemos pues:

[;x_1 = x_0 + v\times \epsilon;]
[;x_2 = x_1 + v\times \epsilon;]

En la segunda podemos sustituir la primera:

[;x_2 = x_0 + v\times\epsilon + v\times\epsilon;]

y reducir, o simplificar.

[;x_2 = x_0 + 2 v\times\epsilon;]

Si el problema fuera calcular para [;n = 2;], aquí termina. Sin embargo podemos hacer más.

Con imaginación observamos que para [;n;], la solución debe ser:

[;x_n = x_0 + nv\times\epsilon;]

La demostración de este resultado usa el principio de Inducción Matemática, mencionado arriba.

Tenemos tres pasos del algoritmo, o sucesión de operaciones tan simples, que hasta una computadora puede producir.

El primer paso es el de calcular [;x_1;]conociendo la velocidad [;v;] y el tiempo mínimo [;\epsilon;], además de la primera posición [;x_0;].

Ese paso es el que está arriba.

El segundo paso, es suponer que el resultado es válido para un valor arbitrario [;k;], que puede ser el [;1;] ya calculado.

[;x_k = x_0 + kv\times\epsilon;]

El tercer y último paso es demostrar, usando la ecuación que define el problema ([;x_{n+1} = x_n + v\times\epsilon;]) , que se obtiene la ecuación anterior sustituyendo [;k;] por [;k+1;].

Aquí están los pasos de esta demostración.

[;x_{k+1} = x_k + v\times\epsilon;]

[;x_{k+1} = x_0 + kv\times\epsilon + v\times\epsilon;]

Al sumar los dos últimos términos que tiene a [;v\times\epsilon;] como factor común, obtenemos el valor deseado:

[;x_{k+1} = x_0 + (k + 1)v\times\epsilon;]

Se puede uno imaginar haciendo todas estas operaciones con la seguridad de que el resultado final está bien, porque todos los pasos intermedios están bien. Puede preocuparnos que si cometemos errores en una suma intermedia, entonces el resultado final esté mal. Una computadora puede hacer estas sumas mejor que nosotros, ya que pensamos en las rapideces actuales de cómputo. La máquina que tengo, hace [;3;] mil millones de operaciones por segundo, yo haría dos o tres por segundo, si soy hábil. Claro que nos deben preocupar fuentes de error de la computadora, pero ese ya es tema de otro curso. Además de que esta es una solución exacta que se puede conocer de una vez y para siempre. El interés actualmente por los métodos numéricos se debe a problemas no integrables. Este problema es integrable. La belleza del método de diferencias finitas es que es el mismo para problemas integrables y no-integrables.

Con la hoja de cálculo Gnumeric de Miguel de Icaza. Obtenemos:
















Se usó [;\epsilon = .01;] , [;x_0 = 0;], y [;v = 1;], con [;n=29;].

Los números en el eje [;O;] no corresponden a [;n;], sino a [;n + 1;].

Conclusión


Newton no tuvo a su disposición computadoras digitales, aunque hubiera entendido esta solución al problema mecánico, no la hubiera usado por impracticable.

El día de hoy, creo que todo estudiante de Física debe saber resolver problemas de Mecánica numéricamente, ya no hay excusa.

No comments:

Post a Comment