From 413fea5185345bb4481b2095a397be8a0ced11cd Mon Sep 17 00:00:00 2001 From: CallumJHays Date: Sat, 23 Oct 2021 18:41:53 +1000 Subject: [PATCH] fix: actually plot more illuminating values --- examples/cart_spring_cargo.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/cart_spring_cargo.ipynb b/examples/cart_spring_cargo.ipynb index 53dd013..787635d 100644 --- a/examples/cart_spring_cargo.ipynb +++ b/examples/cart_spring_cargo.ipynb @@ -1 +1 @@ -{"cells":[{"cell_type":"markdown","metadata":{},"source":["![Cart Spring Problem Question and Diagram](./imgs/cart_spring_cargo.png)"]},{"cell_type":"markdown","metadata":{},"source":["Let $x_1$, $x_2$ and $x_3$ be the distance in the x direction from equilibrium position for bodies $m_1$, $m_2$ and $m_3$ respectively"]},{"cell_type":"code","execution_count":1,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["\u001b[38;5;4m┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓\u001b[0m\n","\u001b[38;5;4m┃\u001b[0m Entity \u001b[38;5;4m┃\u001b[0m Units \u001b[38;5;4m┃\u001b[0m\n","\u001b[38;5;4m┣━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━┫\u001b[0m\n","\u001b[38;5;4m┃\u001b[0m x1(t)\u001b[0m \u001b[38;5;4m┃\u001b[0m meter\u001b[0m \u001b[38;5;4m┃\u001b[0m\n","\u001b[38;5;4m┃\u001b[0m x2(t)\u001b[0m \u001b[38;5;4m┃\u001b[0m meter\u001b[0m \u001b[38;5;4m┃\u001b[0m\n","\u001b[38;5;4m┃\u001b[0m x3(t)\u001b[0m \u001b[38;5;4m┃\u001b[0m meter\u001b[0m \u001b[38;5;4m┃\u001b[0m\n","\u001b[38;5;4m┃\u001b[0m m1\u001b[0m \u001b[38;5;4m┃\u001b[0m kilogram\u001b[0m \u001b[38;5;4m┃\u001b[0m\n","\u001b[38;5;4m┃\u001b[0m m2\u001b[0m \u001b[38;5;4m┃\u001b[0m kilogram\u001b[0m \u001b[38;5;4m┃\u001b[0m\n","\u001b[38;5;4m┃\u001b[0m m3\u001b[0m \u001b[38;5;4m┃\u001b[0m kilogram\u001b[0m \u001b[38;5;4m┃\u001b[0m\n","\u001b[38;5;4m┃\u001b[0m c\u001b[0m \u001b[38;5;4m┃\u001b[0m newton*second/meter\u001b[0m \u001b[38;5;4m┃\u001b[0m\n","\u001b[38;5;4m┃\u001b[0m F(t)\u001b[0m \u001b[38;5;4m┃\u001b[0m newton\u001b[0m \u001b[38;5;4m┃\u001b[0m\n","\u001b[38;5;4m┃\u001b[0m k1\u001b[0m \u001b[38;5;4m┃\u001b[0m newton/meter\u001b[0m \u001b[38;5;4m┃\u001b[0m\n","\u001b[38;5;4m┃\u001b[0m k2\u001b[0m \u001b[38;5;4m┃\u001b[0m newton/meter\u001b[0m \u001b[38;5;4m┃\u001b[0m\n","\u001b[38;5;4m┗━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━┛\u001b[0m\n","\n"]}],"source":["# Variable definitions\n","from mathpad import *\n","from IPython.display import display\n","\n","x1 = \"x1(t)\" * m\n","m1 = \"m1\" * kg\n","\n","x2 = \"x2(t)\" * m\n","m2 = \"m2\" * kg\n","\n","x3 = \"x3(t)\" * m\n","m3 = \"m3\" * kg\n","\n","c = \"c\" * N * s / m\n","F = \"F(t)\" * N\n","\n","k1 = \"k1\" * N / m\n","k2 = \"k2\" * N / m\n","\n","tabulate(x1, x2, x3, m1, m2, m3, c, F, k1, k2)"]},{"cell_type":"markdown","metadata":{},"source":["# Part A\n","TODO"]},{"cell_type":"markdown","metadata":{},"source":["# Part B"]},{"cell_type":"code","execution_count":2,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Kinetic Energy\n"]},{"data":{"text/latex":["$\\displaystyle \\frac{m_{1} \\dot{x}_{1}^{2}}{2} + \\frac{m_{2} \\dot{x}_{2}^{2}}{2} + \\frac{m_{3} \\dot{x}_{3}^{2}}{2} \\hspace{1.25em} \\frac{\\text{kg} \\text{m}^{2}}{\\text{s}^{2}}$"],"text/plain":["0.5*mDerivative(x1(t), t)**2 + 0.5*m2*Derivative(x2(t), t)**2 + 0.5*m3*Derivative(x3(t), t)**2 kilogram*meters**2/second**2"]},"execution_count":2,"metadata":{},"output_type":"execute_result"}],"source":["# Kinetic energy\n","from mathpad.mech import kinetic_energy, elastic_energy, euler_lagrange\n","\n","print(\"Kinetic Energy\")\n","T = kinetic_energy(m1, diff(x1)) + kinetic_energy(m2, diff(x2)) + kinetic_energy(m3, diff(x3))\n","T"]},{"cell_type":"code","execution_count":3,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Potential Energy\n"]},{"data":{"text/latex":["$\\displaystyle \\frac{k_{1} \\left(x_{1} - x_{2}\\right)^{2}}{2} + \\frac{k_{2} \\left(x_{2} - x_{3}\\right)^{2}}{2} \\hspace{1.25em} \\text{m} \\text{N}$"],"text/plain":["0.5*k(x1(t) - x2(t))**2 + 0.5*k2*(x2(t) - x3(t))**2 meter*newtons"]},"execution_count":3,"metadata":{},"output_type":"execute_result"}],"source":["print(\"Potential Energy\")\n","V = elastic_energy(k1, x2 - x1) + elastic_energy(k2, x3 - x2)\n","V"]},{"cell_type":"code","execution_count":4,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Damping Force between bodies 1 & 2:\n"]},{"data":{"text/latex":["$\\displaystyle c \\left(- \\dot{x}_{1} + \\dot{x}_{2}\\right) \\hspace{1.25em} \\text{N}$"],"text/plain":["c*(-Derivative(x1(t), t) + Derivative(x2(t), t)) newtons"]},"metadata":{},"output_type":"display_data"},{"name":"stdout","output_type":"stream","text":["Damping Force between bodies 1 & 3:\n"]},{"data":{"text/latex":["$\\displaystyle c \\left(- \\dot{x}_{1} + \\dot{x}_{3}\\right) \\hspace{1.25em} \\text{N}$"],"text/plain":["c*(-Derivative(x1(t), t) + Derivative(x3(t), t)) newtons"]},"metadata":{},"output_type":"display_data"}],"source":["print(\"Damping Force between bodies 1 & 2:\")\n","Fc2 = c * diff(x2 - x1)\n","display(Fc2)\n","\n","print(\"Damping Force between bodies 1 & 3:\")\n","Fc3 = c * diff(x3 - x1)\n","display(Fc3)"]},{"cell_type":"code","execution_count":5,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Non-Conservative Forces @ Body 1\n"]},{"data":{"text/latex":["$\\displaystyle - 2 c \\dot{x}_{1} + c \\dot{x}_{2} + c \\dot{x}_{3} + F \\hspace{1.25em} \\text{N}$"],"text/plain":["-2*c*Derivative(x1(t), t) + c*Derivative(x2(t), t) + c*Derivative(x3(t), t) + F(t) newtons"]},"metadata":{},"output_type":"display_data"},{"name":"stdout","output_type":"stream","text":["Dynamics of Body 1\n"]},{"data":{"text/latex":["$\\displaystyle k_{1} \\left(x_{1} - x_{2}\\right) + m_{1} \\ddot{x}_{1} = - 2 c \\dot{x}_{1} + c \\dot{x}_{2} + c \\dot{x}_{3} + F \\hspace{1.25em} \\frac{\\text{kg} \\text{m}}{\\text{s}^{2}}$"],"text/plain":["k(x1(t) - x2(t)) + mDerivative(x1(t), (t, 2)) = -2*c*Derivative(x1(t), t) + c*Derivative(x2(t), t) + c*Derivative(x3(t), t) + F(t) kilogram*meter/second**2"]},"execution_count":5,"metadata":{},"output_type":"execute_result"}],"source":["print(\"Non-Conservative Forces @ Body 1\")\n","Qx1 = F + Fc2 + Fc3\n","display(Qx1)\n","\n","print(\"Dynamics of Body 1\")\n","x1_dynamics = euler_lagrange(T, V, Qx1, x1)\n","x1_dynamics"]},{"cell_type":"code","execution_count":6,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Non-Conservative Forces @ Body 2\n"]},{"data":{"text/latex":["$\\displaystyle - c \\left(- \\dot{x}_{1} + \\dot{x}_{2}\\right) \\hspace{1.25em} \\text{N}$"],"text/plain":["-c*(-Derivative(x1(t), t) + Derivative(x2(t), t)) newtons"]},"metadata":{},"output_type":"display_data"},{"name":"stdout","output_type":"stream","text":["Dynamics of Body 1\n"]},{"data":{"text/latex":["$\\displaystyle - k_{1} \\left(x_{1} - x_{2}\\right) + k_{2} \\left(x_{2} - x_{3}\\right) + m_{2} \\ddot{x}_{2} = - c \\left(- \\dot{x}_{1} + \\dot{x}_{2}\\right) \\hspace{1.25em} \\frac{\\text{kg} \\text{m}}{\\text{s}^{2}}$"],"text/plain":["-k(x1(t) - x2(t)) + k2*(x2(t) - x3(t)) + m2*Derivative(x2(t), (t, 2)) = -c*(-Derivative(x1(t), t) + Derivative(x2(t), t)) kilogram*meter/second**2"]},"execution_count":6,"metadata":{},"output_type":"execute_result"}],"source":["print(\"Non-Conservative Forces @ Body 2\")\n","Qx2 = -Fc2\n","display(Qx2)\n","\n","print(\"Dynamics of Body 1\")\n","x2_dynamics = euler_lagrange(T, V, Qx2, x2)\n","x2_dynamics"]},{"cell_type":"code","execution_count":7,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Non-Conservative Forces @ Body 3\n"]},{"data":{"text/latex":["$\\displaystyle - c \\left(- \\dot{x}_{1} + \\dot{x}_{3}\\right) \\hspace{1.25em} \\text{N}$"],"text/plain":["-c*(-Derivative(x1(t), t) + Derivative(x3(t), t)) newtons"]},"metadata":{},"output_type":"display_data"},{"name":"stdout","output_type":"stream","text":["Dynamics of Body 3\n"]},{"data":{"text/latex":["$\\displaystyle - k_{2} \\left(x_{2} - x_{3}\\right) + m_{3} \\ddot{x}_{3} = - c \\left(- \\dot{x}_{1} + \\dot{x}_{3}\\right) \\hspace{1.25em} \\frac{\\text{kg} \\text{m}}{\\text{s}^{2}}$"],"text/plain":["-k2*(x2(t) - x3(t)) + m3*Derivative(x3(t), (t, 2)) = -c*(-Derivative(x1(t), t) + Derivative(x3(t), t)) kilogram*meter/second**2"]},"execution_count":7,"metadata":{},"output_type":"execute_result"}],"source":["print(\"Non-Conservative Forces @ Body 3\")\n","Qx3 = -Fc3\n","display(Qx3)\n","\n","print(\"Dynamics of Body 3\")\n","x3_dynamics = euler_lagrange(T, V, Qx3, x3)\n","x3_dynamics"]},{"cell_type":"code","execution_count":16,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Solving finished. Simulating...\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"9e560f60ee1a44e18ddb30e2c2bf7c5f","version_major":2,"version_minor":0},"text/plain":[" 0%| | 0/10 [00:00024681000.511.522.533.5x1(t) metersx2(t) metersx3(t) metersSolution #1"},"metadata":{},"output_type":"display_data"}],"source":["system_dynamics = [\n"," x1_dynamics,\n"," x2_dynamics,\n"," x3_dynamics,\n","]\n","\n","sim_data = simulate_dynamic_system(system_dynamics, x_f=10, max_step=0.01, substitute={\n"," k1: 1,\n"," k2: 1,\n"," m1: 1,\n"," m2: 1,\n"," m3: 1,\n"," c: 0.5,\n"," F: 0\n","}, initial_conditions={\n"," x1: 0,\n"," diff(x1): 1, \n"," x2: 0,\n"," diff(x2): 0,\n"," x3: 0,\n"," diff(x3): 0\n","}, record=diff([x1, x2, x3]), interactive_plots=False)\n"]}],"metadata":{"interpreter":{"hash":"bec35ff8d3ceac10428ff23ff3d495acaf5c2f0370f6a03008458d4f010ac403"},"kernelspec":{"display_name":"Python 3.9.1 64-bit ('mathpad-tPciuzSw-py3.9': poetry)","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.9.1"},"orig_nbformat":4},"nbformat":4,"nbformat_minor":2} +{"cells":[{"cell_type":"markdown","metadata":{},"source":["![Cart Spring Problem Question and Diagram](./imgs/cart_spring_cargo.png)"]},{"cell_type":"markdown","metadata":{},"source":["Let $x_1$, $x_2$ and $x_3$ be the distance in the x direction from equilibrium position for bodies $m_1$, $m_2$ and $m_3$ respectively"]},{"cell_type":"code","execution_count":1,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["\u001b[38;5;4m┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓\u001b[0m\n","\u001b[38;5;4m┃\u001b[0m Entity \u001b[38;5;4m┃\u001b[0m Units \u001b[38;5;4m┃\u001b[0m\n","\u001b[38;5;4m┣━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━┫\u001b[0m\n","\u001b[38;5;4m┃\u001b[0m x1(t)\u001b[0m \u001b[38;5;4m┃\u001b[0m meter\u001b[0m \u001b[38;5;4m┃\u001b[0m\n","\u001b[38;5;4m┃\u001b[0m x2(t)\u001b[0m \u001b[38;5;4m┃\u001b[0m meter\u001b[0m \u001b[38;5;4m┃\u001b[0m\n","\u001b[38;5;4m┃\u001b[0m x3(t)\u001b[0m \u001b[38;5;4m┃\u001b[0m meter\u001b[0m \u001b[38;5;4m┃\u001b[0m\n","\u001b[38;5;4m┃\u001b[0m m1\u001b[0m \u001b[38;5;4m┃\u001b[0m kilogram\u001b[0m \u001b[38;5;4m┃\u001b[0m\n","\u001b[38;5;4m┃\u001b[0m m2\u001b[0m \u001b[38;5;4m┃\u001b[0m kilogram\u001b[0m \u001b[38;5;4m┃\u001b[0m\n","\u001b[38;5;4m┃\u001b[0m m3\u001b[0m \u001b[38;5;4m┃\u001b[0m kilogram\u001b[0m \u001b[38;5;4m┃\u001b[0m\n","\u001b[38;5;4m┃\u001b[0m c\u001b[0m \u001b[38;5;4m┃\u001b[0m newton*second/meter\u001b[0m \u001b[38;5;4m┃\u001b[0m\n","\u001b[38;5;4m┃\u001b[0m F(t)\u001b[0m \u001b[38;5;4m┃\u001b[0m newton\u001b[0m \u001b[38;5;4m┃\u001b[0m\n","\u001b[38;5;4m┃\u001b[0m k1\u001b[0m \u001b[38;5;4m┃\u001b[0m newton/meter\u001b[0m \u001b[38;5;4m┃\u001b[0m\n","\u001b[38;5;4m┃\u001b[0m k2\u001b[0m \u001b[38;5;4m┃\u001b[0m newton/meter\u001b[0m \u001b[38;5;4m┃\u001b[0m\n","\u001b[38;5;4m┗━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━┛\u001b[0m\n","\n"]}],"source":["# Variable definitions\n","from mathpad import *\n","from IPython.display import display\n","\n","x1 = \"x1(t)\" * m\n","m1 = \"m1\" * kg\n","\n","x2 = \"x2(t)\" * m\n","m2 = \"m2\" * kg\n","\n","x3 = \"x3(t)\" * m\n","m3 = \"m3\" * kg\n","\n","c = \"c\" * N * s / m\n","F = \"F(t)\" * N\n","\n","k1 = \"k1\" * N / m\n","k2 = \"k2\" * N / m\n","\n","tabulate(x1, x2, x3, m1, m2, m3, c, F, k1, k2)"]},{"cell_type":"markdown","metadata":{},"source":["# Part A\n","TODO"]},{"cell_type":"markdown","metadata":{},"source":["# Part B"]},{"cell_type":"code","execution_count":2,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Kinetic Energy\n"]},{"data":{"text/latex":["$\\displaystyle \\frac{m_{1} \\dot{x}_{1}^{2}}{2} + \\frac{m_{2} \\dot{x}_{2}^{2}}{2} + \\frac{m_{3} \\dot{x}_{3}^{2}}{2} \\hspace{1.25em} \\frac{\\text{kg} \\text{m}^{2}}{\\text{s}^{2}}$"],"text/plain":["0.5*mDerivative(x1(t), t)**2 + 0.5*m2*Derivative(x2(t), t)**2 + 0.5*m3*Derivative(x3(t), t)**2 kilogram*meters**2/second**2"]},"execution_count":2,"metadata":{},"output_type":"execute_result"}],"source":["# Kinetic energy\n","from mathpad.mech import kinetic_energy, elastic_energy, euler_lagrange\n","\n","print(\"Kinetic Energy\")\n","T = kinetic_energy(m1, diff(x1)) + kinetic_energy(m2, diff(x2)) + kinetic_energy(m3, diff(x3))\n","T"]},{"cell_type":"code","execution_count":3,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Potential Energy\n"]},{"data":{"text/latex":["$\\displaystyle \\frac{k_{1} \\left(x_{1} - x_{2}\\right)^{2}}{2} + \\frac{k_{2} \\left(x_{2} - x_{3}\\right)^{2}}{2} \\hspace{1.25em} \\text{m} \\text{N}$"],"text/plain":["0.5*k(x1(t) - x2(t))**2 + 0.5*k2*(x2(t) - x3(t))**2 meter*newtons"]},"execution_count":3,"metadata":{},"output_type":"execute_result"}],"source":["print(\"Potential Energy\")\n","V = elastic_energy(k1, x2 - x1) + elastic_energy(k2, x3 - x2)\n","V"]},{"cell_type":"code","execution_count":4,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Damping Force between bodies 1 & 2:\n"]},{"data":{"text/latex":["$\\displaystyle c \\left(- \\dot{x}_{1} + \\dot{x}_{2}\\right) \\hspace{1.25em} \\text{N}$"],"text/plain":["c*(-Derivative(x1(t), t) + Derivative(x2(t), t)) newtons"]},"metadata":{},"output_type":"display_data"},{"name":"stdout","output_type":"stream","text":["Damping Force between bodies 1 & 3:\n"]},{"data":{"text/latex":["$\\displaystyle c \\left(- \\dot{x}_{1} + \\dot{x}_{3}\\right) \\hspace{1.25em} \\text{N}$"],"text/plain":["c*(-Derivative(x1(t), t) + Derivative(x3(t), t)) newtons"]},"metadata":{},"output_type":"display_data"}],"source":["print(\"Damping Force between bodies 1 & 2:\")\n","Fc2 = c * diff(x2 - x1)\n","display(Fc2)\n","\n","print(\"Damping Force between bodies 1 & 3:\")\n","Fc3 = c * diff(x3 - x1)\n","display(Fc3)"]},{"cell_type":"code","execution_count":5,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Non-Conservative Forces @ Body 1\n"]},{"data":{"text/latex":["$\\displaystyle - 2 c \\dot{x}_{1} + c \\dot{x}_{2} + c \\dot{x}_{3} + F \\hspace{1.25em} \\text{N}$"],"text/plain":["-2*c*Derivative(x1(t), t) + c*Derivative(x2(t), t) + c*Derivative(x3(t), t) + F(t) newtons"]},"metadata":{},"output_type":"display_data"},{"name":"stdout","output_type":"stream","text":["Dynamics of Body 1\n"]},{"data":{"text/latex":["$\\displaystyle k_{1} \\left(x_{1} - x_{2}\\right) + m_{1} \\ddot{x}_{1} = - 2 c \\dot{x}_{1} + c \\dot{x}_{2} + c \\dot{x}_{3} + F \\hspace{1.25em} \\frac{\\text{kg} \\text{m}}{\\text{s}^{2}}$"],"text/plain":["k(x1(t) - x2(t)) + mDerivative(x1(t), (t, 2)) = -2*c*Derivative(x1(t), t) + c*Derivative(x2(t), t) + c*Derivative(x3(t), t) + F(t) kilogram*meter/second**2"]},"execution_count":5,"metadata":{},"output_type":"execute_result"}],"source":["print(\"Non-Conservative Forces @ Body 1\")\n","Qx1 = F + Fc2 + Fc3\n","display(Qx1)\n","\n","print(\"Dynamics of Body 1\")\n","x1_dynamics = euler_lagrange(T, V, Qx1, x1)\n","x1_dynamics"]},{"cell_type":"code","execution_count":6,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Non-Conservative Forces @ Body 2\n"]},{"data":{"text/latex":["$\\displaystyle - c \\left(- \\dot{x}_{1} + \\dot{x}_{2}\\right) \\hspace{1.25em} \\text{N}$"],"text/plain":["-c*(-Derivative(x1(t), t) + Derivative(x2(t), t)) newtons"]},"metadata":{},"output_type":"display_data"},{"name":"stdout","output_type":"stream","text":["Dynamics of Body 1\n"]},{"data":{"text/latex":["$\\displaystyle - k_{1} \\left(x_{1} - x_{2}\\right) + k_{2} \\left(x_{2} - x_{3}\\right) + m_{2} \\ddot{x}_{2} = - c \\left(- \\dot{x}_{1} + \\dot{x}_{2}\\right) \\hspace{1.25em} \\frac{\\text{kg} \\text{m}}{\\text{s}^{2}}$"],"text/plain":["-k(x1(t) - x2(t)) + k2*(x2(t) - x3(t)) + m2*Derivative(x2(t), (t, 2)) = -c*(-Derivative(x1(t), t) + Derivative(x2(t), t)) kilogram*meter/second**2"]},"execution_count":6,"metadata":{},"output_type":"execute_result"}],"source":["print(\"Non-Conservative Forces @ Body 2\")\n","Qx2 = -Fc2\n","display(Qx2)\n","\n","print(\"Dynamics of Body 1\")\n","x2_dynamics = euler_lagrange(T, V, Qx2, x2)\n","x2_dynamics"]},{"cell_type":"code","execution_count":7,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Non-Conservative Forces @ Body 3\n"]},{"data":{"text/latex":["$\\displaystyle - c \\left(- \\dot{x}_{1} + \\dot{x}_{3}\\right) \\hspace{1.25em} \\text{N}$"],"text/plain":["-c*(-Derivative(x1(t), t) + Derivative(x3(t), t)) newtons"]},"metadata":{},"output_type":"display_data"},{"name":"stdout","output_type":"stream","text":["Dynamics of Body 3\n"]},{"data":{"text/latex":["$\\displaystyle - k_{2} \\left(x_{2} - x_{3}\\right) + m_{3} \\ddot{x}_{3} = - c \\left(- \\dot{x}_{1} + \\dot{x}_{3}\\right) \\hspace{1.25em} \\frac{\\text{kg} \\text{m}}{\\text{s}^{2}}$"],"text/plain":["-k2*(x2(t) - x3(t)) + m3*Derivative(x3(t), (t, 2)) = -c*(-Derivative(x1(t), t) + Derivative(x3(t), t)) kilogram*meter/second**2"]},"execution_count":7,"metadata":{},"output_type":"execute_result"}],"source":["print(\"Non-Conservative Forces @ Body 3\")\n","Qx3 = -Fc3\n","display(Qx3)\n","\n","print(\"Dynamics of Body 3\")\n","x3_dynamics = euler_lagrange(T, V, Qx3, x3)\n","x3_dynamics"]},{"cell_type":"code","execution_count":17,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Solving finished. Simulating...\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"bd1a855c2c8445caa4c3235ea5f0752d","version_major":2,"version_minor":0},"text/plain":[" 0%| | 0/10 [00:00024681000.20.40.60.81Derivative(x1(t), t) meters/secondDerivative(x2(t), t) meters/secondDerivative(x3(t), t) meters/secondSolution #1"},"metadata":{},"output_type":"display_data"}],"source":["system_dynamics = [\n"," x1_dynamics,\n"," x2_dynamics,\n"," x3_dynamics,\n","]\n","\n","sim_data = simulate_dynamic_system(system_dynamics, x_f=10, max_step=0.01, substitute={\n"," k1: 1,\n"," k2: 1,\n"," m1: 1,\n"," m2: 1,\n"," m3: 1,\n"," c: 0.5,\n"," F: 0\n","}, initial_conditions={\n"," x1: 0,\n"," diff(x1): 1, \n"," x2: 0,\n"," diff(x2): 0,\n"," x3: 0,\n"," diff(x3): 0\n","}, record=diff([x1, x2, x3]), interactive_plots=False)\n"]}],"metadata":{"interpreter":{"hash":"bec35ff8d3ceac10428ff23ff3d495acaf5c2f0370f6a03008458d4f010ac403"},"kernelspec":{"display_name":"Python 3.9.1 64-bit ('mathpad-tPciuzSw-py3.9': poetry)","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.9.1"},"orig_nbformat":4},"nbformat":4,"nbformat_minor":2}