Introducción a Python

Hola a todxs, a partir de la encuesta que hizo Ricardo en Twitter, nos dimos cuenta que teníamos a varios perdidxs con Python y Colab, la buena noticia es que exactamente para esto sirve medir. Por eso, para lxs perdidxs, para quienes nunca habían usado Python, para quienes sí lo habían hecho pero necesitan repasar, llegó el notebook intriductorio de Python, pasen y vean por acá.

La forma de leerlo sugerida, es con otro notebook abierto, copiando y jugando a modificar todos los códigos, preguntandose ¿qué pasaría si…? e intentarlo responderlo probando cosas.

Edito para agregar algo: En vez de abrir otro notebook también pueden abrir el archivo en modo playground. Así les deja editarlo y cambiarlo a su gusto en una copia de ustedes sin modificar lo del resto.

Print Friendly, PDF & Email

11 thoughts on “Introducción a Python

  1. Buenas! Primero, muchas gracias por el notebook de introducción, fue realmente muy útil.
    Segundo, estaba tratando de realizar en Colab el ejemplo del péndulo simple para ver si había comprendido lo más básico de gráficos pero cuando quiero graficar a la Energìa Mecánica del péndulo en función de las posiciones, me aparece el error de que el eje x (correspondiente a las posiciones) y el eje y (que serían los valores correspondiente de Energía Mecánica, la cual es constante) no tienen la misma dimensión y por ende, no puedo graficarlos uno en función del otro. Yo tomo a la Energía Mecánica como:
    Em= 1/2 * m * (v)**2 + m * g * (l – l * cos (theta)) con las condiciones iniciales de velocidad v=0 y posición theta=pi/2.
    Busqué el error en Google y me aparece como solución hacer arrays para ambos ejes, así tendrían la misma cantidad de elementos, pero no entiendo como hacerlo para el eje y o si estoy planteanado otra cosa mal.

  2. Hola Sofi, gracias por tu respuesta, me alegro que te haya servido el notebook. La energía mecánica así definida va a tener las mismas dimensiones que v y que theta, como definiste estos vectores? Podés chequear las dimensiones de tus arrays con len(array).
    Entonces:
    - Chequea len(v), len(theta) y len(Em), deberían darte todas iguales.
    - Chequea len(x), seguramente tengas una dimensión distinta que las anteriores, si es así creo que podés corregirla en donde la definiste, pero para ver bien todas estas cosas si querés compartime tu código (ya sea con link de colab o copiandolo acá) para ver si puedo ver donde está el error

    • Hola Juan, no puedo entrar a tu notebook, fijate si me podés dar permiso, igual recién le contesté a Sofi, fijate si alguna de estas cosas te sirven.

      Abrazo!

      • Hola Juan, ahora sí pude ver tu código, te deje un comentario ahí pero lo copio acá para que quede para quien lo necesite.

        Todos los problemas están cuando definis las constantes y la variable que vas a usar más adelante:
        Ojo que el formato del linspace es: (start, stop, numero de puntos), o sea que así estás creando un vector con 500 valores entre 0 y 0.1. Con esto no llegás a ver ni un período.

        Algunas opciones para que cambies esto son:
        1) Usar np.arange(start, stop, step)
        2) Cambiar el 0.1 por 14 y usar no.linspace(0,14,500) ahí sí vas a incluir un período

        Por otro lado, estás diciendo cuanto vale g,l y omega, eso no lo podés hacer, tu libertad es decidir cuanto vale g y l, con eso podes calcular omega = np.sqrt(g/l).

        Por último y algo fundamental. Para este problema tuvimos que linealizar, para eso consideramos pequeñas oscilaciones. Esto significa que nada va a funcionar si A = 2, acordate que A es la amplitud del ángulo, A = 2 es un ángulo que recorre de -2 a 2, 4>pi MÁS DE UN SEMICÍRCULO. Esto de pequeño no tiene nada, intenta con A más chico, o mejor todavía, fijate cuál es la amplitud más grande que podés poner para que se te siga conservando la energía.

  3. No molesta, para nada!
    Vamos a aclarar algunos conceptos, t es una variable escalar, pero python de variables no sabe nada, cómo hacemos para decirle que algo varía? Lo escribimos como un array donde cada componente es un pasito más en el tiempo. Por eso definimos t = np.linspace (0,20,500) que crea un array de 500 componentes, eso sí! en nuestra interpretación sigue siendo escalar.
    De la misma manera tiene que pasar para la energía, es un escalar pero si lo queremos ver evolucionar en el tiempo, no nos queda otra que definirlo como un array.

    Cuando definís las variables así:
    theta = A*np.cos(omega*t+phi)
    vel= -omega*A*np.sin(omega*t+phi)
    acel= -omega**2*A*np.cos(omega*t+phi)
    lo que estás haciendo es hacer una cuenta con el array t (que tiene 500 componentes) que da resultados de 500 componentes también. Primero omega multiplica a cada componente de t, después phi suma a cada componente, se le aplica coseno a cada componente y asi…
    De esta manera las tres cosas siguen dando arrays de 500 componentes.

    Si esto queda claro avanzamos, no sin antes hacer una aclaración, ojo que definiste omega como g/l pero eso es omega cuadrado, omega = np.sqrt(g/l)

    Ahora sí, la primera parte del trabajo que calculás theta, vel y acel está muy bien, pero atenta que vel es theta punto, es una velocidad angular, idem para acel.

    La segunda parte te hacés un poco de lío, la idea es que calcules las cosas a partir de estas variables que obtuviste, no que generes nuevas. Entonces la energía cinética la deberías calcular con vel y no con el vector v que te armaste nuevo. De la misma manera Ep lo deberías calcular con el vector theta y Em la podés calcular como la suma de las dos o escribirla explicitamente (pero mejor si aprovechas lo que ya hiciste). De esta manera, la Em es una consecuencia de lo que hiciste y no una variable que armás desde 0.

    Tu problema antes era que al calcularla desde cero, lo armabas con x0 y v0 y te quedaba un numerito y no un array. Además, de esa manera forzabas a que sea constante y no podés sacar ninguna conclusión de ese resultado.

    Trata de hacerlo teniendo en cuenta todo esto y avisame si sale, sino lo volvemos a ver, vamos que se puede!

      • Hola de nuevo, hay algunas cosas que me faltaron antes, empecemos por los calculos, lo único que tenés mal es la Ep, tenés un signo menos que no va. más allá de cómo calcularlo que si tenés dudas después lo vemos, te cuento dos formas de chequearlo, una es analítica, fijate que cuando aumente theta, la masa va a estar más arriba y la energía potencial tiene que ser mayor, como lo escribiste vos pasa lo contrario. La otra forma de chequearlo es gráfica y tiene más sentido cuando usamos Python que cuando solo usamos papel y lápiz, hay un ejercicio clásico del cbc, donde te dibujan un carrito yendo por una montaña rusa y en función de la energía potencial tenés que ir diciendo a qué velocidad va. Esto es una forma muy linda de ver la Ep porque su gráfico coincide con la trayectoria del carrito, de la misma manera, el gráfico de esta energía potencial tiene que coincidir con la trayectoria de nuestra masa, o sea, ser concavo hacia arriba y a vos te está quedando al revés.

        Una vez que tengas bien eso, te va a dar constante la Em pero habría que aclarar algunas cosas, la idea para comparar es graficar Ep y Ec es ir comparandolas, incluso está bueno que estén en un mismo gráfico, para compararlas lo más importante es que las grafiques en función de la misma variable y lo más común es graficarlas en función de theta, lo mismo cuando grafiques Em. Por último, si graficas en graficos separados vas a ver que te queda una Em no cte y cuando lo grafiques juntos vas a ver que sí es cte, que raro no? Esto es por un problema de escala, la Em no va a ser cte porque toda la solución que estamos proponiendo es una aproximación, pero con los valores que vos pusiste, Em varía entre 0,0099 y 0,01 o sea nada, en nuesra aproximación esto es re cte. El tema es que cuando veas el gráfico solo de la Em Python te va a acomodar la escala para que veas las diferencias pero si graficas todo junto no puede hacer esto. Probalo!

        • Hola! Sii, lo de la Energía Potencial me había dado cuenta y me olvidé de cambiarlo, perdón.
          Después el resto finalmente lo entendí, mil gracias por tanta paciencia!!
          Saludos!

Comments are closed.