{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Mouvement harmonique\n",
    "\n",
    "Tracé des courbes position, vitesse et accélération pour un mouvement harmonique non amorti"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "    <style>\n",
       "        .bk-notebook-logo {\n",
       "            display: block;\n",
       "            width: 20px;\n",
       "            height: 20px;\n",
       "            background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAOkSURBVDiNjZRtaJVlGMd/1/08zzln5zjP1LWcU9N0NkN8m2CYjpgQYQXqSs0I84OLIC0hkEKoPtiH3gmKoiJDU7QpLgoLjLIQCpEsNJ1vqUOdO7ppbuec5+V+rj4ctwzd8IIbbi6u+8f1539dt3A78eXC7QizUF7gyV1fD1Yqg4JWz84yffhm0qkFqBogB9rM8tZdtwVsPUhWhGcFJngGeWrPzHm5oaMmkfEg1usvLFyc8jLRqDOMru7AyC8saQr7GG7f5fvDeH7Ej8CM66nIF+8yngt6HWaKh7k49Soy9nXurCi1o3qUbS3zWfrYeQDTB/Qj6kX6Ybhw4B+bOYoLKCC9H3Nu/leUTZ1JdRWkkn2ldcCamzrcf47KKXdAJllSlxAOkRgyHsGC/zRday5Qld9DyoM4/q/rUoy/CXh3jzOu3bHUVZeU+DEn8FInkPBFlu3+nW3Nw0mk6vCDiWg8CeJaxEwuHS3+z5RgY+YBR6V1Z1nxSOfoaPa4LASWxxdNp+VWTk7+4vzaou8v8PN+xo+KY2xsw6une2frhw05CTYOmQvsEhjhWjn0bmXPjpE1+kplmmkP3suftwTubK9Vq22qKmrBhpY4jvd5afdRA3wGjFAgcnTK2s4hY0/GPNIb0nErGMCRxWOOX64Z8RAC4oCXdklmEvcL8o0BfkNK4lUg9HTl+oPlQxdNo3Mg4Nv175e/1LDGzZen30MEjRUtmXSfiTVu1kK8W4txyV6BMKlbgk3lMwYCiusNy9fVfvvwMxv8Ynl6vxoByANLTWplvuj/nF9m2+PDtt1eiHPBr1oIfhCChQMBw6Aw0UulqTKZdfVvfG7VcfIqLG9bcldL/+pdWTLxLUy8Qq38heUIjh4XlzZxzQm19lLFlr8vdQ97rjZVOLf8nclzckbcD4wxXMidpX30sFd37Fv/GtwwhzhxGVAprjbg0gCAEeIgwCZyTV2Z1REEW8O4py0wsjeloKoMr6iCY6dP92H6Vw/oTyICIthibxjm/DfN9lVz8IqtqKYLUXfoKVMVQVVJOElGjrnnUt9T9wbgp8AyYKaGlqingHZU/uG2NTZSVqwHQTWkx9hxjkpWDaCg6Ckj5qebgBVbT3V3NNXMSiWSDdGV3hrtzla7J+duwPOToIg42ChPQOQjspnSlp1V+Gjdged7+8UN5CRAV7a5EdFNwCjEaBR27b3W890TE7g24NAP/mMDXRWrGoFPQI9ls/MWO2dWFAar/xcOIImbbpA3zgAAAABJRU5ErkJggg==);\n",
       "        }\n",
       "    </style>\n",
       "    <div>\n",
       "        <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-notebook-logo\"></a>\n",
       "        <span id=\"c40cd487-ba67-4a59-a0b2-ab77c907049a\">Loading BokehJS ...</span>\n",
       "    </div>\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "'use strict';\n",
       "(function(root) {\n",
       "  function now() {\n",
       "    return new Date();\n",
       "  }\n",
       "\n",
       "  const force = true;\n",
       "\n",
       "  if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
       "    root._bokeh_onload_callbacks = [];\n",
       "    root._bokeh_is_loading = undefined;\n",
       "  }\n",
       "\n",
       "const JS_MIME_TYPE = 'application/javascript';\n",
       "  const HTML_MIME_TYPE = 'text/html';\n",
       "  const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
       "  const CLASS_NAME = 'output_bokeh rendered_html';\n",
       "\n",
       "  /**\n",
       "   * Render data to the DOM node\n",
       "   */\n",
       "  function render(props, node) {\n",
       "    const script = document.createElement(\"script\");\n",
       "    node.appendChild(script);\n",
       "  }\n",
       "\n",
       "  /**\n",
       "   * Handle when an output is cleared or removed\n",
       "   */\n",
       "  function handleClearOutput(event, handle) {\n",
       "    function drop(id) {\n",
       "      const view = Bokeh.index.get_by_id(id)\n",
       "      if (view != null) {\n",
       "        view.model.document.clear()\n",
       "        Bokeh.index.delete(view)\n",
       "      }\n",
       "    }\n",
       "\n",
       "    const cell = handle.cell;\n",
       "\n",
       "    const id = cell.output_area._bokeh_element_id;\n",
       "    const server_id = cell.output_area._bokeh_server_id;\n",
       "\n",
       "    // Clean up Bokeh references\n",
       "    if (id != null) {\n",
       "      drop(id)\n",
       "    }\n",
       "\n",
       "    if (server_id !== undefined) {\n",
       "      // Clean up Bokeh references\n",
       "      const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
       "      cell.notebook.kernel.execute(cmd_clean, {\n",
       "        iopub: {\n",
       "          output: function(msg) {\n",
       "            const id = msg.content.text.trim()\n",
       "            drop(id)\n",
       "          }\n",
       "        }\n",
       "      });\n",
       "      // Destroy server and session\n",
       "      const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
       "      cell.notebook.kernel.execute(cmd_destroy);\n",
       "    }\n",
       "  }\n",
       "\n",
       "  /**\n",
       "   * Handle when a new output is added\n",
       "   */\n",
       "  function handleAddOutput(event, handle) {\n",
       "    const output_area = handle.output_area;\n",
       "    const output = handle.output;\n",
       "\n",
       "    // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
       "    if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n",
       "      return\n",
       "    }\n",
       "\n",
       "    const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
       "\n",
       "    if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
       "      toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
       "      // store reference to embed id on output_area\n",
       "      output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
       "    }\n",
       "    if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
       "      const bk_div = document.createElement(\"div\");\n",
       "      bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
       "      const script_attrs = bk_div.children[0].attributes;\n",
       "      for (let i = 0; i < script_attrs.length; i++) {\n",
       "        toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
       "        toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n",
       "      }\n",
       "      // store reference to server id on output_area\n",
       "      output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
       "    }\n",
       "  }\n",
       "\n",
       "  function register_renderer(events, OutputArea) {\n",
       "\n",
       "    function append_mime(data, metadata, element) {\n",
       "      // create a DOM node to render to\n",
       "      const toinsert = this.create_output_subarea(\n",
       "        metadata,\n",
       "        CLASS_NAME,\n",
       "        EXEC_MIME_TYPE\n",
       "      );\n",
       "      this.keyboard_manager.register_events(toinsert);\n",
       "      // Render to node\n",
       "      const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
       "      render(props, toinsert[toinsert.length - 1]);\n",
       "      element.append(toinsert);\n",
       "      return toinsert\n",
       "    }\n",
       "\n",
       "    /* Handle when an output is cleared or removed */\n",
       "    events.on('clear_output.CodeCell', handleClearOutput);\n",
       "    events.on('delete.Cell', handleClearOutput);\n",
       "\n",
       "    /* Handle when a new output is added */\n",
       "    events.on('output_added.OutputArea', handleAddOutput);\n",
       "\n",
       "    /**\n",
       "     * Register the mime type and append_mime function with output_area\n",
       "     */\n",
       "    OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
       "      /* Is output safe? */\n",
       "      safe: true,\n",
       "      /* Index of renderer in `output_area.display_order` */\n",
       "      index: 0\n",
       "    });\n",
       "  }\n",
       "\n",
       "  // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
       "  if (root.Jupyter !== undefined) {\n",
       "    const events = require('base/js/events');\n",
       "    const OutputArea = require('notebook/js/outputarea').OutputArea;\n",
       "\n",
       "    if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
       "      register_renderer(events, OutputArea);\n",
       "    }\n",
       "  }\n",
       "  if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
       "    root._bokeh_timeout = Date.now() + 5000;\n",
       "    root._bokeh_failed_load = false;\n",
       "  }\n",
       "\n",
       "  const NB_LOAD_WARNING = {'data': {'text/html':\n",
       "     \"<div style='background-color: #fdd'>\\n\"+\n",
       "     \"<p>\\n\"+\n",
       "     \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
       "     \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
       "     \"</p>\\n\"+\n",
       "     \"<ul>\\n\"+\n",
       "     \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
       "     \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
       "     \"</ul>\\n\"+\n",
       "     \"<code>\\n\"+\n",
       "     \"from bokeh.resources import INLINE\\n\"+\n",
       "     \"output_notebook(resources=INLINE)\\n\"+\n",
       "     \"</code>\\n\"+\n",
       "     \"</div>\"}};\n",
       "\n",
       "  function display_loaded(error = null) {\n",
       "    const el = document.getElementById(\"c40cd487-ba67-4a59-a0b2-ab77c907049a\");\n",
       "    if (el != null) {\n",
       "      const html = (() => {\n",
       "        if (typeof root.Bokeh === \"undefined\") {\n",
       "          if (error == null) {\n",
       "            return \"BokehJS is loading ...\";\n",
       "          } else {\n",
       "            return \"BokehJS failed to load.\";\n",
       "          }\n",
       "        } else {\n",
       "          const prefix = `BokehJS ${root.Bokeh.version}`;\n",
       "          if (error == null) {\n",
       "            return `${prefix} successfully loaded.`;\n",
       "          } else {\n",
       "            return `${prefix} <b>encountered errors</b> while loading and may not function as expected.`;\n",
       "          }\n",
       "        }\n",
       "      })();\n",
       "      el.innerHTML = html;\n",
       "\n",
       "      if (error != null) {\n",
       "        const wrapper = document.createElement(\"div\");\n",
       "        wrapper.style.overflow = \"auto\";\n",
       "        wrapper.style.height = \"5em\";\n",
       "        wrapper.style.resize = \"vertical\";\n",
       "        const content = document.createElement(\"div\");\n",
       "        content.style.fontFamily = \"monospace\";\n",
       "        content.style.whiteSpace = \"pre-wrap\";\n",
       "        content.style.backgroundColor = \"rgb(255, 221, 221)\";\n",
       "        content.textContent = error.stack ?? error.toString();\n",
       "        wrapper.append(content);\n",
       "        el.append(wrapper);\n",
       "      }\n",
       "    } else if (Date.now() < root._bokeh_timeout) {\n",
       "      setTimeout(() => display_loaded(error), 100);\n",
       "    }\n",
       "  }\n",
       "\n",
       "  function run_callbacks() {\n",
       "    try {\n",
       "      root._bokeh_onload_callbacks.forEach(function(callback) {\n",
       "        if (callback != null)\n",
       "          callback();\n",
       "      });\n",
       "    } finally {\n",
       "      delete root._bokeh_onload_callbacks\n",
       "    }\n",
       "    console.debug(\"Bokeh: all callbacks have finished\");\n",
       "  }\n",
       "\n",
       "  function load_libs(css_urls, js_urls, callback) {\n",
       "    if (css_urls == null) css_urls = [];\n",
       "    if (js_urls == null) js_urls = [];\n",
       "\n",
       "    root._bokeh_onload_callbacks.push(callback);\n",
       "    if (root._bokeh_is_loading > 0) {\n",
       "      console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
       "      return null;\n",
       "    }\n",
       "    if (js_urls == null || js_urls.length === 0) {\n",
       "      run_callbacks();\n",
       "      return null;\n",
       "    }\n",
       "    console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
       "    root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
       "\n",
       "    function on_load() {\n",
       "      root._bokeh_is_loading--;\n",
       "      if (root._bokeh_is_loading === 0) {\n",
       "        console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
       "        run_callbacks()\n",
       "      }\n",
       "    }\n",
       "\n",
       "    function on_error(url) {\n",
       "      console.error(\"failed to load \" + url);\n",
       "    }\n",
       "\n",
       "    for (let i = 0; i < css_urls.length; i++) {\n",
       "      const url = css_urls[i];\n",
       "      const element = document.createElement(\"link\");\n",
       "      element.onload = on_load;\n",
       "      element.onerror = on_error.bind(null, url);\n",
       "      element.rel = \"stylesheet\";\n",
       "      element.type = \"text/css\";\n",
       "      element.href = url;\n",
       "      console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
       "      document.body.appendChild(element);\n",
       "    }\n",
       "\n",
       "    for (let i = 0; i < js_urls.length; i++) {\n",
       "      const url = js_urls[i];\n",
       "      const element = document.createElement('script');\n",
       "      element.onload = on_load;\n",
       "      element.onerror = on_error.bind(null, url);\n",
       "      element.async = false;\n",
       "      element.src = url;\n",
       "      console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
       "      document.head.appendChild(element);\n",
       "    }\n",
       "  };\n",
       "\n",
       "  function inject_raw_css(css) {\n",
       "    const element = document.createElement(\"style\");\n",
       "    element.appendChild(document.createTextNode(css));\n",
       "    document.body.appendChild(element);\n",
       "  }\n",
       "\n",
       "  const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.6.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.6.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.6.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.6.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.6.0.min.js\"];\n",
       "  const css_urls = [];\n",
       "\n",
       "  const inline_js = [    function(Bokeh) {\n",
       "      Bokeh.set_log_level(\"info\");\n",
       "    },\n",
       "function(Bokeh) {\n",
       "    }\n",
       "  ];\n",
       "\n",
       "  function run_inline_js() {\n",
       "    if (root.Bokeh !== undefined || force === true) {\n",
       "      try {\n",
       "            for (let i = 0; i < inline_js.length; i++) {\n",
       "      inline_js[i].call(root, root.Bokeh);\n",
       "    }\n",
       "\n",
       "      } catch (error) {display_loaded(error);throw error;\n",
       "      }if (force === true) {\n",
       "        display_loaded();\n",
       "      }} else if (Date.now() < root._bokeh_timeout) {\n",
       "      setTimeout(run_inline_js, 100);\n",
       "    } else if (!root._bokeh_failed_load) {\n",
       "      console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
       "      root._bokeh_failed_load = true;\n",
       "    } else if (force !== true) {\n",
       "      const cell = $(document.getElementById(\"c40cd487-ba67-4a59-a0b2-ab77c907049a\")).parents('.cell').data().cell;\n",
       "      cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
       "    }\n",
       "  }\n",
       "\n",
       "  if (root._bokeh_is_loading === 0) {\n",
       "    console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
       "    run_inline_js();\n",
       "  } else {\n",
       "    load_libs(css_urls, js_urls, function() {\n",
       "      console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
       "      run_inline_js();\n",
       "    });\n",
       "  }\n",
       "}(window));"
      ],
      "application/vnd.bokehjs_load.v0+json": "'use strict';\n(function(root) {\n  function now() {\n    return new Date();\n  }\n\n  const force = true;\n\n  if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n    root._bokeh_onload_callbacks = [];\n    root._bokeh_is_loading = undefined;\n  }\n\n\n  if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n    root._bokeh_timeout = Date.now() + 5000;\n    root._bokeh_failed_load = false;\n  }\n\n  const NB_LOAD_WARNING = {'data': {'text/html':\n     \"<div style='background-color: #fdd'>\\n\"+\n     \"<p>\\n\"+\n     \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n     \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n     \"</p>\\n\"+\n     \"<ul>\\n\"+\n     \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n     \"<li>use INLINE resources instead, as so:</li>\\n\"+\n     \"</ul>\\n\"+\n     \"<code>\\n\"+\n     \"from bokeh.resources import INLINE\\n\"+\n     \"output_notebook(resources=INLINE)\\n\"+\n     \"</code>\\n\"+\n     \"</div>\"}};\n\n  function display_loaded(error = null) {\n    const el = document.getElementById(\"c40cd487-ba67-4a59-a0b2-ab77c907049a\");\n    if (el != null) {\n      const html = (() => {\n        if (typeof root.Bokeh === \"undefined\") {\n          if (error == null) {\n            return \"BokehJS is loading ...\";\n          } else {\n            return \"BokehJS failed to load.\";\n          }\n        } else {\n          const prefix = `BokehJS ${root.Bokeh.version}`;\n          if (error == null) {\n            return `${prefix} successfully loaded.`;\n          } else {\n            return `${prefix} <b>encountered errors</b> while loading and may not function as expected.`;\n          }\n        }\n      })();\n      el.innerHTML = html;\n\n      if (error != null) {\n        const wrapper = document.createElement(\"div\");\n        wrapper.style.overflow = \"auto\";\n        wrapper.style.height = \"5em\";\n        wrapper.style.resize = \"vertical\";\n        const content = document.createElement(\"div\");\n        content.style.fontFamily = \"monospace\";\n        content.style.whiteSpace = \"pre-wrap\";\n        content.style.backgroundColor = \"rgb(255, 221, 221)\";\n        content.textContent = error.stack ?? error.toString();\n        wrapper.append(content);\n        el.append(wrapper);\n      }\n    } else if (Date.now() < root._bokeh_timeout) {\n      setTimeout(() => display_loaded(error), 100);\n    }\n  }\n\n  function run_callbacks() {\n    try {\n      root._bokeh_onload_callbacks.forEach(function(callback) {\n        if (callback != null)\n          callback();\n      });\n    } finally {\n      delete root._bokeh_onload_callbacks\n    }\n    console.debug(\"Bokeh: all callbacks have finished\");\n  }\n\n  function load_libs(css_urls, js_urls, callback) {\n    if (css_urls == null) css_urls = [];\n    if (js_urls == null) js_urls = [];\n\n    root._bokeh_onload_callbacks.push(callback);\n    if (root._bokeh_is_loading > 0) {\n      console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n      return null;\n    }\n    if (js_urls == null || js_urls.length === 0) {\n      run_callbacks();\n      return null;\n    }\n    console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n    root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n    function on_load() {\n      root._bokeh_is_loading--;\n      if (root._bokeh_is_loading === 0) {\n        console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n        run_callbacks()\n      }\n    }\n\n    function on_error(url) {\n      console.error(\"failed to load \" + url);\n    }\n\n    for (let i = 0; i < css_urls.length; i++) {\n      const url = css_urls[i];\n      const element = document.createElement(\"link\");\n      element.onload = on_load;\n      element.onerror = on_error.bind(null, url);\n      element.rel = \"stylesheet\";\n      element.type = \"text/css\";\n      element.href = url;\n      console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n      document.body.appendChild(element);\n    }\n\n    for (let i = 0; i < js_urls.length; i++) {\n      const url = js_urls[i];\n      const element = document.createElement('script');\n      element.onload = on_load;\n      element.onerror = on_error.bind(null, url);\n      element.async = false;\n      element.src = url;\n      console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n      document.head.appendChild(element);\n    }\n  };\n\n  function inject_raw_css(css) {\n    const element = document.createElement(\"style\");\n    element.appendChild(document.createTextNode(css));\n    document.body.appendChild(element);\n  }\n\n  const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.6.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.6.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.6.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.6.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.6.0.min.js\"];\n  const css_urls = [];\n\n  const inline_js = [    function(Bokeh) {\n      Bokeh.set_log_level(\"info\");\n    },\nfunction(Bokeh) {\n    }\n  ];\n\n  function run_inline_js() {\n    if (root.Bokeh !== undefined || force === true) {\n      try {\n            for (let i = 0; i < inline_js.length; i++) {\n      inline_js[i].call(root, root.Bokeh);\n    }\n\n      } catch (error) {display_loaded(error);throw error;\n      }if (force === true) {\n        display_loaded();\n      }} else if (Date.now() < root._bokeh_timeout) {\n      setTimeout(run_inline_js, 100);\n    } else if (!root._bokeh_failed_load) {\n      console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n      root._bokeh_failed_load = true;\n    } else if (force !== true) {\n      const cell = $(document.getElementById(\"c40cd487-ba67-4a59-a0b2-ab77c907049a\")).parents('.cell').data().cell;\n      cell.output_area.append_execute_result(NB_LOAD_WARNING)\n    }\n  }\n\n  if (root._bokeh_is_loading === 0) {\n    console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n    run_inline_js();\n  } else {\n    load_libs(css_urls, js_urls, function() {\n      console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n      run_inline_js();\n    });\n  }\n}(window));"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "from bokeh.layouts import row, column\n",
    "from bokeh.models import CustomJS, Slider\n",
    "from bokeh.plotting import figure, show, ColumnDataSource\n",
    "\n",
    "from bokeh.io import push_notebook, show, output_notebook\n",
    "from ipywidgets import interact\n",
    "#from bokeh.resources import INLINE \n",
    "\n",
    "output_notebook()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On considère un oscillateur harmonique simple constitué d'une masse $m$ fixée à un ressort de raideur $k$.\n",
    "\n",
    "A $t=0$ on l'écarte de sa position de $x_0$ et on la lâche sans vitesse initiale.\n",
    "\n",
    "L'équation différentielle s'écrit:\n",
    "\n",
    "$$\\ddot x + \\Omega_0^2 x = 0$$\n",
    "\n",
    "avec $$\\Omega_0^2=\\frac{k}{m}$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "#valeurs initiales\n",
    "mass = 0.3 #kg\n",
    "kressort = 10 #N/m \n",
    "xzero = 3 \n",
    "omega0 = np.sqrt(kressort/mass)\n",
    "\n",
    "t = np.linspace(0, 3, 500)\n",
    "y1 = xzero*np.cos(omega0*t)\n",
    "v1 = -xzero*omega0*np.sin(omega0*t)\n",
    "a1 = - xzero*omega0**2*np.cos(omega0*t)\n",
    "\n",
    "p = figure(y_range=(-4.5, 4.5), width=600, height=400)\n",
    "\n",
    "pos = p.line(t, y1, line_width=3, legend_label=\"position\")\n",
    "vit = p.line(t, v1/7, line_width=3, color=\"orange\",legend_label=\"vitesse\")\n",
    "acc = p.line(t, a1/50, line_width=3, color=\"green\",legend_label=\"acceleration\")\n",
    "\n",
    "p.legend.location = \"top_right\"\n",
    "p.legend.click_policy=\"hide\"\n",
    "\n",
    "def update(mass=0.3, kressort=10, xzero=3):\n",
    "    omega0 = np.sqrt(kressort/mass)\n",
    "    pos.data_source.data['y'] = xzero * np.cos(omega0*t)\n",
    "    vit.data_source.data['y'] = - xzero *omega0* np.sin(omega0*t)/7\n",
    "    acc.data_source.data['y'] = - xzero * omega0**2*np.cos(omega0*t)/50\n",
    "\n",
    "    push_notebook()\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Utilisation du notebook:\n",
    "\n",
    "faire varier les paramètres $m$, $k$ et $x_0$ et observer l'effet sur position / vitesse et accélération"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "  <div id=\"e5452ae5-1919-4e90-94c7-632dda9623e7\" data-root-id=\"p1001\" style=\"display: contents;\"></div>\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "(function(root) {\n",
       "  function embed_document(root) {\n",
       "  const docs_json = {\"0c4a8dae-190e-48ab-9cdc-87e3dede7c78\":{\"version\":\"3.6.0\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1001\",\"attributes\":{\"height\":400,\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1003\"},\"y_range\":{\"type\":\"object\",\"name\":\"Range1d\",\"id\":\"p1010\",\"attributes\":{\"start\":-4.5,\"end\":4.5}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1011\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1012\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1008\"},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1042\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1036\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1037\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1038\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[500],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[500],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1043\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1044\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1039\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\",\"line_width\":3}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1040\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\",\"line_alpha\":0.1,\"line_width\":3}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1041\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\",\"line_alpha\":0.2,\"line_width\":3}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1053\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1047\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1048\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1049\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[500],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[500],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1054\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1055\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1050\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\",\"line_width\":3}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1051\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\",\"line_alpha\":0.1,\"line_width\":3}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1052\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\",\"line_alpha\":0.2,\"line_width\":3}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1063\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1057\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1058\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1059\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[500],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AQAAAAAAAMAhh47JEPv/v3LAzatE7P+/aXIAN6DT/7/lOrAEK7H/v2yNVbXvhP+/4LMQ7ftO/79g1HRPYA//v3xIZnowxv6/3NoNAINz/r/7yOJfcRf+v46uzf4Xsv2/d8dmHpZD/b99O1LTDcz8v/1svfqjS/y/SogAL4DC+79c1We7zDD7vw6QKI+2lvq/wUyFL230+b9vLyapIkr5v0h6qYALmPi/bDZxol7e97+T9bJRVR33v9zlzhYrVfa/EqrzrB2G9b/unxTvbLD0v2tzOMRa1PO/1hEmCyvy8r96QXaFIwryvzNSEMKLHPG/cYkYB60p8L9KMK52pGPuv/gkPZ6Pauy/rxJySbdo6r8jFcbwuV7ov9Tgt484Tea//xImc9Y05L8IgvIGORbivy0t/EUP5N+/uNIZr9aR279oH0VyHTfXv9pXzVc71dK/2+mHuhTbzL+C1JCVzALEv6YGGh+xSLa/MfeF9KYTkr/O3BTghICqPzcUo29YAb8/rC/DRW9cyD8BQyCAV5jQP5cDbCtZ/dQ/wwedsOFb2T9OtJwamLLdP5Mm5O4SAOE/ppjKoJsh4z8hC6vkPT3lPz95AE5TUuc/TstqdTdg6T9YpmIrSGbrP7IbPqrlY+0/1st2x3JY7z/2JBGSqqHwP7/mRq76kfE/ykF3m9988j94DIzoEGLzP12yleZHQfQ/wLWXvj8a9T9FpMOGtez1P8nyG1douPY/8mJ4XRl99z84xuXwizr4P84kW6SF8Pg/aIO+WM6e+T8yuTNOMEX6P8T/rzR44/o/+h/NO3V5+z+bWtch+Qb8PxJoEULYi/w/GCkqoukH/T+G4d/+Bnv9P5QXzdcM5f0/93NbetpF/j9dQtkLUp3+Py52rpJY6/4/qlyu/tUv/z+Sa4MwtWr/P3fiMgDkm/8/YTy2QlPD/z/Ft6jO9uD/P2ODB4DF9P8//WcDO7n+/z9gEOPtzv7/P9xa9ZEG9f8/pmmTK2Ph/z9RcTLJ6sP/P++OhYGmnP8/TzmwcKJr/z+OKoq07TD/P/zo9Wea7P4/RV9Lnb2e/j+7PNhXb0f+P+keeITK5v0/7cxG8ex8/T9uFG9E9wn9P6EdGfIMjvw/jlF7MVQJ/D+pMRHx9Xv7P1zD+8kd5vo/CnSP8vlH+j8jmxMwu6H5P5H/t8eU8/g/xAPFbrw9+D/4WAs6aoD3P05VmIzYu/Y/JUK0BUTw9T+GMDBu6x31P3wXCaUPRfQ/RDVmi/Nl8z+z3vjv24DyPy8ZxHkPlvE/14pSktal8D8G8sKe9mDvP91vD7iSbO0/LDC/whtv6z8MBnbdLmnpP0Y90sJrW+c//N8pmHRG5T+EK4m77SrjPwihAZF9CeE/KamynpjF3T+dmVSYB2/ZP3HnA4+eENU/VoAhbrar0D8Rg+lDVIPIP5d+trJYT78/NwhN18Ecqz9qLjOCFNuQv/KlAHue+rW/rV22Sdjbw78OXVh4QbTMvwgxLzjowdK/junTyeYj17/jfsFqwn7bvy96DUgj0d+/qngiFtoM4r/BnVN0kSvkv13duF4QROa/r0eOYLFV6L9fMDQj0V/qv2jgjqDOYey/xIuvVAtb7r/dnVu3dSXwvzNMcgBrGPG/hODelxoG8r+N0yMwO+7yvz9VnjKF0PO/TUOa1bKs9L+p+NcxgIL1v69SfVerUfa/z3ZrYvQZ979GE/ONHdv3vyQH4UfrlPi/hpHdQiRH+b/oXRiIkfH5vwj6O4j+k/q/GnujKzku+7+2Us3hEcD7v5KPBrBbSfy/KARKP+zJ/L/zC0/pm0H9v1Tow8RFsP2/3++vsMcV/r8UDfpeAnL+v+BNEF7ZxP6/LYmtITMO/7+PZroK+U3/v2FZR24XhP+/AGmdm32w/7/35mPhHdP/v+Z82ZHt6/+/n0QfBuX6/7+S5pSg////vxwERc47+/+/cn1hB5vs/7+4bM/OIdT/vyn6wrDXsf+/D3drQMeF/79kd7AU/k//v4HrAMSMEP+/8YQ134bH/r/p+YfrAnX+v00EoVsaGf6/FkC/h+mz/b8kVfmkj0X9v1Ienrsuzvy/9MW1nOtN/L/oE6fW7cT7v25uBKlfM/u/9E+E922Z+r9xNyk8SPf5v45XnXggTfm/OonGJiub+L+hQpcon+H3v9SQIbe1IPe/HUzxUKpY9r8j+LKnuon1vwr5LI0mtPS/BvuQ3y/Y87/xnit1GvbyvwaveAcsDvK/UVCiHawg8b8/0XH24y3wv5vJceM8bO6//X508k9z7L96bjHSnHHqv1pSqO/BZ+i/nBy3O2BW5r9mjXf5Gj7kv2yH5YuXH+K/jk27hfr237+qsAdP6qTbv/qwQ5BTSte/YV4bB47o0r+WhKFQ5wHNv9O5FGrAKcS/4aJOPsOWtr9/Dwv7OEyTv9Q20EpH5Kk/MiKoc1ezvj+R9lS2iTXIP9VoJy/4hNA/hV6nShPq1D80K6oxu0jZP8OOa+WWn90/Q3Bk56f24D+IavQTSRjjP3NrgrIGNOU/7coZTjpJ5z9zawp2P1fpP25on/BzXes/F+km7Tdb7T/Nqjs17k/vP7OGoC5+nfA/v1cBeuWN8T+zdLTY4njyP6HgGdItXvM/jx1Xr3899D9fHyaRkxb1P6/OEoUm6fU/ZY8gmve09j9bbNH0x3n3P727iOJaN/g/akBD7HXt+D+4A5/o4Jv5Pw5XLQ1mQvo/g6YJ/9Hg+j9K/q/i83b7PzhhDmudBPw/4UnM56KJ/D9878NS2wX9P/YmqVwgef0/rfjZeE7j/T+0RlXoRET+P4oh1MPlm/4/b64CBRbq/j+uxtWOvS7/P3a++jTHaf8/dAdfwiCb/z9YrM3+usL/P1fpoLOJ4P8/hm+Gr4P0/z92KVXJov7/PzSh8+Hj/v8/5XFO5Ub1/z+6eF7KzuH/P4DDPpKBxP8/6YRSRmid/z/KoHv1jmz/P0WsYrAEMv8/jofRhNvt/j8TACJ4KKD+P4UywoADSf4/0qzQfofo/T8ol9Iz0n79P81yhjkEDP0/8kLW90CQ/D+jOeyZrgv8P1hGbQJ2fvs/YyjdvsLo+j+t5y/6wkr6PyHZjG6npPk/TZJHVqP2+D8UbxNc7ED4PySIdoq6g/c/rTWBOki/9j+Gcs8B0vP1P8ar2Z+WIfU/rMGa6tZI9D9mL5G61WnzP5OGIdbXhPI/Ophg3COa8T8210svAqrwP3tV7bp5ae8/BChnFj917T96YoC27nfrP6Ci9q0lcuk/+NhYrINk5z+m98fMqk/lPzSN+GM/NOM/ZLeEzecS4T8AGzxxmNjdP06vXugsgtk/RR38dOMj1T/nm7f4FL/QPzb93684qsg/RjYRO1idvz9F+dQs/rirP+6StVYDRY+/7RjUU4ustb/apG2H47TDv41o+optjcy/8yi0qJSu0r97pGKXrxDXv459cIKta9u/mAxgjDa+37+8Ta25egPiv291N/1LIuS/Kq7wqOc65r8/yTY/qEzov67ZrF/qVuq/ruWd+QxZ7L/MIql9cVLuvyYzVAc+IfC/Zdzg2EkU8b8znMo+EQLyv41ePORK6vK/LX7ZKq/M878OHdRA+Kj0vzJzdTbifvW/g3AREytO9r+uOl/pkhb3v2hBMOvb1/e/BtR/fMqR+L9TWNVFJUT5vzF280W17vm/yMTO4kWR+r8Wvcb5pCv7v1/yG++ivfu/L8qevBJH/L/2LZL/ycf8v2/tvQWhP/2/1Mms2XKu/b+aYxJOHRT+v2CGVQiBcP6/RpM7ioHD/r8JDrI6BQ3/v1OXs231TP+/vORFaz6D/7+ljo51z6//v6nT/M2a0v+/QLqGuZXr/7+RQfiDuPr/v3acU4L+//+/A7tBFGb7/7/lsJKk8Oz/vw3Rzaii1P+/CqHRn4Oy/7/dEIQPnob/v4ytk4H/UP+/xs5Kf7gR/79SCXaM3Mj+v694XyGCdv6/ZLvgo8Ia/r+kxI1furX9vzLu+nyIR/2/BPsg+E7Q/L/WAeKVMlD8vz96sthax/u/tOxp9PE1+7+OBj/BJJz6vzoW860i+vm/3TIxsR1Q+b8hkyU6Sp74v/fSUSDf5Pe/oSWjkhUk97+jqs8FKVz2v6hWACJXjfW/lBfNr9+39L8IEZGEBNzzv+8CHW4J+vK/vBvOHTQS8r/Eqg8TzCTxv+RSToUaMvC/IRXHmtR07r/2vQCdD3zsv0w1Pb2Beuq/VyP/XMlw6L/G939ih1/mvz/IEAdfR+S//6jDpPUo4r8HBG2D8gTgv5pUGUr9t9u/RQxdI4ld1794CKZF4PvSvyanvTm5KM2/ZsFZxrNQxL9T4szW1OS2v49qeo7KhJS/xtkiGwlIqT8k2ZbAVWW+P5TPhpajDsg/kXmqe5hx0D9X6CjtzNbUP3Y47huUNdk/2o6Q/5SM3T9RqLp6PO3gP8o5PhX2DuM/c/bmAc8q5T/Pc1TDIEDnPy9jit9GTuk/gB2qEp9U6z+cmf2AiVLtPzdbROhoR+8/qJMZaFGZ8D9cxQvdz4nxP+o+yKfldPI/GOAmSEpa8z8m52P/tjn0P05U8eXmEvU/YPq2AJfl9T+Gr7pVhrH2P8g+KgB2dvc/3ezAQyk0+D8jlIKfZer4P4ORxt/ymPk/O/GML5s/+j8mhBgpK976P1u9yOVxdPs/yXUuDUEC/D+a7lbjbIf8P1KqSFbMA/0/V/OtCjl3/T82KKlnj+H9P58nz6GuQv4/QHlExXia/j9PFfq+0uj+PwnxBmWkLf8/OL0bftho/z9Fig7IXJr/P0BNfP0hwv8/AIl+2hvg/z/Jp3MgQfT/P6Da2JiL/v8/hp00F/j+/z/hSBF6hvX/PzJjB6s54v8/s6/XnRfF/z/SQJVOKZ7/P38f4L56bf8/CWIx8hoz/z/f1jnpG+/+P9ewVJySof4/G+sP9ZZK/j+oY8zGQ+r9P0Pyd8a2gP0/fwlkgRAO/T9otDtTdJL8P00KHFsIDvw/6XTSb/WA+z/JaUQTZ+v6P+Z3BGWLTfo/Hc8YFJOn+T8movdPsfn4P0UGvrgbRPg/ZC2mTgqH9z/jFcJgt8L2P38CAHtf9/U/bUZ+U0El9T9aKDS3nUz0P+HR9XW3bfM/FnfZTdOI8j+KDwTWN57xPycr5GgtrvA/BDPDG/xx7z/EihHF6n3tP7+dcQbBgOs/uiu35ht76T92EV4Km23nP3hiToLgWOU/gSrhmZA94z+4QzWkURzhP+W7x5GX690/XRtJoFGV2T/zuuHcJzfVP1USbx9z0tA/8qy+iBzRyD+SFOIGV+u/P+71CN05Vaw/9LGJ7tzTjL9K/GWrd161vw==\"},\"shape\":[500],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1064\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1065\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1060\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"green\",\"line_width\":3}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1061\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"green\",\"line_alpha\":0.1,\"line_width\":3}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1062\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"green\",\"line_alpha\":0.2,\"line_width\":3}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1009\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1023\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1024\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1025\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1026\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p1032\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p1031\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1033\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1034\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1035\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1018\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1019\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1020\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1021\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1013\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1014\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1015\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1016\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1017\",\"attributes\":{\"axis\":{\"id\":\"p1013\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1022\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1018\"}}},{\"type\":\"object\",\"name\":\"Legend\",\"id\":\"p1045\",\"attributes\":{\"click_policy\":\"hide\",\"items\":[{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p1046\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"position\"},\"renderers\":[{\"id\":\"p1042\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p1056\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"vitesse\"},\"renderers\":[{\"id\":\"p1053\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p1066\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"acceleration\"},\"renderers\":[{\"id\":\"p1063\"}]}}]}}]}}]}};\n",
       "  const render_items = [{\"docid\":\"0c4a8dae-190e-48ab-9cdc-87e3dede7c78\",\"roots\":{\"p1001\":\"e5452ae5-1919-4e90-94c7-632dda9623e7\"},\"root_ids\":[\"p1001\"],\"notebook_comms_target\":\"p1067\"}];\n",
       "  void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
       "  }\n",
       "  if (root.Bokeh !== undefined) {\n",
       "    embed_document(root);\n",
       "  } else {\n",
       "    let attempts = 0;\n",
       "    const 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": "p1001"
      }
     },
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Widget Javascript not detected.  It may not be installed or enabled properly. Reconnecting the current kernel may help.\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "3acf16305e82406eaffddf44c2341d4f"
      }
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "show(p, notebook_handle=True)\n",
    "interact(update, mass=(0.1,0.5,0.01), kressort=(1,100), xzero=(-3,3,0.1));"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "hide_input": false,
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.10.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
