{ "cells": [ { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from scipy.integrate import odeint\n", "import sympy as smp\n", "from matplotlib import animation\n", "from matplotlib.animation import PillowWriter" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A diagram of the problem at hand:\n", "\n", "* The entire system depends on only two angles: $\\theta_1$ and $\\theta_2$\n", "* We will use these variables as our free variables" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", " \"drawing\"\n", "

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define all symbols we need for this problem using sympy:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "t, g, l1, l2, m1, m2, m3, k, L0 = smp.symbols('t g l_1 l_2 m_1 m_2 m_3 k L_0')\n", "the1, the2 = smp.symbols(r'\\theta_1 \\theta_2', cls=smp.Function)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define $\\theta(t)$ and $\\dot{\\theta}(t)$ and $\\ddot{\\theta}(t)$" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "the1 = the1(t)\n", "the2 = the2(t)\n", "the1_d = smp.diff(the1, t)\n", "the2_d = smp.diff(the2, t)\n", "the1_dd = smp.diff(the1_d, t)\n", "the2_dd = smp.diff(the2_d, t)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define the $x$ and $y$ coordinates of all three masses" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "x1 = l1*smp.cos(the1)\n", "y1 = -l1*smp.sin(the1)\n", "x2 = 2*x1\n", "y2 = 0\n", "x3 = x2 + l2*smp.sin(the2)\n", "y3 = -l2*smp.cos(the2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define both kinetic and potential energy:\n", "\n", "* Kinetic energy $T$ comes from the motion of the three masses\n", "* Potential energy $V$ comes from both the gravitational potential energy of the masses $mgy$ and the potential energy in the spring $\\frac{1}{2}kx^2$ where $x=x_2 - L_0$" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "T = smp.Rational(1,2) * m1 * (smp.diff(x1,t)**2 + smp.diff(y1,t)**2) \\\n", " +smp.Rational(1,2) * m2 * (smp.diff(x2,t)**2 + smp.diff(y2,t)**2) \\\n", " +smp.Rational(1,2) * m3 * (smp.diff(x3,t)**2 + smp.diff(y3,t)**2)\n", "\n", "V = m1*g*y1 + m2*g*y2 + m3*g*y3 +smp.Rational(1,2) * k * (x2-L0)**2\n", "L =T-V" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can look at the Lagrangian" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle g l_{1} m_{1} \\sin{\\left(\\theta_{1}{\\left(t \\right)} \\right)} + g l_{2} m_{3} \\cos{\\left(\\theta_{2}{\\left(t \\right)} \\right)} - \\frac{k \\left(- L_{0} + 2 l_{1} \\cos{\\left(\\theta_{1}{\\left(t \\right)} \\right)}\\right)^{2}}{2} + 2 l_{1}^{2} m_{2} \\sin^{2}{\\left(\\theta_{1}{\\left(t \\right)} \\right)} \\left(\\frac{d}{d t} \\theta_{1}{\\left(t \\right)}\\right)^{2} + \\frac{m_{1} \\left(l_{1}^{2} \\sin^{2}{\\left(\\theta_{1}{\\left(t \\right)} \\right)} \\left(\\frac{d}{d t} \\theta_{1}{\\left(t \\right)}\\right)^{2} + l_{1}^{2} \\cos^{2}{\\left(\\theta_{1}{\\left(t \\right)} \\right)} \\left(\\frac{d}{d t} \\theta_{1}{\\left(t \\right)}\\right)^{2}\\right)}{2} + \\frac{m_{3} \\left(l_{2}^{2} \\sin^{2}{\\left(\\theta_{2}{\\left(t \\right)} \\right)} \\left(\\frac{d}{d t} \\theta_{2}{\\left(t \\right)}\\right)^{2} + \\left(- 2 l_{1} \\sin{\\left(\\theta_{1}{\\left(t \\right)} \\right)} \\frac{d}{d t} \\theta_{1}{\\left(t \\right)} + l_{2} \\cos{\\left(\\theta_{2}{\\left(t \\right)} \\right)} \\frac{d}{d t} \\theta_{2}{\\left(t \\right)}\\right)^{2}\\right)}{2}$" ], "text/plain": [ "g*l_1*m_1*sin(\\theta_1(t)) + g*l_2*m_3*cos(\\theta_2(t)) - k*(-L_0 + 2*l_1*cos(\\theta_1(t)))**2/2 + 2*l_1**2*m_2*sin(\\theta_1(t))**2*Derivative(\\theta_1(t), t)**2 + m_1*(l_1**2*sin(\\theta_1(t))**2*Derivative(\\theta_1(t), t)**2 + l_1**2*cos(\\theta_1(t))**2*Derivative(\\theta_1(t), t)**2)/2 + m_3*(l_2**2*sin(\\theta_2(t))**2*Derivative(\\theta_2(t), t)**2 + (-2*l_1*sin(\\theta_1(t))*Derivative(\\theta_1(t), t) + l_2*cos(\\theta_2(t))*Derivative(\\theta_2(t), t))**2)/2" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "L" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Get Lagrange's equations\n", "\n", "$$\\frac{\\partial L}{\\partial \\theta_1} - \\frac{d}{dt}\\frac{\\partial L}{\\partial \\dot{\\theta_1}} = 0$$\n", "$$\\frac{\\partial L}{\\partial \\theta_2} - \\frac{d}{dt}\\frac{\\partial L}{\\partial \\dot{\\theta_2}} = 0$$" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [], "source": [ "LE1 = smp.diff(L, the1) - smp.diff(smp.diff(L, the1_d), t).simplify()\n", "LE2 = smp.diff(L, the2) - smp.diff(smp.diff(L, the2_d), t).simplify()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Solve Lagranges equations (this assumes that `LE1` and `LE2` are both equal to zero)\n", "\n", "* We solve these equations (which are **linear** in $\\ddot{\\theta_1}$ and $\\ddot{\\theta_2}$) for $\\ddot{\\theta_1}$ and $\\ddot{\\theta_2}$." ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "sols = smp.solve([LE1, LE2], (the1_dd, the2_dd),\n", " simplify=False, rational=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we have \n", "\n", "* $\\frac{d^2 \\theta_1}{dt^2} = ...$\n", "* $\\frac{d^2 \\theta_2}{dt^2} = ...$\n", "\n", "These are two second order ODEs! In python we can only solve systems of first order ODEs. Any system of second order ODEs can be converted as follows:\n", "\n", "1. Define $z_1 = d\\theta_1/dt$ and $z_2=d\\theta_2/dt$\n", "2. Then $dz_1/dt = d^2\\theta_1/dt^2$ and $dz_2/dt = d^2\\theta_2/dt^2$\n", "\n", "Now we get a system of 4 first order ODEs (as opposed to 2 second order ones)\n", "\n", "* $d z_1/dt = ...$\n", "* $d\\theta_1/dt = z_1$\n", "* $d z_2/dt = ...$\n", "* $d\\theta_2/dt = z_1$\n", "\n", "We need to convert the **symbolic** expressions above to numerical functions so we can use them in a numerical python solver. For this we use `smp.lambdify`" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [], "source": [ "dz1dt_f = smp.lambdify((t,g,k,L0,m1,m2,m3,l1,l2,the1,the2,the1_d,the2_d), sols[the1_dd])\n", "dz2dt_f = smp.lambdify((t,g,k,L0,m1,m2,m3,l1,l2,the1,the2,the1_d,the2_d), sols[the2_dd])\n", "dthe1dt_f = smp.lambdify(the1_d, the1_d)\n", "dthe2dt_f = smp.lambdify(the2_d, the2_d)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now define $\\vec{S} = (\\theta_1, z_1, \\theta_2, z_2)$. IF we're going to use an ODE solver in python, we need to write a function that takes in $\\vec{S}$ and $t$ and returns $d\\vec{S}/dt$. In other words, we need to define $d\\vec{S}/dt (\\vec{S}, t)$\n", "\n", "* Our system of ODEs can be fully specified using $d\\vec{S}/dt$ and depends only on $\\vec{S}$ and $t$" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [], "source": [ "def dSdt(S, t, g, k, L0, m1, m2, m3, l1, l2):\n", " the1, z1, the2, z2 = S\n", " return [\n", " dthe1dt_f(z1),\n", " dz1dt_f(t,g,k,L0,m1,m2,m3,l1,l2,the1,the2,z1,z2),\n", " dthe2dt_f(z2),\n", " dz2dt_f(t,g,k,L0,m1,m2,m3,l1,l2,the1,the2,z1,z2),\n", " ]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Solve the system of ODEs using scipys `odeint` method" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [], "source": [ "t = np.linspace(0, 40, 1001) # s\n", "g = 9.81 #m/s^2\n", "k = 30 # N/m\n", "m1=2 # kg\n", "m2=2 # kg\n", "m3=1 # kg\n", "l1 = 1 # m\n", "l2 = 1 # m\n", "L0 = 1.5*l1 # m\n", "ans = odeint(dSdt, y0=[1, -1, -1, 1], t=t, args=(g, k, L0, m1, m2, m3, l1, l2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "25 times per second (number of data points). This will be important for animating later on." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Can obtain $\\theta_1(t)$ and $\\theta_2(t)$ from the answer" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [], "source": [ "the1 = ans.T[0]\n", "the2 = ans.T[2]" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(t, the1)\n", "plt.plot(t, the2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's a function that takes in $\\theta_1$ and $\\theta_2$ and returns the location (x,y) of the three masses. This will be used for animation" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [], "source": [ "def get_x1y1x2y2x3y3(t, the1, the2, l1, l2):\n", " return (l1*np.cos(the1),\n", " -l1*np.sin(the1),\n", " 2*l1*np.cos(the1),\n", " np.zeros(len(the1)),\n", " 2*l1*np.cos(the1) + l2*np.sin(the2),\n", " -l2*np.cos(the2))\n", "\n", "x1, y1, x2, y2, x3, y3 = get_x1y1x2y2x3y3(t, ans.T[0], ans.T[2], l1, l2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is the code for a simple animation" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def animate(i):\n", " ln1.set_data([0, x1[i], x2[i], x3[i]], [0, y1[i], y2[i], y3[i]])\n", " ln2.set_data([0, x2[i]], [0, y2[i]])\n", " \n", "fig, ax = plt.subplots(1,1, figsize=(8,8))\n", "ax.set_facecolor('k')\n", "ax.get_xaxis().set_ticks([]) # enable this to hide x axis ticks\n", "ax.get_yaxis().set_ticks([]) # enable this to hide y axis ticks\n", "ln1, = plt.plot([], [], 'ro--', lw=3, markersize=8)\n", "ln2, = plt.plot([], [], 'ro--', lw=3, markersize=8)\n", "ax.set_ylim(-4,4)\n", "ax.set_xlim(-4,4)\n", "ani = animation.FuncAnimation(fig, animate, frames=1000, interval=50)\n", "ani.save('pen.gif',writer='pillow',fps=25)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }