diff --git a/LearningPhysics-Programming.ipynb b/LearningPhysics-Programming-old.ipynb similarity index 100% copy from LearningPhysics-Programming.ipynb copy to LearningPhysics-Programming-old.ipynb diff --git a/LearningPhysics-Programming.ipynb b/LearningPhysics-Programming.ipynb index 10eaf3c..154bd21 100644 --- a/LearningPhysics-Programming.ipynb +++ b/LearningPhysics-Programming.ipynb @@ -1,942 +1,1034 @@ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " Workshop \"Teaching and Learning with Jupyter Notebooks\" 2021
\n", " C. Hardebolle, CC BY-NC-SA 4.0 Int.

\n", " How to use this notebook?
\n", " This notebook is made of text cells and code cells. The code cells have to be executed to see the result of the program. To execute a cell, simply select it and click on the \"play\" button () in the tool bar just above the notebook, or type shift + enter. It is important to execute the code cells in their order of appearance in the notebook.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Learning goals\n", + "# Learning goals\n", "\n", "After using this notebook, you should be able to:\n", "* Describe how the counterweight influences the position of the cable in the jeans problem\n", "* Analyze how the the counterweight and the position of the cable influence the tension force in the jeans problem\n", "* Illustrate what effects can high tension have on a cable\n", "* Use Python to make calculations\n", "\n", "
\n", "\n", "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# Question \n", + "# 1. The problem\n", "\n", "The question we are trying to answer in this notebook is the following: \n", - "Estimate which counterweight allows to suspend wet jeans (3kg) on the cable in the position illustrated below.\n", + "**Estimate which counterweight allows to suspend wet jeans (3kg) on the cable in the position illustrated below.**\n", "\n", - "\"suspended" + "\"suspended\n", + "\n", + "
\n", + " Activity
\n", + "\n", + "Execute the cell below, then vote for the answer you think is correct:
\n", + " A. 1.5 kg
\n", + " B. 3 kg
\n", + " C. 6 kg
\n", + " D. 20 kg
\n", + " E. 50 kg or more\n", + "
\n" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 20, "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# 1. Before anything\n", - "\n", - "The activities below allow you to explore how the counterweight affects the position of the jeans suspended on the cable. \n", - "Before starting, it is useful to note down **which counterweight you think allows to suspend the jeans in the expected position** (i.e. your answer to the clicker question):" + "from IPython.display import IFrame\n", + "IFrame('https://speakup.epfl.ch/ng/room/27058', 600, 600)" ] }, { - "cell_type": "raw", + "cell_type": "markdown", "metadata": {}, "source": [ - "Just note down your answer here (this cell is for note taking)." + "
\n", + "\n", + "**The goal of the following activities is to help you find the correct answer by exploring how the counterweight affects the position of the jeans suspended on the cable.**" ] }, { "cell_type": "markdown", "metadata": { "toc-hr-collapsed": false }, "source": [ "---" ] }, { "cell_type": "markdown", "metadata": { "toc-hr-collapsed": false }, "source": [ "# 2. Analyzing the problem\n", "\n", - "First let's analyze the question into a little bit more details. \n", - "\n", - "## Looking at the jeans\n", - "\n", - "Let's take for granted that the jeans do not move on the cable, i.e. the whole system is in static equilibrium. Then it is just like the cable would be attached to fixed points on both sides, we can ignore the pulley. Let's make a sketch.\n", + "Our first step, as with any problem, should be to analyze the question into more details and this includes:\n", + "* Simplifying the situation\n", + "* Making a sketch \n", + "* Identifying the parameters of the problem" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "toc-hr-collapsed": false + }, + "source": [ + "## How can we simplify the problem?\n", + "We can make the assumption that the jeans do not move on the cable, i.e. the whole system is in static equilibrium. \n", + "In that case, it is like the cable is attached to fixed points on both sides, we can ignore the pulley. Let's make a sketch.\n", "\n", "\"sketch\"\n", "\n", - "Therefore we are in a situation which is identical to the one seen in the mini-lecture, except that the cable is attached to poles instead of the ceiling. This doesn't change anything in terms of the forces applied to the jeans, which are:\n", + "Therefore we are in a situation which is **identical to the one seen in the mini-lecture**.
\n", + "The only difference is that the cable is attached to poles instead of the ceiling but this doesn't change anything in terms of the forces applied to the jeans, which are:\n", "* the weight $\\vec{F}$ \n", - "* the tensions $\\vec{T}$ in both sides of the cable, which are identical in norm if we assume that the jeans are suspended right in the middle of the cable\n", - "\n", - "However we need to figure out where the angle $\\alpha$ is. If we draw a line that represents the horizon, then the angle $\\alpha$ is the angle between the cable and the horizon. \n", + "* the tensions $\\vec{T}$ on both sides of the cable, which are identical in norm if we assume that the jeans are suspended right in the middle of the cable" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "toc-hr-collapsed": false + }, + "source": [ + "## Where is the angle $\\alpha$?\n", + "However we need to figure out where the angle $\\alpha$ is. If we draw a line that represents the horizon, then **the angle $\\alpha$ is the angle between the cable and the horizon**.
\n", "Let's add the forces and the angle to our sketch.\n", "\n", "\"sketch\"\n", "\n", - "We can therefore use the equation seen in the mini-lecture, which gives the tension in the cable depending on the mass $m$ of the suspended object, the angle $\\alpha$ that the cable makes with the horizon and the gravity of earth $g$ - and this is equation number (1):\n", + "We can therefore **use the equation seen in the mini-lecture, which gives the tension in the cable** depending on the mass $m$ of the suspended object, the angle $\\alpha$ that the cable makes with the horizon and the gravity of earth $g$:\n", "\n", "$\n", "\\begin{align}\n", "\\lvert\\vec{T}\\rvert = \\frac{\\frac{1}{2}.m.g}{sin(\\alpha)}\n", "\\end{align}\n", "$\n", "\n", - "Now how can we relate this tention to the counterweight in our original question? \n", - "We need to look at the forces applied on the counterweight. " + "Computing the tension in the cable will help us figure out the counterweight necessary to maintain the cable taught: intuitively, we can predict that **the higher the tension in the cable, the heavier the counterweight needed** to keep the cable taught. \n", + "\n", + "Now, we know that the mass of the jeans is $m =$ 3kg and that the gravity of earth is $g =$ 9.81m.s$^{-2}$, but we don't know the value of $\\alpha$..." ] }, { "cell_type": "markdown", "metadata": { "toc-hr-collapsed": false }, "source": [ - "## Looking at the counterweight\n", + "## How much is the angle $\\alpha$?\n", "\n", - "Again, if the counterweight is not moving, it is like if it were attached to a fixed point and we can ignore the pulley. \n", - "Let's make a sketch:\n", + "From the sketch in the original question, we can guess that $\\alpha$ is probably quite small, but how small?\n", "\n", - "\"sketch\"\n", - "\n", - "The forces applied on the counterweight are:\n", - "* the weight $\\vec{F_{cw}}$ \n", - "* the tensions in the cable: because a pulley simply changes the direction of a force, actually the tension in the cable which attaches the counterweight is the same (in norm) as the tension $\\vec{T}$ in the cable which attaches the jeans.\n", + "Of course this depends somewhat on the geometry of the installation. \n", + "In the following, we are going to consider a situation with poles 1.5 meters high, separated by a 5 meter distance.\n", "\n", - "Now because the counterweight is not moving, it means that the tension $\\vec{T}$ compensates exactly the weight $\\vec{F_{cw}}$ (as we have seen in the mini-lecture). \n", - "Therefore we can write - and this is equation number (2):\n", + "We are going to use the ``suspendedobjects`` library to visualize concretely what a particular value for $\\alpha$ means when the jeans (3 kg) are suspended on a cable taught between poles 1.5 meters high, separated by a 5 meter distance.\n", "\n", - "$\n", - "\\begin{align}\n", - "\\lvert\\vec{T}\\rvert = m_{cw}.g\n", - "\\end{align}\n", - "$\n", + "
\n", + " Activity
\n", "\n", - "What we are looking for is the mass of the counterweight $m_{cw}$ that allows to suspend the jeans in the right position. \n", - "To find it out, we need to use our equation number (2) in combination with our equation number (1). \n" + "Execute the code cell below to generate the visualization.
\n", + "Then change the value of ``alpha`` and experiment with multiple values, to decide which value best reflects the angle in the original question above.\n", + "
\n" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 21, "metadata": {}, - "source": [ - "## Finding the mass of the counterweight\n", - "\n", - "From the analysis above we have two equations (1) and (2):\n", - "\n", - "$\n", - "\\begin{align}\n", - "\\left\\{\\begin{matrix}\\lvert\\vec{T}\\rvert = \\frac{\\frac{1}{2}.m.g}{sin(\\alpha)} \\\\ \\lvert\\vec{T}\\rvert = m_{cw}.g\\end{matrix}\\right. \n", - "\\end{align}\n", - "$\n", - "\n", - "Since the left side is the same, we can write an equality between the two right-sides of these equations:\n", - "\n", - "$\n", - "\\begin{align}\n", - "\\frac{\\frac{1}{2}.m.g}{sin(\\alpha)} = m_{cw}.g\n", - "\\end{align}\n", - "$\n", - "\n", - "We can now isolate $m_{cw}$ on one side of the equation:\n", - "\n", - "$\n", - "\\begin{align}\n", - "m_{cw} = \\frac{\\frac{1}{2}.m.g}{sin(\\alpha).g} \n", - "\\end{align}\n", - "$\n", - "\n", - "The two $g$ cancel out, which gives: \n", - "\n", - "$\n", - "\\begin{align}\n", - "m_{cw} = \\frac{\\frac{1}{2}.m}{sin(\\alpha)} \n", - "\\end{align}\n", - "$\n", - "\n", - "Great we can now compute the mass of the counterweight!
\n", - "In the following we are going to use Python to **compute the mass of the counterweight** for **different values of the angle $\\alpha$**." + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": [ + "(function(root) {\n", + " function embed_document(root) {\n", + " \n", + " var docs_json = {\"719df1e1-895b-450b-8160-fcb5de1a55a8\":{\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"2624\",\"subtype\":\"Figure\",\"type\":\"Plot\"}]},\"id\":\"2696\",\"type\":\"Row\"},{\"attributes\":{\"source\":{\"id\":\"2670\",\"type\":\"ColumnDataSource\"}},\"id\":\"2674\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"2689\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"2690\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"2691\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"2693\",\"type\":\"CDSView\"}},\"id\":\"2692\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"overlay\":{\"id\":\"2818\",\"type\":\"BoxAnnotation\"}},\"id\":\"2647\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"callback\":null,\"data\":{\"alpha_degrees\":[20],\"alpha_text\":[\"\\u237a = 20.00 \\u00b0\"],\"height_text\":[\"h = 0.59 m\"],\"m_counterweight\":[0.0],\"x\":[2.5],\"y\":[0.5900744143344941]},\"selected\":{\"id\":\"2820\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"2819\",\"type\":\"UnionRenderers\"}},\"id\":\"2675\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2648\",\"type\":\"SaveTool\"},{\"attributes\":{\"source\":{\"id\":\"2689\",\"type\":\"ColumnDataSource\"}},\"id\":\"2693\",\"type\":\"CDSView\"},{\"attributes\":{\"line_cap\":\"round\",\"line_width\":8,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2660\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2819\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"level\":\"glyph\",\"source\":{\"id\":\"2675\",\"type\":\"ColumnDataSource\"},\"text\":{\"field\":\"alpha_text\"},\"x\":{\"value\":0},\"x_offset\":{\"value\":50},\"y\":{\"value\":1.5},\"y_offset\":{\"value\":-20}},\"id\":\"2694\",\"type\":\"LabelSet\"},{\"attributes\":{},\"id\":\"2649\",\"type\":\"ResetTool\"},{\"attributes\":{\"callback\":null,\"end\":1.55,\"start\":-0.05},\"id\":\"2629\",\"type\":\"Range1d\"},{\"attributes\":{\"fill_color\":{\"value\":\"black\"},\"line_width\":{\"value\":2},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2677\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2650\",\"type\":\"HelpTool\"},{\"attributes\":{\"below\":[{\"id\":\"2635\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"2639\",\"type\":\"Grid\"},{\"id\":\"2644\",\"type\":\"Grid\"},{\"id\":\"2658\",\"type\":\"Span\"},{\"id\":\"2669\",\"type\":\"Span\"},{\"id\":\"2681\",\"type\":\"LabelSet\"},{\"id\":\"2694\",\"type\":\"LabelSet\"}],\"left\":[{\"id\":\"2640\",\"type\":\"LinearAxis\"}],\"outline_line_color\":{\"value\":null},\"plot_height\":400,\"plot_width\":800,\"renderers\":[{\"id\":\"2662\",\"type\":\"GlyphRenderer\"},{\"id\":\"2667\",\"type\":\"GlyphRenderer\"},{\"id\":\"2673\",\"type\":\"GlyphRenderer\"},{\"id\":\"2679\",\"type\":\"GlyphRenderer\"},{\"id\":\"2687\",\"type\":\"GlyphRenderer\"},{\"id\":\"2692\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"2625\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"2651\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"2627\",\"type\":\"Range1d\"},\"x_scale\":{\"id\":\"2631\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"2629\",\"type\":\"Range1d\"},\"y_scale\":{\"id\":\"2633\",\"type\":\"LinearScale\"}},\"id\":\"2624\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2820\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"line_width\":{\"value\":2},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2678\",\"type\":\"Circle\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"2645\",\"type\":\"PanTool\"},{\"id\":\"2646\",\"type\":\"WheelZoomTool\"},{\"id\":\"2647\",\"type\":\"BoxZoomTool\"},{\"id\":\"2648\",\"type\":\"SaveTool\"},{\"id\":\"2649\",\"type\":\"ResetTool\"},{\"id\":\"2650\",\"type\":\"HelpTool\"}]},\"id\":\"2651\",\"type\":\"Toolbar\"},{\"attributes\":{\"data_source\":{\"id\":\"2675\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"2677\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"2678\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"2680\",\"type\":\"CDSView\"}},\"id\":\"2679\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_cap\":\"round\",\"line_color\":\"#1f77b4\",\"line_width\":8,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2661\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2631\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"2675\",\"type\":\"ColumnDataSource\"}},\"id\":\"2680\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"2659\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"2660\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"2661\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"2663\",\"type\":\"CDSView\"}},\"id\":\"2662\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2821\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"callback\":null,\"end\":5.2,\"start\":-0.2},\"id\":\"2627\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"2822\",\"type\":\"Selection\"},{\"attributes\":{\"level\":\"glyph\",\"source\":{\"id\":\"2675\",\"type\":\"ColumnDataSource\"},\"text\":{\"field\":\"height_text\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":8},\"y\":{\"field\":\"y\"},\"y_offset\":{\"value\":-20}},\"id\":\"2681\",\"type\":\"LabelSet\"},{\"attributes\":{\"axis_label\":\"Height (m)\",\"formatter\":{\"id\":\"2817\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"2641\",\"type\":\"BasicTicker\"}},\"id\":\"2640\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"2659\",\"type\":\"ColumnDataSource\"}},\"id\":\"2663\",\"type\":\"CDSView\"},{\"attributes\":{\"axis_label\":\"Distance (m)\",\"formatter\":{\"id\":\"2815\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"2636\",\"type\":\"BasicTicker\"}},\"id\":\"2635\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2823\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":[5,5],\"y\":[0,1.5]},\"selected\":{\"id\":\"2824\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"2823\",\"type\":\"UnionRenderers\"}},\"id\":\"2664\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"align\":\"center\",\"text\":\"Suspended object (3 kg)\"},\"id\":\"2625\",\"type\":\"Title\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"2818\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2824\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2633\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_cap\":\"round\",\"line_width\":8,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2665\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":[0,2.5,5],\"y\":[1.5,0.5900744143344941,1.5]},\"selected\":{\"id\":\"2828\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"2827\",\"type\":\"UnionRenderers\"}},\"id\":\"2683\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2825\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2817\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.1,\"line_cap\":\"round\",\"line_color\":\"#1f77b4\",\"line_width\":8,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2666\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2826\",\"type\":\"Selection\"},{\"attributes\":{\"line_cap\":\"round\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2685\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"2664\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"2665\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"2666\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"2668\",\"type\":\"CDSView\"}},\"id\":\"2667\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"ticker\":{\"id\":\"2636\",\"type\":\"BasicTicker\"},\"visible\":false},\"id\":\"2639\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2827\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_cap\":\"round\",\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2686\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"2664\",\"type\":\"ColumnDataSource\"}},\"id\":\"2668\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2636\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2828\",\"type\":\"Selection\"},{\"attributes\":{\"data_source\":{\"id\":\"2683\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"2685\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"2686\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"2688\",\"type\":\"CDSView\"}},\"id\":\"2687\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"dimension\":1,\"ticker\":{\"id\":\"2641\",\"type\":\"BasicTicker\"},\"visible\":false},\"id\":\"2644\",\"type\":\"Grid\"},{\"attributes\":{\"location\":0},\"id\":\"2669\",\"type\":\"Span\"},{\"attributes\":{},\"id\":\"2829\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2641\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"2683\",\"type\":\"ColumnDataSource\"}},\"id\":\"2688\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2646\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"callback\":null,\"data\":{},\"selected\":{\"id\":\"2826\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"2825\",\"type\":\"UnionRenderers\"}},\"id\":\"2670\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":{\"value\":\"gray\"},\"line_dash\":[6],\"location\":1.5},\"id\":\"2658\",\"type\":\"Span\"},{\"attributes\":{},\"id\":\"2830\",\"type\":\"Selection\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"hatch_color\":{\"value\":\"gray\"},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":0.1},\"left\":{\"value\":-0.2},\"line_color\":{\"value\":\"white\"},\"right\":{\"value\":5.2},\"y\":{\"value\":-0.05}},\"id\":\"2671\",\"type\":\"HBar\"},{\"attributes\":{},\"id\":\"2815\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":[0.44999999999999996,0.2819077862357725],\"y\":[1.5,1.3973939570022993]},\"selected\":{\"id\":\"2830\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"2829\",\"type\":\"UnionRenderers\"}},\"id\":\"2689\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2645\",\"type\":\"PanTool\"},{\"attributes\":{\"line_color\":\"gray\",\"line_dash\":[2,2],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2690\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":[0,0],\"y\":[0,1.5]},\"selected\":{\"id\":\"2822\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"2821\",\"type\":\"UnionRenderers\"}},\"id\":\"2659\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_color\":{\"value\":\"gray\"},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":0.1},\"left\":{\"value\":-0.2},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"right\":{\"value\":5.2},\"y\":{\"value\":-0.05}},\"id\":\"2672\",\"type\":\"HBar\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_dash\":[2,2],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2691\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"2670\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"2671\",\"type\":\"HBar\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"2672\",\"type\":\"HBar\"},\"selection_glyph\":null,\"view\":{\"id\":\"2674\",\"type\":\"CDSView\"}},\"id\":\"2673\",\"type\":\"GlyphRenderer\"}],\"root_ids\":[\"2696\"]},\"title\":\"Bokeh Application\",\"version\":\"1.4.0\"}};\n", + " var render_items = [{\"docid\":\"719df1e1-895b-450b-8160-fcb5de1a55a8\",\"notebook_comms_target\":\"2831\",\"roots\":{\"2696\":\"836c6ffd-f54e-49ef-aa78-b86294331cfa\"}}];\n", + " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", + "\n", + " }\n", + " if (root.Bokeh !== undefined) {\n", + " embed_document(root);\n", + " } else {\n", + " var attempts = 0;\n", + " var timer = setInterval(function(root) {\n", + " if (root.Bokeh !== undefined) {\n", + " clearInterval(timer);\n", + " embed_document(root);\n", + " } else {\n", + " attempts++;\n", + " if (attempts > 100) {\n", + " clearInterval(timer);\n", + " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", + " }\n", + " }\n", + " }, 10, root)\n", + " }\n", + "})(window);" + ], + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "2696" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "# Import the library\n", + "from lib.suspendedobjects import *\n", + "\n", + "# Choose a value for alpha, in degrees\n", + "alpha = 20 # CHANGE THE VALUE HERE\n", + "\n", + "# Visualize the angle in a concrete situation where poles measure 1.5 meters and are distant from 5 meters\n", + "lab = SuspendedObjectsLab(m_object = 3, height = 1.50, distance = 5)\n", + "lab.visualize_angle(alpha);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# 3. Computing the mass of the counterweight with Python\n", + "So, which value do you think we should use for $\\alpha$?
\n", "\n", - "We first need to import some useful libraries with predefined Python functions that we are going to use.\n", + "
\n", + " Activity
\n", "\n", - "**Execute the code cell below** so that the appropriate libraries get imported." + "Execute the code cell below and post a message in the chat with the value you suggest for $\\alpha$. \n", + "If someone already posted the value you were thinking about, simply vote for it (thumb-up icon on the left).\n", + "
\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "from lib.suspendedobjects import *" + "from IPython.display import IFrame\n", + "IFrame('https://speakup.epfl.ch/ng/room/50676', 600, 600)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Because we don't know exactly which value is the angle $\\alpha$ that we really want, apart that we can see that it must be small on the diagram, we will have to \"experiment\" a bit and compute the mass of the counterweight several times to " + "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Let's write a function\n", + "# 2. Computing the tension in the cable with Python\n", + "\n", + "Now that we have a value for $\\alpha$, we can compute the tension in the cable using the equation from the mini-lecture:\n", "\n", - "Now let's define a Python function that will compute the mass of the counterweight when we give it an angle $\\alpha$: \n", + "$\n", + "\\begin{align}\n", + "\\lvert\\vec{T}\\rvert = \\frac{\\frac{1}{2}.m.g}{sin(\\alpha)}\n", + "\\end{align}\n", + "$, where $m$ is the mass of the suspended object, $\\alpha$ the angle that the cable makes with the horizon and $g$ the gravity of earth.\n", + "\n", + "In the following we are going to use Python to **compute the tension in the cable** for **different values of the angle $\\alpha$**." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Creating a function to compute the tension in the cable\n", + "\n", + "Let's define a Python function that represents the equation of the tension and in which we are going to vary $\\alpha$:\n", "* The function takes one input parameters, `alpha`, which is the angle that the cable makes with the horizon. \n", - "* It returns the value of the mass of the counterweight as computed with: \n", + "* It returns the value of the mass of the counterweight as computed with the equation: \n", "$\n", "\\begin{align}\n", - "\\frac{\\frac{1}{2}.m}{sin(\\alpha)}\n", + "\\frac{\\frac{1}{2}.m.g}{sin(\\alpha)}\n", "\\end{align}\n", "$\n", "\n", - "In this equation, we have one constant which is the mass $m$ of the jeans, which we need to define as equal to 3 kg.\n", + "For this function to work, we need to define the values of two constants in the above equation:\n", + "- $g$ the gravity of earth, which is 9.81 m.s$^{-2}$\n", + "- $m$ the mass of the suspended object, which is 3 kg in the case of the jeans\n", + "\n", + "
\n", + " Activity
\n", "\n", - "**Execute the code cell below** so that this function gets defined in Python." + "Execute the code cell below so that this function gets defined in Python.\n", + "
\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": {}, - "outputs": [], - "source": [ - "# first let's define the mass of the jeans (3 kg)\n", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Function defined.\n" + ] + } + ], + "source": [ + "# Let's define the value of gravity\n", + "g = 9.81\n", + "\n", + "# And the mass of the jeans\n", "m = 3\n", "\n", - "# then let's define the function that computes the mass of the counterweight\n", - "def mass_counterweight(alpha):\n", - " return 1/2 * m / np.sin(alpha)\n", + "# Let's define the function\n", + "def tension_norm(alpha):\n", + " return (.5 * m * g) / np.sin(alpha)\n", "\n", - "# and print a message once this is done\n", + "# And display a message once it is defined\n", "print(\"Function defined.\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Now we can use our function to compute the mass of the counterweight for a given $\\alpha$ angle. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Using the function to compute the mass of the counterweight\n", + "## Computing the tension in the cable using our function\n", "\n", - "Let's see **which counterweight would allow the cable to make an angle of 15$^\\circ$ with the horizon** for instance. \n", - "Before using our function, we need to convert these 15$^\\circ$ into radians. \n", - "This is where the library we have imported get useful as they provide us with a function `degrees_to_radians` which we can use to convert our angle." + "Now let's use this Python function to compute the norm of the tension in the cable for a given angle of $\\alpha$.\n", + "\n", + "Because our function takes the sinus of our angle $\\alpha$, we first need to convert it from degrees into radians. \n", + "This is where the library we have imported gets useful as it provides us with a function `degrees_to_radians` which we can use to convert our angle.\n", + "\n", + "The piece of code below defines a value for $\\alpha$ in degrees, converts it to radians, then computes the tension on the cable using our previously defined function and prints the result." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": {}, - "outputs": [], - "source": [ - "# we take an angle of 15 degrees\n", - "alpha = 15\n", - "\n", - "# we convert it to radians\n", + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\lvert\\vec{T}\\rvert = $ 43 $N $" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# First choose an angle alpha\n", + "alpha = 20 # CHANGE THE VALUE HERE\n", + "\n", + "# Then convert it to radians\n", "alpha_radians = degrees_to_radians(alpha)\n", "\n", - "# then we use our function to compute the mass of the counterweight\n", - "m_cw = mass_counterweight(alpha_radians)\n", + "# Then compute the tension using our equation\n", + "T = tension_norm(alpha_radians)\n", "\n", - "# and print the result\n", - "print(f\"Mass of the counterweight for an angle of {alpha} degrees ({alpha_radians:.2f} radians): {m_cw:.2f} kg\")" + "# And print the result with a pretty format\n", + "display(Math(r'$\\lvert\\vec{T}\\rvert = $'+' {:8.0f} $N $'.format(T)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "But how big is 15$^\\circ$? Is that the angle that the cable makes with the horizon on the jeans situation? \n", - "This depends on the parameters of the situation, in particular on the relationship between the height of the poles and the distance between them. \n", - "To clarify what that means, let's **visualize what an angle of 15 $^\\circ$ means** with poles 1.5 meters high separated by a 5 meter distance." + "
\n", + " Activity
\n", + "\n", + "Change the value of $\\alpha$ in the code cell above, then execute it to see the value of the corresponding tension force $\\lvert\\vec{T}\\rvert$, expressed in Newtons. \n", + " \n", + "To get an idea of how big this value is, you can compare it to the force exerted by earth gravity on the jeans which weight 3 kg: $\\lvert\\vec{F}\\rvert = $ 29 $N$\n", + "
\n" ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "# let's visualize the angle in a concrete situation where poles measure 1.5 meters and are distant from 5 meters\n", - "SuspendedObjectsLab().visualize_angle(15);" + "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Question \n", + "# 3. From the tension to the counterweight\n", "\n", - "\"suspended\n", + "Now how can we relate this tension to the counterweight in our original question? \n", + "A key here is to understand that **the tension is transmitted via the cable to the counterweight**, and that **the pulley only changes the direction of the force**, it does not affect its value.\n", "\n", - "Which angle do you think the cable makes with the horizon on the jeans diagram? \n", - "**Modify the code in the cell below and execute it to visualize the angle you think is appropriate.**" + "Therefore the weight $\\vec{F_{cw}}$ of the counterweight will have to compensate exactly the tension $\\vec{T}$ in the cable, as indicated on the sketch below.\n", + "\n", + "\"sketch\"\n", + "\n", + "We can write this as an equation: \n", + "$\n", + "\\begin{align}\n", + "\\lvert\\vec{T}\\rvert = \\lvert\\vec{F_{cw}}\\rvert\n", + "\\end{align}\n", + "$\n", + "\n", + "Since the weight of the counterweight is $\\lvert\\vec{F_{cw}}\\rvert = m_{cw}.g$, we can therefore write: \n", + "$\n", + "\\begin{align}\n", + "\\lvert\\vec{T}\\rvert = m_{cw}.g\n", + "\\end{align}\n", + "$\n", + "\n", + "From there we can find the mass of the counterweight $m_{cw}$: \n", + "$\n", + "\\begin{align}\n", + "m_{cw} = \\frac{\\lvert\\vec{T}\\rvert}{g}\n", + "\\end{align}\n", + "$\n", + "\n", + "\n", + "Again we can use python to make this simple computation, using the values ``T`` and ``g`` computed earlier, as in the code cell below." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "metadata": {}, - "outputs": [], - "source": [ - "# let's visualize the angle in a concrete situation where poles measure 1.5 meters and are distant from 5 meters\n", - "SuspendedObjectsLab().visualize_angle(2); # HERE CHANGE THE VALUE OF THE ANGLE" + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mass of the counterweight: 4.4 kg\n" + ] + } + ], + "source": [ + "# Let's compute the mass of the counterweight to compensate for the tension in the cable\n", + "m_cw = T / g\n", + "\n", + "# And print the result\n", + "print(\"Mass of the counterweight: {:.1f} kg\".format(m_cw))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Question \n", + "
\n", + " Activity
\n", "\n", - "Now, use the python function we have written before to determine which counterweight will give you this angle. \n", - "**Modify the code in the cell below and execute it to compute the mass of the counterweight.**" + "Execute the code cell above to see which counterweight would allow to suspend the jeans on the cable with the angle $\\alpha$ you have chosen earlier.\n", + "
\n" ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "# we take an angle of XX degrees\n", - "alpha = 2 # HERE CHANGE THE VALUE OF THE ANGLE\n", + "So now, which counterweight do you think would allow to suspend the jeans (3kg) on the cable in the position illustrated below?\n", "\n", - "# we convert it to radians\n", - "alpha_radians = degrees_to_radians(alpha)\n", + "\"suspended\n", "\n", - "# then we use our function to compute the mass of the counterweight\n", - "m_cw = mass_counterweight(alpha_radians)\n", "\n", - "# and print the result\n", - "print(f\"Mass of the counterweight for an angle of {alpha} degrees ({alpha_radians:.2f} radians): {m_cw:.2f} kg\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Question \n", + "
\n", + " Activity
\n", "\n", - "How does this counterweight compares to the value you had chosen at the beginning? \n", - "Are you surprised by the result?" + "Execute the code cell below and post a message in the chat with the counterweight you think is necessary to suspend the jeans in the desired position. \n", + "If someone already posted the value you were thinking about, simply vote for it (thumb-up icon on the left).\n", + "
\n" ] }, { - "cell_type": "raw", - "metadata": {}, - "source": [ - "Just note down your answer here (this cell is for note taking)." - ] - }, - { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 26, "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "*You can check your answers with the solution available [in this file](solution/LearningPhysicsWithANotebook-solution.ipynb).*" + "from IPython.display import IFrame\n", + "IFrame('https://speakup.epfl.ch/ng/room/241665', 600, 600)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# 3. Looking at how the angle $\\alpha$ evolves with the mass counterweight\n", + "# 4. Looking at how the tension in the cable evolves with the angle $\\alpha$\n", "\n", "Now we want to look at **how the tension evolves** when the angle $\\alpha$ changes. \n", "Thanks to our previously defined Python function, we are going to compute the tension in the cable for 100 different values of $\\alpha$ and plot the result on a graph. \n", "**Execute the code cell below** to see the resulting graph.\n", "\n", "*Note:* \n", "Python code for plotting can be quite verbose and not particularly interesting to look at unless you want to learn how to generate plots in Python. \n", "The good news is that you can **hide** a code cell from the notebook by selecting it and clicking on the blue bar which appears on its left. To make the cell visible again, just click again on the blue bar, or on the three \"dots\" which represent the collapsed cell." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": [ + "(function(root) {\n", + " function embed_document(root) {\n", + " \n", + " var docs_json = {\"a7c76a2c-038b-426f-be5b-61fbe6a5ba86\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"2951\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"2955\",\"type\":\"Grid\"},{\"id\":\"2960\",\"type\":\"Grid\"}],\"left\":[{\"id\":\"2956\",\"type\":\"LinearAxis\"}],\"plot_height\":400,\"plot_width\":500,\"renderers\":[{\"id\":\"2977\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"2941\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"2967\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"2943\",\"type\":\"Range1d\"},\"x_scale\":{\"id\":\"2947\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"2945\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"2949\",\"type\":\"LinearScale\"}},\"id\":\"2940\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"source\":{\"id\":\"2974\",\"type\":\"ColumnDataSource\"}},\"id\":\"2978\",\"type\":\"CDSView\"},{\"attributes\":{\"axis_label\":\"Angle \\u237a (\\u00b0)\",\"formatter\":{\"id\":\"3115\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"2952\",\"type\":\"BasicTicker\"}},\"id\":\"2951\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2952\",\"type\":\"BasicTicker\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"3118\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"ticker\":{\"id\":\"2952\",\"type\":\"BasicTicker\"}},\"id\":\"2955\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"3119\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"3117\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"3120\",\"type\":\"Selection\"},{\"attributes\":{\"axis_label\":\"Tension T (N)\",\"formatter\":{\"id\":\"3117\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"2957\",\"type\":\"BasicTicker\"}},\"id\":\"2956\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2957\",\"type\":\"BasicTicker\"},{\"attributes\":{\"dimension\":1,\"ticker\":{\"id\":\"2957\",\"type\":\"BasicTicker\"}},\"id\":\"2960\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"3115\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2975\",\"type\":\"Line\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"2961\",\"type\":\"PanTool\"},{\"id\":\"2962\",\"type\":\"WheelZoomTool\"},{\"id\":\"2963\",\"type\":\"BoxZoomTool\"},{\"id\":\"2964\",\"type\":\"SaveTool\"},{\"id\":\"2965\",\"type\":\"ResetTool\"},{\"id\":\"2966\",\"type\":\"HelpTool\"}]},\"id\":\"2967\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2961\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2962\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAANEDNzMzMzMwzQJqZmZmZmTNAZmZmZmZmM0AzMzMzMzMzQAAAAAAAADNAzczMzMzMMkCamZmZmZkyQGZmZmZmZjJAMzMzMzMzMkAAAAAAAAAyQM3MzMzMzDFAmpmZmZmZMUBmZmZmZmYxQDMzMzMzMzFAAAAAAAAAMUDNzMzMzMwwQJqZmZmZmTBAZmZmZmZmMEAzMzMzMzMwQAAAAAAAADBAmpmZmZmZL0AzMzMzMzMvQMzMzMzMzC5AZmZmZmZmLkAAAAAAAAAuQJqZmZmZmS1AMzMzMzMzLUDMzMzMzMwsQGZmZmZmZixAAAAAAAAALECamZmZmZkrQDMzMzMzMytAzMzMzMzMKkBmZmZmZmYqQAAAAAAAACpAmpmZmZmZKUAzMzMzMzMpQMzMzMzMzChAZmZmZmZmKEAAAAAAAAAoQJmZmZmZmSdAMzMzMzMzJ0DNzMzMzMwmQGZmZmZmZiZAAAAAAAAAJkCZmZmZmZklQDMzMzMzMyVAzMzMzMzMJEBmZmZmZmYkQAAAAAAAACRAmZmZmZmZI0AzMzMzMzMjQMzMzMzMzCJAZmZmZmZmIkAAAAAAAAAiQJmZmZmZmSFAMzMzMzMzIUDMzMzMzMwgQGZmZmZmZiBAAAAAAAAAIEAyMzMzMzMfQGZmZmZmZh5AmJmZmZmZHUDMzMzMzMwcQAAAAAAAABxAMjMzMzMzG0BmZmZmZmYaQJiZmZmZmRlAzMzMzMzMGEAAAAAAAAAYQDIzMzMzMxdAZmZmZmZmFkCYmZmZmZkVQMzMzMzMzBRAAAAAAAAAFEAyMzMzMzMTQGZmZmZmZhJAmJmZmZmZEUDMzMzMzMwQQAAAAAAAABBAaGZmZmZmDkDIzMzMzMwMQDAzMzMzMwtAmJmZmZmZCUAAAAAAAAAIQGhmZmZmZgZAyMzMzMzMBEAwMzMzMzMDQJiZmZmZmQFAAAAAAAAAAEDQzMzMzMz8P5CZmZmZmfk/YGZmZmZm9j8wMzMzMzPzPwAAAAAAAPA/gJmZmZmZ6T8gMzMzMzPjP4CZmZmZmdk/gJmZmZmZyT8=\",\"dtype\":\"float64\",\"shape\":[100]},\"y\":{\"__ndarray__\":\"O8/DRwuDRUA9YympZ7hFQE7UHwvh7kVAu0uEO4AmRkD9+SRmTl9GQKbMshlVmUZAnu4DTZ7URkB6J61kNBFHQP+1+DgiT0dAo9ZBHHOOR0CwyrzhMs9HQHfos+RtEUhAFwRDEDFVSEAkW5vniZpIQK8f246G4UhA/sqE1DUqSUCXiKM7p3RJQKlSqwbrwElAzcUkQxIPSkDjRjbWLl9KQLDYHYpTsUpA1vSwHJQFS0C96/lOBVxLQGbADPa8tEtAtzAwDdIPTED6qXrJXG1MQERYBq92zUxAQFrjpzowTUB4efMcxZVNQBGq3xA0/k1AYBldPadpTkB2zv0yQNhOQJLvz3siSk9AgMEWwXO/T0Ddxzj6LRxQQE2EZ76CWlBAK7XLs86aUEB7r0LPKd1QQKVuWpGtIVFAHZLAJnVoUUCwp++LnbFRQAhFfbRF/VFAYAl5to5LUkAiXFz6m5xSQPz/HHCT8FJA8dEJyp1HU0C91jG+5qFTQLe4Mk+d/1NATN5tHfRgVEDWRsvBIcZUQJaWYDNhL1VAh6GKOfKcVUCtJ0rsGQ9WQD2OA0UjhlZAxvMfwl8CV0BUen8gKIRXQPFVNS7dC1hA832ruuiZWEBjnBSpvi5ZQHSjByveyllAPFNMKtNuWkAYD1HqNxtbQEfiiuu20FtAsR04HQ2QXEA6ZcNsDFpdQOjcgMWeL15AqBLnl8kRX0BzZoAC2QBgQAYYAulQgGBAxHmgqAYIYUDLUNI8zZhhQNtO77qUM2JAvfGFhG/ZYkDYsFKhmItjQEs1cJB7S2RAYJXQ+b0aZUDq3hTMS/tlQJy6kYNm72ZAGzz4m7j5Z0B27S6Qbh1pQBErH1pXXmpActLQNQ/Ba0CFK4+lOEttQFRgopXJA29AD0G3trp5cEDjFOnGoJJxQPVAsrms03JAGVyPYCJGdECWEy0oXPZ1QJQ0OHYy9XdA87rdpTpaekBK6kpXhUd9QOW8Zr0VeIBAtfKZaTzSgkCyCEd9IPWFQGlYt5wzWYpA3rFDiKx3kEBRC26W0fSVQEn0jTuSd6BABrVpqIt3sEA=\",\"dtype\":\"float64\",\"shape\":[100]}},\"selected\":{\"id\":\"3120\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"3119\",\"type\":\"UnionRenderers\"}},\"id\":\"2974\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"overlay\":{\"id\":\"3118\",\"type\":\"BoxAnnotation\"}},\"id\":\"2963\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"text\":\"Tension in the cable\"},\"id\":\"2941\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2964\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2965\",\"type\":\"ResetTool\"},{\"attributes\":{\"callback\":null,\"end\":0,\"start\":20.0},\"id\":\"2943\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"2966\",\"type\":\"HelpTool\"},{\"attributes\":{\"callback\":null},\"id\":\"2945\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2947\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2976\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"2974\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"2975\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"2976\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"2978\",\"type\":\"CDSView\"}},\"id\":\"2977\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2949\",\"type\":\"LinearScale\"}],\"root_ids\":[\"2940\"]},\"title\":\"Bokeh Application\",\"version\":\"1.4.0\"}};\n", + " var render_items = [{\"docid\":\"a7c76a2c-038b-426f-be5b-61fbe6a5ba86\",\"roots\":{\"2940\":\"2273be96-eb41-4561-9372-f31c5f812a7e\"}}];\n", + " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", + "\n", + " }\n", + " if (root.Bokeh !== undefined) {\n", + " embed_document(root);\n", + " } else {\n", + " var attempts = 0;\n", + " var timer = setInterval(function(root) {\n", + " if (root.Bokeh !== undefined) {\n", + " clearInterval(timer);\n", + " embed_document(root);\n", + " } else {\n", + " attempts++;\n", + " if (attempts > 100) {\n", + " clearInterval(timer);\n", + " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", + " }\n", + " }\n", + " }, 10, root)\n", + " }\n", + "})(window);" + ], + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "2940" + } + }, + "output_type": "display_data" + } + ], "source": [ "# Let's define the boundaries of the graph\n", - "a_start = 30 # start the angle at 30° which is the initial angle that our cable makes with the horizon\n", - "a_stop = 0 # stop at O° (excluded)\n", - "\n", - "# Now we generate 50 possible values for the mass of the counterweight\n", - "a_deg = np.linspace(start=a_start, stop=a_stop, num=50, endpoint=False)\n", - "\n", - "# But since our previously defined function works with angles expressed in radians, we first convert our list of angles from degrees to radians\n", - "a_rad = degrees_to_radians(a_deg)\n", - "\n", - "# compute the mass of the counterweight\n", - "m_cw = mass_counterweight(a_rad)\n", - "\n", - "# Then we compute the value of the tension for all the 100 possible angles alpha using our previously defined function\n", - "T = 1/2 * m * 9.81 / np.sin(a_rad)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Finally we generate the plot and customize its appearance\n", - "#fig = figure(title='Angle as a function of the counterweight mass', x_axis_label = 'Angle ⍺ (°)', y_axis_label = 'T (N)', width=500, height=400, toolbar_location=None)\n", - "fig, ax = plt.subplots(1, 2, figsize=(8, 4))\n", - "#fig.title.align = \"center\"\n", - "#fig.grid.grid_line_color = 'darkgray'\n", - "#fig.ygrid.minor_grid_line_color = 'lightgray'\n", - "\n", - "ax[0].set_title('Mass of the counterweight (kg)')\n", - "ax[0].plot(a_deg, m_cw, color=\"red\")\n", - "\n", - "ax[1].set_title('Tension T (N)')\n", - "ax[1].plot(a_deg, T, color=\"blue\")\n", - "\n", - "plt.show();" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Let's define the boundaries of the graph\n", - "m_start = 1 # start the angle at 21.8° which is the initial angle that our cable makes with the horizon\n", - "m_stop = 100 # stop at O°\n", - "\n", - "# Now we generate 50 possible values for the mass of the counterweight\n", - "m_cw = np.linspace(start=m_start, stop=m_stop, num=50)\n", - "\n", - "# Then we compute the value of the tension for all the 100 possible angles alpha using our previously defined function\n", - "# But since our previously defined function works with angles expressed in radians, we first convert our list of angles from degrees to radians\n", - "a_rad = alpha_from_counterweight(m_cw)\n", - "a_deg = radians_to_degrees(a_rad)\n", - "\n", - "#m_cw = mass_counterweight(alpha_radians)\n", - "\n", - "\n", - "# Finally we generate the plot and customize its appearance\n", - "fig = figure(title='Angle as a function of the counterweight mass', x_axis_label = 'M (kg)', y_axis_label = 'Angle ⍺ (°)', width=500, height=400, toolbar_location=None)\n", - "fig.title.align = \"center\"\n", - "fig.grid.grid_line_color = 'darkgray'\n", - "fig.ygrid.minor_grid_line_color = 'lightgray'\n", - "fig.line(m_cw, a_deg, color=\"red\", line_width=2)\n", - "show(fig)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Let's define the boundaries of the graph\n", - "a_start = 21.8 # start the angle at 21.8° which is the initial angle that our cable makes with the horizon\n", + "a_start = 20 # start the angle at 20°\n", "a_stop = 0 # stop at O°\n", "\n", - "# Let's define how fine we want the grid on the graph\n", - "a_step = 1 # for the angle, we want the grid to be shown every 2°\n", - "t_step = 500 # for the tention, we want the grid to be shown every 500N\n", - "\n", "# Now we generate 100 possible values for the angle alpha between a_start and a_stop (excluded)\n", "a_deg = np.linspace(start=a_start, stop=a_stop, num=100, endpoint = False)\n", "\n", - "# Then we compute the value of the tension for all the 100 possible angles alpha using our previously defined function\n", - "# But since our previously defined function works with angles expressed in radians, we first convert our list of angles from degrees to radians\n", + "# Since our previously defined function works with angles expressed in radians, we first convert our list of angles from degrees to radians\n", "a_rad = degrees_to_radians(a_deg)\n", + "\n", + "# Then we compute the value of the tension for all the 100 possible angles alpha using our previously defined function\n", "t = tension_norm(a_rad)\n", "\n", "# Finally we generate the plot and customize its appearance\n", - "fig = figure(title='Tension in the cable', x_axis_label = 'Angle ⍺ (°)', y_axis_label = 'Tension T (N)', x_range=(a_deg[0],0), width=500, height=400, toolbar_location=None)\n", - "fig.title.align = \"center\"\n", - "fig.grid.grid_line_color = 'darkgray'\n", - "fig.ygrid.minor_grid_line_color = 'lightgray'\n", - "fig.xaxis.ticker.desired_num_ticks = int(round(a_deg[0]/a_step))\n", - "fig.yaxis.ticker.desired_num_ticks = int(round(t[-1]/t_step))\n", + "fig = figure(title='Tension in the cable', x_axis_label = 'Angle ⍺ (°)', y_axis_label = 'Tension T (N)', x_range=(a_deg[0],0), width=500, height=400, toolbar_location=None)\n", "fig.line(a_deg, t, color=\"red\", line_width=2)\n", "show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Question \n", - "For which angle does the tension reach 500 Newtons, approximately? And 1000 Newtons?" - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "Note your answer here." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "*You can check your answers with the solution available [in this file](solution/LearningPhysicsWithANotebook-solution.ipynb).*" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To go further, you could transform your code above into a function, which would take `T` as an input parameter and return the value of `T` in 'kilogram-force'.\n", - "\n", - "
\n", - "\n", - "*You can check your answers with the solution available [in this file](solution/Physics-solution.ipynb).*" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# [Optional] What happens to the tension when $\\alpha$ = 0?\n", - "\n", - "What happens with our piece of Python code when we say that the cable it taut completely horizontal, i.e. the angle $\\alpha$ = 0$^\\circ$, which is actually impossible in real life? \n", - "\n", - "Question \n", - "In the cell where we have computed $T$ above, change the value of `alpha` to $0$ and re-execute the cell. \n", - "What happens? " - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "Type your answer here." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "\n", - "*You can check your answers for this activity with the solution available [in this file](solution/Physics-solution.ipynb).*" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## What have you learned so far?\n", + "
\n", + " Activity
\n", "\n", - "**What can you say about the forces exerted on the jeans** when the counterweight changes? Which forces remain the same and which change and how?" + "What happens to the tension when the angle $\\alpha$ gets closer to 0$^\\circ$? \n", + "Could we ever have $\\alpha$ = 0$^\\circ$, i.e. could we ever pull the cable taught completely horizontally?\n", + "
\n" ] }, { "cell_type": "raw", "metadata": {}, "source": [ - "Note your answer here." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from IPython.display import IFrame\n", - "IFrame('https://moodle.epfl.ch/mod/hvp/embed.php?id=1028285', 800, 600)" + "Just note down your answer here (this cell is for note taking)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Think back to the suspended jeans question and **compare your previous answer to what you observe in the virtual lab:** which counterweight would allow to suspend the wet jeans (3kg) on the cable in the desired position?" - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "Note your answer here." + "You can find out the detailed answer to this question below, in the solution section of the notebook." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# What have you learned so far?\n", "\n", "Write **2 things you have learned** about the **tension force** in a cable that is used to suspend an object:" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "- \n", "- " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Can you identify **other real-life situations** in which cables are used to suspend objects or in which cables are taut between poles? \n", "Write 2 ideas:" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "- \n", "- " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once you are finished with the above questions, **check-in with the instructor**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# Is it possible to pull the cable taut completely horizontally?\n", + "# Solution: Is it possible to pull the cable taut completely horizontally?\n", "\n", "In this section we demonstrate the physical and mathematical reasoning to answer this question.\n", "\n", "### Goal\n", "\n", "For the cable to be taut completely horizontally means that the angle $\\alpha$ that the cable makes with the horizon is 0$^\\circ$. \n", "In other words, the question could be reframed as: which mass $m_{cw}$ should we put as a counterweight to get $\\alpha$ = 0$^\\circ$?\n", "If we can find a 'reasonable' value for the counterweight then it will mean that it is possible to pull the cable taut completely horizontally.\n", "\n", "To answer this question, we therefore look for an expression relating the **mass of the counterweight $m_{cw}$** and the **angle $\\alpha$** that the cable makes with the horizon.\n", "\n", "\n", "### Method\n", "\n", "Given that the system is in static equilibrium, the sum of external forces exerted on the system will be zero, so using Newton's second law should be easy. The force that the counterweight exerts on the system will involve the mass of the counterweight so we should be able to rewrite Newton's second law to get an expression of the form $m_{cw} = ...$.\n", "\n", "### Hypotheses and simplifications\n", "\n", "We make the following assumptions and simplifications:\n", "* the jeans are considered as positioned exactly mid-way between the poles so the tension is equal on both sides of the cable\n", "* we represent the jeans by the point at which they are suspended\n", "* the cable is considered as rigid (not bended), with a negligible mass\n", "* the pulley is considered as perfect, without mass nor friction\n", "* we consider the static equilibrium obtained after changing the weight, once the system is stabilized\n", "\n", "### Resolution\n", "\n", "First, let's draw a diagram and represent the different forces involved.\n", "\n", "\n", "The *forces applied on the jeans* are:\n", "* the weight: $\\vec F_j = m_j \\vec g$ \n", "* the force exerted by the cable on each side of the jeans: assuming the jeans are suspended at the exact center of the cable, then the tension applied on each of the two sides is equally distributed with two tensions of equal magnitude $T$ on each side but with opposite directions on the $x$ axis, which combine into a vertical resulting tension $\\vec T_r$\n", "\n", "From Newton's second law in a static equilibrium we can write: $\\sum \\vec F_j = \\vec 0$ \n", "With the forces on the jeans we get: $\\vec F_j + \\vec T_r = 0$ \n", "\n", "If we project on $x$ and $y$ axes, we get: \n", "$\\left\\{\\begin{matrix} F_{jx} + T_{rx} = 0 \\\\ F_{jy} + T_{ry} = 0\\end{matrix}\\right. $\n", "\n", "Since $\\vec T_r$ is the result of two tensions of same magnitude $T$ on both sides of the jeans but of opposite directions on the $x$ axis, we can decompose $T_{rx}$ and $T_{ry}$ into the $x$ and $y$ components of $T$: \n", "$\\left\\{\\begin{matrix} T_{rx} = T_{x} - T_{x} \\\\ T_{ry} = 2.T_{y} \\end{matrix}\\right. $\n", "\n", "\n", "Now we can use this in our previous equations, which gives: \n", "$\\left\\{\\begin{matrix} F_{jx} + T_{x} - T_{x} = 0 \\\\ F_{jy} + 2.T_{y} = 0\\end{matrix}\\right. $\n", "\n", "\n", "Since the two $T_{x}$ cancel out we cannot know their value yet and so we focus on the second equation: \n", "$\\begin{align} F_{jy} + 2.T_y = 0 \\end{align}$\n", "\n", "The component of the weight on the y axis is $F_{jy} = - m_j.g$, which gives us: \n", "$\\begin{align} - m_j.g + 2.T_y = 0 \\end{align}$\n", "\n", "Using the angle $\\alpha$ we can get the tension $T_y$ expressed as a function of T since $sin(\\alpha) = \\frac{T_y}{T}$, therefore $T_y = T.sin(\\alpha)$\n", "\n", "By replacing $T_y$ by this expression in the above equation we get: \n", "$\\begin{align} - m_j.g + 2.T.sin(\\alpha) = 0 \\end{align}$\n", "\n", "From there we can get $T$, and this is equation number $(1)$: \n", "\n", "$\n", "\\begin{align}\n", "T = \\frac{m_j.g}{2.sin(\\alpha)}\n", "\\end{align}\n", "$\n", "\n", " \n", "\n", "We now want to make the mass of the counterweight appear in this expression. \n", "So we will now look at the forces applied on the *counterweight*.\n", "\n", " \n", "\n", "The forces applied on the *counterweight* are:\n", "* the weight: $\\vec F_{cw} = m_{cw} \\vec g$ \n", "* the force exerted by the cable: a simple pulley simply changes the direction of the tension so the tension applied on the counterweight is therefore of the same magnitude $T$ as before but with a different direction - we will note it $\\vec T$\n", "\n", "From Newton's second law in a static equilibrium we can write: $\\sum \\vec F_{cw} = \\vec 0$ \n", "With the forces involved in our problem : $\\vec F_{cw} + \\vec T = \\vec 0$ \n", "\n", "All forces being vertical, there is no need to project on $x$ so we get: $- F_{cw} + T = 0$ \n", "We replace the weight by its detailed expression: $-m_{cw}.g + T = 0$ \n", "Now we can express $T$ as a function of the other parameters, which is equation number $(2)$: $T = m_{cw}.g$ \n", "\n", " \n", "\n", "Let's now summarize what we have so far with equations $(1)$ and $(2)$: \n", "\n", "$\n", "\\begin{align}\n", "\\left\\{\\begin{matrix}T = \\frac{m_j.g}{2.sin(\\alpha)} \\\\ T = m_{cw}.g\\end{matrix}\\right. \n", "\\end{align}\n", "$\n", "\n", "These two equations combined give us:\n", "\n", "$\n", "\\begin{align}\n", "\\frac{m_j.g}{2.sin(\\alpha)} = m_{cw}.g\n", "\\end{align}\n", "$\n", "\n", "This allow us to find the mass of the counterweight as a function of the *mass of the jeans* and of the *angle that the cable makes with the horizon*: \n", "\n", "
\n", "\n", "$$m_{cw} = \\frac{m_j}{2.sin(\\alpha)}$$\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Conclusion\n", "\n", "When the cable approaches the horizon, $\\alpha$ is really small i.e. really close to zero. \n", "This means that $sin(\\alpha)$ is also close to zero, which means in turn that $m_{cw}$ is very big.\n", "Therefore, **the more we want the cable to be close to the horizon, the bigger $m_{cw}$ we will need!**\n", "\n", "Mathematically speaking, the limit of the expression defining the mass of the counterweight when alpha tends to 0 is:\n", "\n", "$\n", "\\begin{align}\n", "\\lim_{\\alpha\\to0}m_{cw} = \\lim_{\\alpha\\to0}\\frac{m_j}{2.sin(\\alpha)} = +\\infty\n", "\\end{align}\n", "$\n", "\n", - "So basically, we would need to put an **infinitely heavy counterweight** to make the angle null and that is why it is impossible to get the cable taut so that it is absolutely straight (the cable would break before that! :-p)...\n" + "So basically, we would need to put an **infinitely heavy counterweight** to make the angle null and that is why it is impossible to get the cable taut so that it is absolutely straight (the cable would break before that!)..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - " \n", - "\n", "### Numerical application\n", "\n", - "We have already defined above the constant `jeans_mass` which represents the mass of our jeans (3 kg).\n", + "We have already defined above the constant `m` which represents the mass of our jeans (3 kg).\n", "\n", "Let's define a Python function that represents the above equation. \n", "The function takes one input parameters, `alpha`, the angle that the cable makes with the horizon. \n", "It returns the mass of the counterweight as computed with the equation above." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Function defined.\n" + ] + } + ], "source": [ "# Define the function\n", "def counterweight_mass(alpha):\n", - " return jeans_mass / (2 * np.sin(alpha))\n", + " return m / (2 * np.sin(alpha))\n", "\n", - "# Display the function\n", - "counterweight_mass??" + "# And display a message once it is defined\n", + "print(\"Function defined.\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "For an angle of $1.5^\\circ = \\frac{\\pi}{120}$, we need to put a counterweight of:" + "For an angle $\\alpha$ of $1.5^\\circ$, we need to put a counterweight of:" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "57.30 kg\n" + ] + } + ], "source": [ "# Choose a value for angle alpha\n", - "alpha = np.pi / 120\n", + "alpha = 1.5\n", + "\n", + "# Then convert it to radians\n", + "alpha_radians = degrees_to_radians(alpha)\n", "\n", - "# Computes the mass of the counterweight using our function\n", - "mcw = counterweight_mass(alpha)\n", + "# Compute the mass of the counterweight using our function\n", + "mcw = counterweight_mass(alpha_radians)\n", "\n", "# And print the result\n", "print('{:.02f} kg'.format(mcw))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "You can check that you get a similar result with the virtual lab above.\n", + "### What happens when we use $\\alpha$ = 0?\n", "\n", - "You can also check what happens when you put `alpha = 0`...\n", + "What happens with our piece of Python code when we say that the cable it taut completely horizontal, i.e. the angle $\\alpha$ = 0$^\\circ$, which is actually impossible in real life? \n", "\n", - " " + "To find out, change the value of `alpha` to $0$ in the code cell above and re-execute the cell. \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## What are the consequences?\n", - "\n", - "As you can see, **the tension increases very very fast when the cable approaches the horizon**: what the graph shows is that the value of the tension **tends towards $+\\infty$** when the angle $\\alpha$ approaches 0. \n", - "**This is what makes it impossible to pull the cable taut completely horizontally.**\n", + "### What are the consequences?\n", "\n", "It is important to know that high tension in a cable is very dangerous and can lead to serious accidents, especially when the cable is not well adapted for its intended use (i.e. not strong enough) or when the cable is progressively deteriorating with use. \n", "\n", - "Question 3 \n", "Execute the cell below to see the video and watch the first minute (sound is not necessary). \n", "What happens at time 0:53? Why?" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/jpeg": "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\n", + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "from IPython.display import YouTubeVideo\n", "YouTubeVideo('KIbd5zBek5s', 600, 337, start=45, mute=1)" ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "Note your answer here." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "\n", - "*You can check your answers with the solution available [in this file](solution/LearningPhysicsWithANotebook-solution.ipynb).*\n", - "\n", - "---" - ] } ], "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.6.9" }, "toc-autonumbering": false }, "nbformat": 4, "nbformat_minor": 4 }