{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Bouncing Ball Example\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "The aim of this notebook is to detail the experimentation results for modifying and optimizing the parameters of a\n", "bouncing ball model. This model is taken from the examples of the PyFMI library (https://pypi.org/project/PyFMI/), which simulates models using the Functional Mock-up Interface (FMI) standard (https://fmi-standard.org). The intent of the FMI standard is to present system components as black boxes, where internal details are hidden. This is representative of industrial systems with intellectual property concerns.\n", "\n", "The bouncing ball equations and initial parameters are:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "%%latex\n", "\\begin{equation}\n", "\\frac{dh}{dt} = v; \\frac{dv}{dt} = -g;\\\\\n", "\\mathit{when}~h < 0~\\mathit{then}~v := -e * v;\\\\\n", "\\mathit{initial:}~e = 0.7, g = 9.81\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Import PyFMI and load the Bouncing Ball FMU:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "from pyfmi import load_fmu\n", "model = load_fmu('bouncingBall.fmu')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Set the initial height to 100, and simulate for 20 seconds:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "model.set('h',100)\n", "result = model.simulate(final_time = 20.)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Define a plot function `plot(result)`:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "def plot(res):\n", " # Plot the height\n", " import pylab as P\n", "\n", " # Retrieve the result for the variables\n", " h_res = res['h']\n", " v_res = res['v']\n", " t = res['time']\n", "\n", " plot_vel = False\n", " fig = P.figure(figsize=(3, 1.75),)\n", " P.clf()\n", " \n", " if plot_vel:\n", " P.subplot(2,1,1)\n", " \n", " P.plot(t, h_res)\n", " P.ylabel('Height (m)')\n", " P.xlabel('Time (s)')\n", " \n", " if plot_vel:\n", " # Plot the velocity\n", " P.subplot(2,1,2)\n", " P.plot(t, v_res)\n", " P.ylabel('Velocity (m/s)')\n", " P.xlabel('Time (s)')\n", " P.suptitle('FMI Bouncing Ball')\n", " P.show()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(result)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Parameter Exploration\n", "Reset the model, set the height to 200, and simulate. This experimentation could be repeated to explore the behaviour of the bouncing ball" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "model.reset()\n", "model.set('h',200)\n", "result = model.simulate(final_time = 20.)\n", "plot(result)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Parameter Optimization\n", "The goal is to determine a height such that the ball bounces precisely halfway through the simulation. First, define a function to return the height at that time." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def halfway_height(init_h):\n", " model.reset()\n", " model.set('h', init_h)\n", " result = model.simulate(final_time=20.)\n", " halfway_index = len(result['h'])//2\n", " return result['h'][halfway_index]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then, use an optimization library to choose a height between 50 and 200 metres which minimizes that height." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[84.91985522]\n" ] } ], "source": [ "import scipy\n", "opt_result = scipy.optimize.brute(halfway_height, ranges=((50, 200),))\n", "print(opt_result)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "When the ball starts off at around 85 m high, it will bounce at time 10. Plot these results to confirm." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Height: -0.1144333719996773\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAANcAAACZCAYAAAC8L6+pAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAfSUlEQVR4nO2deXxV1bXHvysjZCAhIyQEAmEeAwQEFQFFoFIUa0sdsLUWrBVbsVVfbV/79NW21Fq1rdVX56mKVq0gKopWZShCgiRhkhAmQwIhAUISEiDDen+cE3qB5Obm5k4J+/v5nM89d5999ln35v6yx7W2qCoGg8HzBPnbAIOhs2LEZTB4CSMug8FLGHEZDF7CiMtg8BJGXAaDlzDiMpxGRCaJyA5/29EcIqIi0t8+f15EHvC3Ta1hxNUCIrJXRGpFpNrhSBGRdPsP/cVZ+RNE5JSI7D2rjGktlH+fiNQ5lL1dRK7x8sdyiqquVtVB3ihbRD4VkRP2Zz0mIqtEZIQ3nhUoGHE5Z7aqRjkcJQ7XIkVkuMP764E9bSz/taaygUXAyyKS3F6jA5jb7c8aD3wKvORfc7yLEZf7vAR81+H9d4AX3S1MVT8AqoCMpjQRWSAihSJyRESWiUiKnd5Ue4Y45P1URObb5zeJyBoReUhEjorIHhH5mkPeOBF5TkRK7Otv2+lTRGS/Q769InKXiOTbtc1rItLF4fo9InLALme+Y9Otlc9aDywBhjqUNV5E1olIhV3mYyIS5t63GRgYcbnPy8C1IhIsIkOAaGC9OwWJxSwgDNhmp10K/A6YC/QE9mH9IF3lAmAHkAA8CDwjImJfewmIAIYBScAjTsqZC8wE+gIjgZts+2YCPwGmAf2Bya4aZovmBuBzh+QG4E7b3onAZcBtrpYZiIS0nuW85m0RqbfPP1XVOQ7X9mP9eKcBU3Gv1porIl/HElU4cK+qVtjXbgCeVdUvAETkXuCoiKS7WPY+VX3KvvcF4HEg2RbY14B4VT1q5/3MSTl/bmoOi8g7QGaT7cBzqrrVvnY/MK8Vm/4sIg9hCbsW+EbTBVXd6JBvr4j8DUuwj7b6SQMUU3M5Z46qxtrHnGauv4j1n/w6rJqsrbxulx2B1Rz8joj8wL6WglVbAaCq1cBhINXFsg863Ftjn0YBacARB2G5XA5QY5fRZF+RwzXH85b4sarGAl2ArwNviMhIABEZKCLLReSgiFQCv8WqxTosRlzt401gFrBbVfe1ltkZqroXeB+YbSeVAH2arotIJNZAQDFw3E6OcCiih4uPKgLiRCS2PfYCB4BeDu/TXL1RVRtVdTVQCEy3k58AvgQGqGo34OeAtFBEh8CIqx2o6nHgUmB+e8sSkV5YfZutdtIrwPdEJFNEwrH+k69X1b2qWoYlsnl2n+9mHAZCWrH5AJaIHxeR7iISKiKXuGHy67Z9Q0QkAvhVW24WkYlYAxpNnzcaqASqRWQw8EM3bAoojLjaiarmqOouN2//dtM8F5ANrAXut8v9GPglVu14AEs81zrcuwC4G6upOAz4dxueeyNQh1VTHMKaBmgTqvo+8GfgE6waaJ196aST2x5z+LwvAf9tlwNwF9Z0RhXwFPBaW20KNMQ4Sxo8gT1iugUIt4faz3tMzWVwGxG5WkTCRKQ78HvgHSOs/2DEZWgPPwDKgF1Y81Qdvp/kSTpEszAhIUHT09P9bYbBcA4bN24sV9XE5q51iEnk9PR0cnJy/G2GwXAOItLiFIxpFhoMXqJD1FwtUXSkhkWv5ZLcLZwxvbsza2RPesZ09bdZBgPQwWuuk/WNhIcEsbWkkgfe3c7kBz/lgeXbOFHX4G/TDIaOXXP1T4rilQUTANhbfpzHPy3k6TV7WFNYzjM3jSM11tRiBv/RoWsuR9ITInnwm6N4/nvjKK6o5VtP/Jt9h4+3fqPB4CU6jbiamDIoiSW3TKCmroHvPZfNsZo6f5tkOE/pdOICGJYSw5M3ZlF0tIbbXtlIQ2Pgz+UZOh+dUlwA4/vG8cCc4awtPMwza3b72xzDeYjXxCUig0Qk1+GoFJFFdtSjYof0K7xlw9ysNGYMS+ahDwr48mCltx5jMDSL18SlqjtUNVNVM4GxWF6s/7QvP9J0TVXf85YNIsJvrx5BVJcQfvX2VjrCUi9D58FXzcLLgF3t9dZ1h/iocO6ZMYgNe4+wLK+k9RsMBg/hK3FdC7zq8P52O1zXs7a7glf5VlYaI1Jj+O17280Es8FneF1cdhitK4F/2ElPYHnVZmJ52P6xhftuEZEcEckpKytrlw3BQcIvZg2htPIkf1//VbvKMhhcxRc119eAL1S1FEBVS1W1QVUbsdy5xzd3k6o+qapZqpqVmNjsiv42MaFfPBdmxPPEp4XUnDL+fAbv4wtxXYdDk1BEejpcuxrLNdwn3Hn5QMqrT/GKqb0MPsCr4rKjAl0OvOWQ/KCIbBaRfKxgmnd60wZHxqXHcUHfOJ5bu5f6hkZfPdZwnuJVcalqjarGq+oxh7QbVXWEqo5U1SvtUF8+Y/6kfhRX1LJi68HWMxsM7aDTrtBoicsGJ5EeH8FTq/eYeS+DVznvxBUUJNx8cV/yiir44quK1m8wGNzkvBMXwDVjehEZFsySDWZgw+A9nIpLRHrZ+zMtFZFsezfAx0Vkloh0WGFGhodwZWYKy/MPUHXCuKQYvEOLAhGR54BngVNYAR+vw9ov6SOsmOZr3IwxHhDMzUqjtq6Bd/J8Op5iOI9w5ub/R1Vtbg5qC/CWvfKit3fM8j6ZabEMSo7mtZwirr+gw34MQwDTYs3VgrAcr59S1ULPm+QbRIRvj0sjr6iCgtIqf5tj6IS02m8Ska+LyCax9uWtFJEqe3OyDs/sUSkECSzLNavlDZ7HlUGJR7E21o5X1W6qGm1vTtbhSYwO56L+CSzLKzFzXgaP44q4ioAt2kl/fbNHpvDVkRry9h9rPbPB0AZcEdc9wHsicq+I/KTp8LZhvmLG8B6EBQfxjnGkNHgYV8T1GywX/S5YW2s2HZ2CmK6hTB6UyPL8EhpNlCiDB3El4m6cqk5vPVvHZdaInqzcVkre/gpG9/a6Y7ThPMGVmusjEenU4po6KIngIOHDbaX+NsXQiXBFXAuBFSJS29mG4puIiQjlgr5xrDTiMniQVsVlD70HqWrXzjYU78j0ockUHqpmd1m1v00xdBKcrS1Md3ajWPTytEH+YtrQZABTexk8hrOa6w8i8qaIfEdEholIkoj0FpFLReTXwFpgiLPCRWSv7dKfKyI5dlqciKwUkZ32a0CMIPTqHsGwlG5GXAaP4Wxt4beAXwKDgL8Cq4GlwHxgB3Cpqq504RlT7ci6Wfb7nwEfq+oA4GP7fUBw+dBkNn51lPLqk/42xdAJcNrnUtVtqvoLVZ2iqoNUdbSqXq+qL6vqCTefeRXwgn3+AjDHzXI8zqWDk1CFNTvL/W2KoRPgbYdHBT4UkY0icoudltwUlMZ+TfKyDS4zPCWGuMgwVhW0LwipwQDe37b1IlUtEZEkYKWIfOnqjbYYbwHo3ds3/lZBQcLF/RNYtbOcxkYlKEh88lxD58TbodVK7NdDWDucjAdKmwKD2q+HWrjXoxF3XWXywETKq0+y7UCnmsoz+AFX/Lk+diWtmTyRIhLddA5Mx/JiXoblwoL9urQtBnubSQMTAFi10zQNDe3D2TxXFxGJAxJEpLs9hB5nz3+luFB2MlacjTxgA/Cuqq4AFgOXi8hOrGi8i9v7ITxJUnQXhvTsZvpdhnbjrM/1A2ARlpA2Ak0dkEqsoXmnqOpuYFQz6Yex9usKWCYPTOTp1bupPllPVLi3u6WGzoqzea4/qWpf4C5V7aeqfe1jlKo+5kMbfc4lAxKob1TW7z7sb1MMHZhW/y2r6l9E5EIg3TG/qr7oRbv8ypg+3QkLCeLz3Ye5bEiyv80xdFBaFZeIvIS1WV0u0LQtowKdVlxdQoMZnRbLOh/XXPuP1rA0t4Tcogoqak4RFxnG+L7xXD06lbjIMJ/aYmg/rnQosoChnTWGRktMzIjnTx/v5FhtHTFdQ736rOMn6/nDBzt46fN9NDQqA5KiiI8K48uDVXywtZSHPtjBD6dk8MMpGYQGd9hAx+cdrohrC9ADa4vV84YJ/eJ59KOdbNhzhMuHeq9p+NXhGua/mM3OQ9VcP743t07OIC0u4vT1naVVPPrRTh5eWcDqnWU8eWMW3U0t1iFoUVwi8g5W8y8a2CYiG4DTK1pV9Urvm+c/RveOJTwkiHW7DntNXEVHarj2yXXU1DXw0s0XcPGAhHPyDEiO5q83jGF6bjF3v5HP3L+t47UfTDTNxA6As5rrIZ9ZEYCEhwQztk93PvdSv+vI8VNc//TnHD/VwKsLJjA0xbn/6VWZqSRFd+Gm5zbwveezWbJgAl3Dgr1im8EzOBuK/8zZ4Usj/cWEfvFsP1hJRc0pj5bb0KjcsWQTpZUneeHm8a0Kq4mJGfH85brR5BVVcP87Wz1qk8HzuLL8qcqOneF4FInIP0Wkny+M9BcTM+JRhfV7jni03Mc/KWT1znL+98phZKbFtune6cN6sHBqBkuyi3h7U7FH7TJ4FleGnh4G7gZSgV7AXcBTwBKsLYY6LSN7xRAWEkTOXs+Ja2dpFX/+105mj0rh2vHurfa/c9pAsvp051dLt1BWZRw7AxVXxDVTVf+mqlWqWqmqTwJXqOprQEC46HuL8JBgRqbGkLPvqEfKa2xU7nkzn6jwEO6bPdTtckKCg1h8zUhO1DXym3e3ecQ2g+dxRVyNIjJXRILsY67DtU4/9zU2vTtbio9xoq6h9cytsCyvhE1fVfDfs4YSHxXerrL6J0XxwykZvJ1bwrpdZplWIOKKuG4AbsTyuyq1z+eJSFfgdi/aFhCM7d2dugZlc3H7Nmo4UdfAHz7YwfDUblw9OtUjtv1wSgY9Y7qweMWXZpeWAMSVuIW7VXW2qiaoaqJ9Xqiqtaq6xhdG+pOxfayWb87e9jUNX/58H8UVtfxs5hCPeTh3CQ3mzmkDySuq4IOtBz1SpsFzOJtEvkdVHxSRv9BM809Vf+xVywKE+Khw+iVEsnHfEawllm2n5lQ9f/2kkEkDEpqdKG4P3xiTypOrd/PwygKmD+1hQhMEEM5qru32aw6WP9fZx3nD2D7d2bjvqNtNr9eyizhaU8eiaQM8bJk1uLFwagYFpdV8sqPZiAkGP+FsEvkd+/UFVX0BeKPp3H7vFBFJE5FPRGS7iGwVkTvs9PtEpNgOFJorIld47NN4iaz07hytqWNX2fE231vX0MjTq/cwLr07Y/vEecE6+PrIFFJju/LEp7u8Ur7BPVyZRJ4oItuwazIRGSUij7tQdj3wU1UdAkwAFopI0/jzI3ag0ExVfc9d431FU7/rCzeG5Jfnl1BcUcutk91rUrpCaHAQCyb1JWffUY/OyRnah6t7Is8ADgOoah5wSWs3qeoBVf3CPq/CEqdnhsl8TL+EKGIjQsnZ17YfrqryzJo9DEiKYuog74ZnnDsujdiIUJ5Zs8erzzG4jkvOQapadFZSmyZ97KA2o4H1dtLtIpIvIs8GSqx4ZwQFCWN7W/2utpC//xhbiiv5zsQ+Xh9oiAgLYW5WGiu3lXKo0t1gyAZP4tKG47abv4pImIjcxX8GO1pFRKKAN4FFqloJPIE17JaJ5SP2xxbuu0VEckQkp6zM/5GYRqXFsrv8OFUn6ly+55X1XxERFswcD81rtcZ143tT36i8nnP2/0KDP3BFXLdibYCXCuzHEsVCVwoXkVAsYf1dVd8CUNVSVW1Q1UasNYrjm7vXX0FBW2JUWiyquDyZfKy2jmV5JVyVmUJ0F+96MjfRNyGSi/sn8OqGIhrM/s5+x5VJ5HJVvUFVk1U1SVXn2eHRnCIiAjwDbFfVhx3SezpkuxrL0zngGZkaA0BekWvientTMbV1DVw/vo83zTqHGy7oTXFFLZ8VmGF5f+NsErnZyeMmXJhEvghrqdRmEcm1034OXCcimXbZe7HiIwY83SPD6BMfQV5RhUv53/piP0N6dmNErxgvW3Ym04YmExcZxptfFHPpYM95UKsqB46d4GR9Iz26dTGOmi7gzBM5x+H8fuB/2lKwvTSquV58wA+9t8SoXrEuDXXvKT9O3v5j/PyKwT6w6kxCg4OYPbInS7KLqDxRR7d2NkmLjtTw1OrdLM8/wJHjltNocJAwtk93browna8N74HVSDGcTYvicpwoFpFFrkwcd3ZGpcWyLK+EQ5UnSOrWpcV8b28qRgSuHOWfmYc5o1N5Yd0+Vmw+yNxxaW6Voao8/++9/H7FlzQ2wszhPRjXN46I0GB2l1ezPP8At/39Cy7MiOfRb2c6/T7OV1yN1Wx6x8Aou4mXt/8Ylw9t/sekqizNLWZiv3h6xPjnB5eZFkt6fAT/3FTslrgaGpVf/HMzS7KLuHRwEg/MGU5KbNcz8vz08kG8mv0Vv3l3O1c+tpbnbx7H4B6dbh/6dmGC4LWBYSkxBAcJ+ftb7nflFlWw93ANczL9N18uIswZncrnew5TUlHbpntVlV8u3cKS7CIWTs3g6e9knSMssOb+brigD2/ceiGKMu/p9RQeqvbUR+gUONvl5HTsDGCkQ/yMKjvtvKNrWDCDkqPJdTKosTS3hLCQIGaO6OFDy87lylEpqNJmV5TH/lXIK+u/4rYpGdw9Y3Crk99DU7rxyoIJAMx/IZtjta7PA3Z2nC3cjVbVbvYR4nAerarnbf0/Ki2G/P3Hml0hr6qs2HKQyQMT2z2Q0F76JUYxMDmKFVtcF9e/d5Xz8EcFzMlM4e4Zg1y+LyMxiv+bN5b9R2v56eu5NJo5NsA0C9vMqF6xHKutY+/hmnOu5e8/xsHKE8wY5t9aq4mZw3qQvfcI5dWtB7GpqDnFoiW59E2I5DdXj2jzCGBWehy/mDWEj7YfYkm2WSECRlxtpmneakszKzU+3HaQ4CBh2pDA2EN9xvAeNCp8tK201by/X/Elh4+f4s/XjibSzT3JbrownQsz4vnde9s5cKxtfb3OiBFXGxmQFE1osLC15Nxu5wdbS7mgbxyxEYERanpoz26kxXVlRSv9rpy9R3h1QxHfv7gvw1Pdn/QWERZ/YyR1jY3cv8xEpTLiaiNhIUEM6hHN1pIza65dZdUUHqpmuhc3bWgrIsLMYT1YW1hOZQsLjlWV+9/ZRkpMF+64rP2e0r3jI1g4pT8rth5kg4eDqXY0jLjcYFjPGLaWVJ4xqPHhVqvpNT1A+ltNzBzeg7oG5ZMvm19ruGLLQTYXH+POywe63Rw8m/mT+pHcLZzfvLutTYMbjfZuno+sLODetzbzu/e2szy/hOqT9R6xy9eYDX/dYFhqN17LKeLAsROn54BWbjvIiNSYZueE/ElmWnfiIsP4dEcZV50191bf0MhDH+6gf1IU3xjTy2PP7BoWzF3TB3H3G/ms3F7q0gDPZwVl/Pbd7eworSJIoHtEGFUn6zlV30i3LiHcNrU/8y/uS0gH2p/MiMsNhqVY/ZKtJZWkxHbl6PFTbCqq4MeXej4ATXsJDhIuGZDAZwVlNDbqGfNWS3NL2FV2nP+bN4ZgDztzXj06lb/8q5DHPylk+tDkFkcfGxqVxe9v56nVe+ibEMnDc0cxfVgPosJDaGhUsvce4clVu1n8/pd8vL2Ux28YS2J0+wKq+oqO828ggBjSMxoRTve7VheWowqTB/nf76w5pg5O4sjxU+Q7jHCqKn9btYvBPaK9MnUQEhzErZMzyNt/jDWF5c3mqW9o5Cev5/LU6j3cOKEP798xiW+M6UWU3TwNDhIm9Ivn2ZvG8adrM9lSXMm3/7auzatO/IURlxtEhIXQLyGSLcXWiOFnO8qIjQhlVK+27VjiKyYNSESEM/pdnxWUUVBazYJJ/by2qv2asakkdwvnsX8VNnv918u3sTS3hLtnDOLXc4bTJbRlN5arMlN56fvjKas6yfeey26TR7i/MOJyk+GpMWwrOUZjo/JZQRmTBiR6vGnlKeIiw8hMi+XTgv+ES3hq9W6Su4Uze1SK154bHhLM/Iv7sX7PkXPmBV/6fB8vrNvH/Iv7snBqf5fKy0qP44l5Yyksq+bHr25qdbBkV1k17+SV8Hp2EasKyqg91f54/23B9LncZFhKN5bmlrB2Vznl1SeZPDAwm4RNTBmYxKMfF3C4+iSllSdZW3iY/5o5mLAQ7/5/nZuVxh9X7uDlz/ex+JqRABSUVvHr5duYOiiRe68Y0qbyLh6QwH2zh/LLpVt5du0e5k86c4s4VeWj7Yd4eGUB2w+cORfZJTSIb2el8aPLBpDQzo0wXMEvNZeIzBSRHSJSKCI/84cN7aVpUOPxT6xAnJcM9GyYak8zdXAiqrBqZxmvbNhHeEgQ1413z9erLcREhDInM5W3c4s5VlvHqfpGFi3JJTo8hD98a5Rbtf28CX2YNiSZBz/YQUFp1en04yfr+cnreSx4MYeTdQ3cN3soKxZNYvU9U3nx5vHMHpnCy+u/YsYjq/iswPtBj3xec4lIMPBX4HKsgDfZIrJMVTvUlP4we6vVdbsPMyylG0nRge0sODwlhrjIMD7YUsrawnJmjejps5UkN07sw5LsIt7YuJ/6hka2HajkyRvHul17iAiLrxnB9EdW8fO3NvOPWydSWVvPTc9vIK+ogjunDWTh1Iwzhu3T4iK4ZGAiCy7px49e2cTNz2fzh2+OPD0FoaqsKSznnbwStpZUUnuqgZ6xXZg0IJFZI3qSFhfRZjv90SwcDxSq6m4AEVkCXAV0KHHFRoQRHR5C1cn6gG8SguV/dWFGPMvzDwC4vaulOwxLiWFM71geXVlAoyrThiS3e7I9ISqcn80czD1v5p8W7tbiSh6/YSwzh7dc9sDkaN687UJueTGHn/4jj+guofRPiuKeN/LI3nuU6PAQxvTpTlR4CHvKj7P4/S85UdfAomkD22yjP8SVCjgum94PXOAHO9pNlb1yYFoALXlyxqQBCSzPP0BGYiTj0n0bi/W68b25+418AH759bb1s1rim2N78cqGr7j3rc0A/PX6MU6F1URUeAjPfHcc1z65jgUvWqFiYiNCeWDOcL6V1YvwkP+MWu4/WuN2v9Qffa7mGtnnDPsEWlDQ5nhgznDS4yPIDNAh+LOZNCCRkCBh3oQ+Pg8qc8WInozuHcv/XjWMPvGRHikzKEj49VXD6RoazN0zBjFrZM/Wb7LpGhbMU9/Nom9CJJMGJPD+HZOYN6HPGcIC6NU9wu0mv/h6R0IRmQjcp6oz7Pf3Aqjq71q6JysrS3Nyclq6bGgD+4/WkBLTtVPt43WirsHpHJkzVLVd/2hEZKOqZjV3zR81VzYwQET6ikgYcC2wzA92nJf06h7RqYQFuC0swKs1uM/7XKpaLyK3Ax8AwcCzqrrV13YYDN7GL5PI9p5cHTY4qMHgCj7vc7mDiJQB+5xkSQCaXx3qX4xdbaMj2tVHVZudi+kQ4moNEclpqVPpT4xdbaOz2WUW7hoMXsKIy2DwEp1FXE/624AWMHa1jU5lV6focxkMgUhnqbkMhoCjQ4srUP3CRGSviGwWkVwR8du6LRF5VkQOicgWh7Q4EVkpIjvtV9+u4G3ZrvtEpNj+znJF5Ao/2JUmIp+IyHYR2Soid9jpbn1nHVZcDn5hXwOGYm0HO9S/Vp3BVFXN9PPQ8vPAzLPSfgZ8rKoDgI/t977mec61C+AR+zvLtBca+Jp64KeqOgSYACy0f1NufWcdVlw4+IWp6imgyS/MYKOqq4Czw95eBTTtEvoCMMenRtGiXX5HVQ+o6hf2eRWwHctFyq3vrCOLqzm/MP/tOHcmCnwoIhtF5BZ/G3MWyap6AKwfExAYu0ZY3C4i+Xaz0efNVUdEJB0YDazHze+sI4vLJb8wP3GRqo7BarIuFJFL/G1QB+AJIAPIBA4Af/SXISISBbwJLFJVtzd67Mji2g84RljpBZT4yZYzUNUS+/UQ8E+sJmygUCoiPQHs1+aDyPsYVS1V1QZVbQSewk/fmYiEYgnr76r6lp3s1nfWkcUVkH5hIhIpItFN58B0YIvzu3zKMuC79vl3gaV+tOU0TT9em6vxw3cmlnPXM8B2VX3Y4ZJ735mqdtgDuAIoAHYBv/C3PbZN/YA8+9jqT7uAV7GaWHVYNf33gXisEa+d9mtcgNj1ErAZyLd/zD39YNfFWF2LfCDXPq5w9zszKzQMBi/RkZuFBkNAY8RlMHgJIy6DwUsYcRkMXsKIy2DwEkZcAY6IxDusFD941srxf3vpmaNF5Gkn1xNFZIU3nt2ZMPtzBTiqehhrSRAich9QraoPefmxPwcecGJTmYgcEJGLVHWtl23psJiaqwMjItX26xQR+UxEXheRAhFZLCI3iMgG268sw86XKCJviki2fVzUTJnRwEhVzbPfT3aoKTc1rT4B3gZu8NFH7ZAYcXUeRgF3ACOAG4GBqjoeeBr4kZ3nT1g+U+OAa+xrZ5PFmUuP7gIWqmomMAlo2u07x35vaAHTLOw8ZKvtFiEiu4AP7fTNwFT7fBow1CE+ejcRiVbLd6mJnoDjtjJrgYdF5O/AW6q6304/BHhvQ+VOgBFX5+Gkw3mjw/tG/vN3DgImqmotLVMLnN4zR1UXi8i7WGvsPheRaar6pZ3HWTnnPaZZeH7xIXB70xsRyWwmz3agv0OeDFXdrKq/x2oKDrYvDSSwVvsHHEZc5xc/BrJsb99twK1nZ7BrpRiHgYtFIrJFRPKwaqr37fSpwLu+MLqjYlbFG85BRO4EqlTV2VzXKuAqVT3qO8s6FqbmMjTHE5zZhzsDEUkEHjbCco6puQwGL2FqLoPBSxhxGQxewojLYPASRlwGg5cw4jIYvIQRl8HgJf4fpUdnOG+jingAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "h = 84.91985522\n", "model.reset()\n", "model.set('h', h)\n", "res = model.simulate(final_time=20.)\n", "print(\"Height: \" + str(halfway_height(h)))\n", "plot(res)" ] } ], "metadata": { "celltoolbar": "Slideshow", "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.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }