jueves, 8 de noviembre de 2012

Algebra vectorial con Python

Para acordarme de mis 49 años en actividades docentes, decidí tomar un curso de programación por Internet. 
En marzo de 1964, me sobraba un poco de tiempo en la UCR (había perdido una asignatura que me dejó renco en el plan de estudios), visité entonces a Manuel Enrique Castellón, por ese entonces Asesor de Matemáticas en el MEP y con el beneplácito de la directora del Liceo Rodrigo Facio (Lía Gómez de Brenes) di mis primeras lecciones de Matemática y Física en esa institución (no graduado; 8 lecciones x ¢ 22,50= ¢1800= $30, menos rebajos).  

En Física comenzábamos enseñando vectores, quizás solo un tratamiento de flechitas de diferente tamaño, para un lado y otro, trazadas con regla y transportador, apoyadas en el teorema de Pitágoras, de cosenos, de senos y la famosa ayudante de cálculo de esos tiempos, las Tablas Usuales. Los estudiantes le temían a este tema y recuerdo a un colega del Liceo de Costa Rica que le apodaron “vector” y cuando había un alumno nuevo, algo despistado, lo engatuzaban para que fuera a preguntarle algo, llamándole "don vector". En el LRF yo pasé a ser “coquito”, porque a la primera generación de ese liceo también los atormentaba la geometría y la física, y porque ya se veía que me iba a quedar sin cabello. 

Bueno el álgebra vectorial, independientemente de lo árida o agradable que se enseñe es útil para el manejo de cantidades que tienen magnitud y dirección, por ejemplo velocidades, aceleraciones y fuerzas de toda índole (de contacto, gravitacionales, electromagnéticas). Se requiere a veces encontrar la magnitud y dirección (ángulos) de vectores, sumarlos y restarlos. Algunos conceptos como el de trabajo, se definen en términos de un producto no direccionado de la fuerza y el desplazamiento (producto escalar) y otros como el torque, la cantidad de movimiento angular y la fuerza que un campo magnético ejerce sobre una carga en movimiento, se definen mediante un producto direccionado (producto vectorial).


Creo que esas operaciones y muchas otras debemos ser capaces de hacerlas con lápiz, papel y calculadora en cualquier lugar que estemos, son parte vital del entrenamiento de físicos, matemáticos e ingenieros. Esto no solo nos aportan la herramienta, sino además enriquece una línea de razonamiento aplicable en otras disciplinas y en la vida diaria.

El programa algebra_vectorial.py que le ofrezco aquí, se lo recomiendo para –verificar-  el resultado de sus operaciones con vectores, o cuando tenga alguna duda, luego de haber trabajado un buen rato en un problema de naturaleza vectorial. 
Quizás le ayude en décimo y undécimo año de Enseñanza Media y en la Física General universitaria. 
Si yo fuera usted, siempre lo tomaría como un apoyo, o último recurso, pues me sentiría orgulloso y satisfecho, si puedo maneja el álgebra vectorial con mis propios recursos mentales.
Con un poquito de conocimientos básicos sobre programación con Python, o cualquier otro lenguaje que prefiera, usted mismo lo puede codificar y mejorar. A lo mejor el mío tiene algunas “pulgas informáticas”, si las descubre por favor envíeme un comentario.
Recuerde además que con las operaciones básicas que tiene el programa, puedes hacer otras cosas usando la herramienta (o extendiendo usted mismo el programa), como:
  • Ángulo entre dos vectores, usando producto escalar (o vectorial).
  • Probar si dos vectores son paralelos o perpendiculares (con los productos).
  • Encontrar un vector unitario perpendicular a dos vectores dados (producto vectorial/magnitud).
Copie el código siguiente en el IDLE de Python, sálvelo, corra el módulo y úselo. Si quiere la lista de códigos (--.py) indíqueme una dirección de correo, por medio de un comentario y con gusto se lo envío.

El curso Learn to Program: The Fundamentals, de siete semanas, lo ofrece coursera. Lo dirigen de manera excelente, los profesores de University of Toronto, Jennifer Campbell y Paul Gries, se lo recomiendo.
Llegué casi hasta el final, (video clases, quices, examenes, proyectos), pero no lo terminé. Cometí la novatada de anotarme en tres más, incluyendo uno de Astronomía (Introduction to Astronomy), que espero iniciar el 27 de este mes.
Pero sí me enseñaron y aprendí las bases para continuar el estudio por mi propia cuenta, quizás con la colaboración de algún compañero de mi barrio.

print("ALGEBRA VECTORIAL (jav): Magnitud, ángulos, suma, resta y productos.")  
import math
print("")
print("Llame la función 'magnitud'.\nEscriba las coordenadas cartesianas [float]: positivos, negativos o cero;\ndos decimales.")     
print("Llame la función 'angulos'; 'A' es el ángulo con el eje-x y 'B' con el eje-z.")
print("Llame la función 'mas_menos'. Introdusca coordenadas.")
print("Llame la función 'productos'. Introduzca coordenadas.")

def magnitud(x,y,z):
    mg = math.sqrt(x**2 + y**2 + z**2)
    mag= round(mg,2)
    print("magnitud del vector", x,y,z)
    return mag

def angulos(x,y,z):
    Ar= math.atan2(y,x)
    A= math.degrees(Ar)
    Br= math.atan2(math.sqrt(x**2 + y**2), z)
    B= math.degrees(Br)
    print ("los ángulos A y B  en grados del vector", x,y,z, "son")
    return round(A,2), round (B,2)
          
def mas_menos(x1,y1,z1,x2,y2,z2):
    suma = x1 + x2, y1 + y2, z1 + z2
    resta = x1 - x2, y1 - y2, z1 - z2
    print ("la suma y la resta de los vectores", x1,y1,z1, "y", x2,y2,z2, "es:")
    return suma, resta

def producto(x1,y1,z1,x2,y2,z2):
    punto = x1*x2+y1*y2+z1*z2
    crus = round(y1*z2-y2*z1,3),round(x2*z1-x1*z2,3),round(x1*y2-x2*y1,3)
    mag1= math.sqrt(x1**2+y1**2+z1**2)
    mag2= math.sqrt(x2**2+y2**2+z2**2)
    magcrus= math.sqrt((y1*z2-y2*z1)**2+(x2*z1-x1*z2)**2+(x1*y2-x2*y1)**2)
    ang12r= math.acos(punto/(mag1*mag2))
    angulo12= math.degrees(ang12r)
    angle21r= math.asin(magcrus/(mag1*mag2))
    angle21= math.degrees(angle21r)
    print ("producto escalar", round(punto,2), "; producto vectorial", crus)
    print("ángulo V1->V2:",round(angulo12,2), round(angle21,2))
    print ("Si los valores son diferentes, analice un diagrama vectorial y decida.")

1 comentario:

  1. Gracias por compartir.

    Me gusta la programación y estoy buscando un programa similar pero usando clases.

    Creo que te hace falta multiplicar un escalar por un vector ¿verdad?

    La anécdotas están graciosas.

    Saludos a don Vector.

    ResponderEliminar