{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# [Goulib](../polynomial.ipynb).polynomial\n", "polynomial and piecewise defined functions" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from Goulib.notebook import *\n", "from Goulib.polynomial import *\n", "from Goulib import itertools2, plot" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Polynomial\n", "\n", "a Polynomial is an Expr defined by factors and with some more methods" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "image/svg+xml": [ "\r\n", "\r\n", "\r\n", "\r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", "\r\n" ], "text/html": [ "${\\left(3x^2+x\\right)-1}$" ], "text/latex": [ "${\\left(3x^2+x\\right)-1}$" ], "text/plain": [ "(3*x**2+x)-1" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p1=Polynomial([-1,1,3]) # inited from coefficients in ascending power order\n", "p1 # Latex output by default" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "" ], "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p2=Polynomial('- 5x^3 +3*x') # inited from string, in any power order, with optional spaces and *\n", "p2.plot()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(-1, 1),\n", " (-0.8, 0.12000000000000033),\n", " (-0.6000000000000001, -0.5199999999999998),\n", " (-0.4000000000000001, -0.9199999999999999),\n", " (-0.20000000000000007, -1.08),\n", " (-5.551115123125783e-17, -1.0),\n", " (0.19999999999999996, -0.6800000000000002),\n", " (0.39999999999999997, -0.1200000000000001),\n", " (0.6, 0.6800000000000002),\n", " (0.8, 1.7200000000000006),\n", " (1.0, 3.0)]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[(x,p1(x)) for x in itertools2.linspace(-1,1,11)] #evaluation" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "image/svg+xml": [ "\r\n", "\r\n", "\r\n", "\r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", "\r\n" ], "text/html": [ "${\\left(5x^3+3x^2\\right)-2x+1}$" ], "text/latex": [ "${\\left(5x^3+3x^2\\right)-2x+1}$" ], "text/plain": [ "(5*x**3+3*x**2)-2*x+1" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p1-p2+2 # addition and subtraction of polynomials and scalars" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbAAAAEgCAYAAADVKCZpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xtc1HW+P/DXDAMzDMxwHwRRuWtChCteKhXvl9VS0zU7bmvZLlbH2uPZtTr5KDtb/txO7emcPbr54HSvTdtKo5OmreW1LC9FrldQwQsiDKByEQYY3r8/gEnuIJfv9wuv5+PBA+Z7gff3y3fmNZ/v9/P9jE5EBERERBqjV7oAIiKim8EAIyIiTWKAERGRJjHAiIhIkxhgRESkSQwwIiLSJAYYERFpEgOMiIg0iQFGRESaxAAjIiJNYoAREZEmMcCIiEiTGGBERKRJDDAiItIkBphG1NTU4IEHHsDYsWMxZswYnDhxQumSWrVv3z6MHz8e48ePR2xsLJYvX650SZ2ya9cuTJo0CRMmTMDmzZuVLqdF2dnZCAoKcu17u92udEndYsOGDQgKClK6jFbl5eXhjjvuQHJyMiZOnIjc3FylS2rR/v37cfvttyM5ORn33XcfqqqqlC6pfYQ04fDhw7Jw4UIREdmzZ4/85je/Ubii9lu8eLHs2rVL6TJuWnl5ucyaNUscDofSpbQpKytL5s2bp3QZ3crpdMo999wjw4YNU7qUVlVXV4vT6RQRkTfffFOef/55hStqWU5Ojly/fl1ERJ5++mn58MMPFa6ofXptC+zf/u3f8F//9V8tPlaDkSNH4tixY+1aNiwsDG5ubhARXLlyBYGBgd1cXdeoqqrCgQMHMHbsWKVLuWnffPMNPD09cdddd2Hu3Lm4fPmy0iW16uuvv8bYsWPx9NNPQ274vNqOHG9q9v7772P+/PnQ69X98uXm5uaqsaSkBHFxcQpX1LLQ0FB4enoCAAwGg+r3rYvSCdod8vPzJTQ01PWOovHj9qqoqJAlS5bIwIEDxdvbWxITE2Xr1q3tnp+cnCxGo1G8vLzEy8tLYmNjG/z+Dz74QO6555521eJ0OmXJkiUSGxsrAwcOlAsXLnRoW1pSX1v9l16vl2XLlrWr/vbYsmWL6/d11qJFi6Rfv35isVgkJiZG/vd//7fZ5TIyMsRoNMqiRYtc0zqzLe+//74MGzZMHA6HbNmyRZYuXdrpbTl+/LhMmDBBrFarREVFyaZNmxrMLywslDlz5ojZbJaBAwfKX//613b93oqKCiktLZWamhp56KGH5KOPPnLN68jx1pb/+Z//keHDh4uHh4csXry4yfzWjqu21m1NdXW13HXXXeJ0OmX48OGd3o62nsNtbUtbfvjhBxk5cqTExsZKdna2qmsVETl79qyMGDFCE2cbRER6ZYD9x3/8h/z6179u8XF7lZaWyqpVqyQrK0ucTqf83//9n3h7e0tWVla75icnJ7f4IitSe2rKz89PLl261GYtn3/+uTzwwAMiInLw4EFZsGBBh7enLaWlpeLl5SW7d+8Wkbbrb48HHnjA9ftas2rVKlm1alWryxw9elQqKipEROTEiRMSHBwshw4darLclClTZMyYMU0C7Ga3ZevWra4XgYqKChk7dmyry7e1LVVVVRITEyN/+tOfpLq6Wr788ksxm81y6tQp1zILFy6UBQsWSElJiezdu1esVqscPXq0Q3Vv2bJFnnnmGdfjjhxvbfn4449l8+bN8vDDD7cZQo2Pq46s29hbb70l7777rohIlwRYW8/h5pa/cVva64MPPmjzjU9bx01313rt2jUZO3asnDx5sl3Lq4FG2okd8/nnnyM5ObnFx+3l5eWF5557DuHh4dDr9Zg1axYiIiJw+PDhds1vi8lkwvDhw/HFF1+4pj3xxBOYO3eu6/GKFSswadIkVFVVISAgAAAQGBiIa9eudXh72vLRRx/BZrO1+3Rfa7UCtacPDx48iDFjxnRJfXFxcTAajQAAnU4HnU6HM2fONFhm48aN8PX1xaRJkzr0u1vblpEjR+LEiRMQEaSnpyMqKqpT23Hy5ElcunQJy5cvh5ubGyZOnIg777wT7777LgCgrKwMH3/8MZ5//nl4e3tjzJgxuPvuu13zW6u1uLjYNX3v3r2Ijo52PW7ueLtZ99xzD+bMmeM6JlvT+Lhqa93Wtu/48eN45513MH36dGRmZuLxxx/v1HZ09DnceFtaq9XhcLim+/j4wGw2K1prW/Xed999eO655zB48OBO1dmjlE7Q7hAYGCgHDhxo8fHNunz5shiNRjlx4kS75icnJ0tgYKAEBATIHXfcITt37myyzmOPPSbLly93PS4oKBAfHx/54Ycf5NVXX5X4+Hi5evWqVFVVyYIFC2TcuHEyatQo+frrrzu9PY1NmDChwTvAtupvqdZ6W7dulccee6xdf7s9LTARkUceeUQ8PT0FgAwbNkxKSkpc865duyYxMTFy/vx5WbVqVZMWWGe2Ze3atTJ27FhJTk6WM2fOdGpbjhw5Il5eXlJTU+OaNnnyZJkzZ46IiHz//fdiMpkarPPSSy/JrFmz2qz1008/lZ/97GcyZswYuf/++6WqqqrB72l8vHXWypUr22xFNT6u2lq3rf9Fva5ogTXW1nO88ba0Vus333wjY8eOlfHjx8v06dPbbPm29zlws7W2Vu8777wjAQEBkpycLMnJybJx48Z216GkXhlgBoOhwT+18eObUVlZKZMmTZKUlJR2z//222+luLhYKioq5K233hJvb285ffp0g/WefvppefDBBxtMW7Vqldx6660ycOBAOX/+fKfqbq9z586JXq+Xs2fPdqj+rqq1I0/e6upq2bt3rzz//PNSWVnpmv7444/LH//4R9fvuzHA1LQtlZWVEhERIS+++KJUVlbK9u3bxd3dXaZOnSoitb1Mg4ODG6yTmpoqycnJna61ueOtM9oKsOaOq/asq8RzoK3neEvbosRz4GZr7cp61aBXBlhQUFCDFlfjxyK178gBNPt15513NljW6XTKvffeKzNmzGjwgtne+fWmTZsmf/7znxtMa+4d8SeffCIA2n3h/ma2qbHnn39exo0b1+oyzdV/s7WKiMycOVN8fHzEx8dHjEajGI1G1+OZM2e2uf7SpUvlv//7v0Wk9mL50KFDXRefGweY2rblxx9/lHHjxom/v79MnTpVFi1aJEuWLBGR2haYp6dng+VffvllVwusM7W21AK72WOnrQBr7bhqbd3O/C9uZlva8xxuaVt6+jnQmVo7W6/a9MoAmzRpkrz33nstPu6ImpoaeeCBB2T8+PHN9mJsa/6Npk+f7nrBrTd58mR56623XI+PHDkiISEhsnjxYpk0adJN1XwzYmJi5PXXX291mcb1d2WtHT19IiLy0EMPyeOPPy4iIq+88oqYzWYJDg6W4OBg8fLyEpPJ1OK9Qmrblttvv13Wr18vIrUX393d3SUjI8M1//7775cnn3yy07U2Pt46q60Aa+24amndnn4OtPc53Ny29PRx05lau7peNeiVAfanP/2pwY2+jR93xNKlS2XUqFENrrW0Z/6VK1dk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3ej111/HjBkzXI+b+5/2ZF0ff/wxEhISMH/+fFy4cKFD63ZnXQBw7tw5ZGVlYeLEia5p3bW/2qOl2rtzfynJoHQB3Wny5Mm4fPlyk+mrV6/G7Nmz21xfmumgqdPpWpzeFXV1RG5uLv7xj39g2rRprmlr1qxBv379UFlZiZSUFLz44ot49tlne6yu8+fPIzQ0FGfPnsXEiRNx6623wmq1NllOqf11//334+2334ZeX/verTP7q7H2HBfddUx1tq567733Hg4dOoTdu3e7pjX3P73xDUB31nXXXXfhvvvug9FoxPr167F48WJ89dVXqtlfGzduxPz58+Hm5uaa1l37qz2UOL6U1KsDbMeOHZ1aPywszPWODwAuXryI0NBQBAYG4urVq6iurobBYHBN74q6goODkZubi5CQEOTm5sJms7W47N/+9jfMnTsX7u7urmn1rRGj0YgHH3wQL7/8co/WVb8fIiMjMX78ePzwww+YN2+e4vuruLgYM2fOxAsvvIDRo0e7pndmfzXW0vHS3DJhYWGorq7GtWvX4O/v3651u7MuoHY/r169Grt374bRaHRNb+5/2hUvyO2pKyAgwPXzb37zGzz55JOudXft2tVg3fHjx3e6pvbWVW/jxo1Yt25dg2ndtb/ao6Xau3N/KUqJC29q0lonjqqqKomIiJCzZ8+6LuYePXpURETmz5/foFPCunXruqSe3//+9w06JaxYsaLFZUeNGiVfffVVg2mXLl0SEZGamhr57W9/K08++WSP1VVUVCQVFRUiImK32yU6Otp18VvJ/eVwOGTixInyyiuvNJnXlfurteOl3tq1axt04vjFL34hIiJHjx5t0IkjIiKiyzpxtKeu77//XiIjI12dXeq19j/tibrq/z8iIps2bZJRo0aJSG2nhPDwcCkqKpKioiIJDw+XwsLCHqtLROTkyZMyaNAgqampcU3rzv1VLysrq8VOHJ999lmDThwjRowQke7dX0rqswG2adMm6d+/v3h4eIjNZpOpU6eKSG0vtRkzZriW27Jli8TExEhkZKS88MILrulnzpyRESNGSFRUlMyfP9910HZWQUGBTJw4UaKjo2XixImug+zgwYPy0EMPuZbLysqS0NBQcTqdDdafMGGCxMfHS1xcnCxatEhKSkp6rK6vv/5a4uPjJSEhQeLj4+W1115zra/k/nr33XfFYDDIbbfd5vr64YcfRKTr91dzx8szzzwjaWlpIiJSXl4u8+fPl6ioKBkxYoScOXPGte4LL7wgkZGREhsbK1u3bu1UHR2ta9KkSWKz2Vz756677hKR1v+nPVHXU089JUOHDpWEhAQZP368nDhxwrXu66+/LlFRURIVFSVvvPFGj9YlIrJq1aomb3i6e38tXLhQ+vXrJwaDQfr37y+vvfaavPrqq/Lqq6+KSO0bsUcffVQiIyMlPj6+wZvz7txfSuFIHEREpEnshUhERJrEACMiIk1igBERkSYxwIiISJMYYEREpEkMMCIi0iQGGBERaRIDjIiINIkBRkREmsQAIyIiTWKAERGRJjHAiIhIkxhgRESkSQwwIiLSJAYYERFpEgOMiIg0iQFGRESaxAAjIiJNYoAREZEmMcCIiEiT/j9UQaYE4e7UggAAAABJRU5ErkJggg==\n", "image/svg+xml": [ "\r\n", "\r\n", "\r\n", "\r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", "\r\n" ], "text/html": [ "${\\left(\\left(-225\\right)x^8-75x^7+345x^6+90x^5\\right)-171x^4-27x^3+27x^2}$" ], "text/latex": [ "${\\left(\\left(-225\\right)x^8-75x^7+345x^6+90x^5\\right)-171x^4-27x^3+27x^2}$" ], "text/plain": [ "((-225)*x**8-75*x**7+345*x**6+90*x**5)-171*x**4-27*x**3+27*x**2" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "-3*p1*p2**2 # polynomial (and scalar) multiplication and scalar power" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "image/svg+xml": [ "\r\n", "\r\n", "\r\n", "\r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", "\r\n" ], "text/html": [ "${\\left(-1.25\\right)x^4+1.5x^2+6x+1}$" ], "text/latex": [ "${\\left(-1.25\\right)x^4+1.5x^2+6x+1}$" ], "text/plain": [ "(-1.25)*x**4+1.5*x**2+6*x+1" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p1.derivative()+p2.integral() #integral and derivative" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Motion\n", "\"motion laws\" are functions of time which return (position, velocity, acceleration, jerk) tuples" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "from Goulib.motion import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Polynomial Segments\n", "\n", "Polynomials are very handy to define Segments as coefficients can easily be determined from start/end conditions.\n", "Also, polynomials can easily be integrated or derivated in order to obtain position, velocity, or acceleration laws from each other.\n", "\n", "Motion defines several handy functions that return SegmentPoly matching common situations" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "" ], "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "seg=Segment2ndDegree(0,1,(-1,1,2)) # time interval and initial position,velocity and constant acceleration\n", "seg.plot()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "" ], "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "seg=Segment4thDegree(0,0,(-2,1),(2,3)) #start time and initial and final (position,velocity)\n", "seg.plot()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "" ], "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "seg=Segment4thDegree(0,2,(-2,1),(None,3)) # start and final time, initial (pos,vel) and final vel\n", "seg.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Interval\n", "operations on [a..b[ intervals" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Intervals([[2,4), [5,6)], key=)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from Goulib.interval import *\n", "\n", "Interval(5,6)+Interval(2,3)+Interval(3,4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Piecewise\n", "Piecewise defined functions" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "from Goulib.piecewise import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The simplest are piecewise continuous functions. They are defined by $(x_i,y_i)$ tuples given in any order. \n", "\n", "$f(x) = \\begin{cases}y_0 & x < x_1 \\\\ y_i & x_i \\le x < x_{i+1} \\\\ y_n & x > x_n \\end{cases}$" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbAAAAEgCAYAAADVKCZpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3X9wVNXBxvFnJSUom8QEEg1uKqVbIQkm27AQLAiRkVJSTRUoP2ohFDSllbbqtGN/AlKniFNbsVhLWkdEK2nFYlKEVIRGW0ZIIwQKaBtaUpI1laBGwCHJspz3j477smaREJPcPfH7mWEm996zZ5/dDftwbm5YlzHGCAAAy1zkdAAAALqCAgMAWIkCAwBYiQIDAFiJAgMAWIkCAwBYiQIDAFiJAgMAWIkCAwBYiQIDAFiJAgMAWIkCAwBYiQIDAFiJAgMAWIkCAwBYiQIDAFiJAgMAWIkCAwBYiQLrY1wulwYOHKgf/OAHEfvHjRunPXv2RL3NkSNH5Ha7FQqFOnUfGzduVEZGhtxu9znn7Kxp06apsrLygm5z8OBB+f3+D3W/ndHW1qYRI0bo6NGjF3S7NWvW6I477uihVP9v3759+sxnPnPBt5szZ46effbZHkgUKZZf22jP3dKlSzVw4EC5XC6dPn26xzOgGxj0KZJMXV1dxL6KigozZcqUbruPYcOGmWeffbbT41944QUzfPhwc/HFF5uCggJTX18fPrZr1y6Tl5d3Qfc/bdo0s379+vD2L37xCzNq1CjTv39/U1xcfEFzbd++3RQUFJjExERz5ZVXdji+cuVKc9ddd3V6vra2NuPxeExjY6Mxxpjm5mbzmc98xqSkpJikpCQzduxY89e//rXT891yyy3m8ssvNwkJCeZTn/qU+fWvfx1xfOrUqaaioqLT8+3du9dkZmaaM2fOdDg2f/78qN8/nbFs2TIjyWzdujW8rzte24kTJ5r4+HgzcOBAM3DgQHPVVVd1eq7W1lbzla98xSQkJJjLLrvMPPDAAxHHoz13hw8fNpJMMBi8oNxwBgXWx0R7AyosLDRPPvlkt91Hv379Ov0m19zcbBITE83vf/97c+rUKfPtb3/b5OfnR4zxer3mb3/7W6fme/31101ycrI5depUeN8zzzxjNm7caBYtWnTBBbZr1y6zbt06s2bNmqgF1tDQYAYNGmRaW1s7Nd/vf/97c/3114e3T506ZV577TUTCoXMmTNnzMaNG01ycnKn3yD3798fvu9XX33VXHbZZaampiZ8/MknnzSf//znOzWXMcZ8/etfN/fee2+H/X/5y1/Mtdde26UCO3TokBk5cqRJT0+PKDBjPvxrO3HixA6l3Vnf/e53zfjx481bb71lDh48aC677DKzZcuW8PFozx0FZhdOIfZx7e3t2r59uyZOnHjOMfX19RGnTQoKCvSjH/1I48aNU0JCgj772c/q2LFjamtrC59qzM3N1Sc/+cnz3v8f/vAHZWdn64tf/KIGDBigZcuWae/evXrttdfCYwoKCvTcc8916vFs3bpVeXl5GjBgQHjftGnTdNNNN2nQoEGdmuNsY8aM0dy5czVs2LCoxz0ej5KTk7Vz585Ozbdly5aI53rAgAEaPny4LrroIhlj1K9fP7399tt66623OjVfdna24uPjJf3v9LDL5dK//vWv8PGCggJt27ZNbW1tXconSadPn9Y3vvENrV69ulNzvN/ixYu1cuVK9e/fv8OxD/vafhjr1q3Tj370IyUnJyszM1O33Xab1q5dG5HtQp47xB4KrI+rq6vTRRddJI/Hc0G3e+qpp/TYY4/p6NGjam9v109/+lPFx8fr5MmTkqS9e/dGvJGey4EDB5SbmxveHjhwoD75yU/qwIED4X2ZmZnau3dvp3L9/e9/1/Dhwy/osXxY3ZEvJydHAwYMUFFRkW699ValpaV1+v6//vWv65JLLtGIESOUnp6uwsLC8LErrrhCH/vYx/SPf/zjvPO8++67Onz4cId8P//5zzVhwgTl5OR0OtN7nn76afXv3z8i09m647n73ve+p8GDB2vcuHGqqqrq1Fxvv/22Xn/99Yjvvdzc3Ijvuwt57hCb4pwOgJ7V0tKihISEC77dV77yFV111VWSpJkzZ6qioqJL93/y5EmlpqZG7EtKStKJEyfC2wkJCWppaenUfC0tLV1aaX0YF5ov2vO9b98+tba2auPGjWpvb7+g+//lL3+pX/ziF3r55ZdVVVUVXpFdaL73xpydr6GhQWvWrNErr7xyQZmk/7223//+9/X888+fc8yHfW1XrlyprKws9e/fX2VlZbrxxhtVW1t73tX/e//QSkpKCu97//fdheZD7GEF1sclJyd3+EvrdrvDf44cORL1dpdffnn460suuST8hnCh3G63jh8/HrHv+PHjEW+iJ06c0KWXXtqp+aI9np7WXfkGDBigOXPm6L777uv0quQ9/fr10/jx49XY2KhHHnmkS/neG3N2vjvuuENLliyJeKPvrKVLl2ru3Ln6xCc+cc4xH/a5y8/PV0JCguLj41VcXKxx48Zp8+bN553L7XZLUsT33vu/7y40H2IPBdbHfepTn5IxRoFAILzv5MmT4T8f//jHe/T+s7OzI96s3333Xf3rX/9SdnZ2eN+rr74acarng+Tk5Oif//xnt+f8IN2dLxgM6t///neXspw+fTri1O3rr7+u9vb2Tp1Wfe/07dn5tm3bpu985zu6/PLLw/9oueaaa/TUU0+dd75t27bpoYceCt+2oaFBM2fO1MqVK8Njuvu5c7lcMsacd67k5GSlp6dHfO/t3bs34vvuQp47xCYKrI/72Mc+puuvv14vvvhij93H/PnzNX/+/KjHbr75Zu3fv1/PPPOMWltbtXz5cuXk5GjEiBHhMS+++KKmTp0a3h46dGjED9vPNnnyZO3evVutra3hfadPn1Zra6tCoZBCoZBaW1sjfo/H5XKd82cnZ86cUWtrq4LBoIwxam1tjTjFFwgE9NZbb2ns2LGS/v+Cl/r6+qjzFRYWRjzXO3fu1F//+le1t7fr1KlTWrlypd544w3l5+dLkqqqquRyuaLOdfToUZWVlenkyZMKhUL605/+pPXr12vSpEnhMVVVVZo0aVL4tOLatWs1dOjQqPNFy/fPf/5Te/fuVW1trWprayVJf/zjH3XzzTdL+uDXdtu2bdq/f3/4tkOGDNGaNWt0++23h8d8mNe2paVFf/rTn8Kv529/+1u99NJLmjJliqTzvxbz5s3Tvffeq7fffluvvfaafv3rX0c8lvc/d7CQsxdBorspymXQmzZtMp/73OfOeZv3Xzr8/kuXH3vsMTNu3Lhz3sekSZNMaWnpOeffunWrGT58uBkwYICZOHGiOXz4cPhYdXW18fl84e22tjbjdrvNq6++es75ZsyYYcrKysLbS5cuNZIi/ixdutQY87/L4N1utzl27FjUuf785z93uO3EiRPDx++//35z5513hrdfeuklc+WVV5r29vao87W3t5uMjAwTCASMMcZUVVWZnJwc43a7TXJyspkwYYJ58cUXw+PXrVtnrrnmmqhzHT161EyYMMEkJSWZ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\n", "image/svg+xml": [ "\r\n", "\r\n", "\r\n", "\r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", "\r\n" ], "text/html": [ "${\\begin{cases}0&{x}<{1}\\\\1&{1}\\leq{x}<{3}\\\\3&{3}\\leq{x}<{4}\\\\4&{4}\\leq{x}<{5}\\\\0&{x}\\geq{5}\\end{cases}}$" ], "text/latex": [ "${\\begin{cases}0&{x}<{1}\\\\1&{1}\\leq{x}<{3}\\\\3&{3}\\leq{x}<{4}\\\\4&{4}\\leq{x}<{5}\\\\0&{x}\\geq{5}\\end{cases}}$" ], "text/plain": [ "[(-inf, 0), (1, 1), (3, 3), (4, 4), (5, 0)]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p1=Piecewise([(4,4),(3,3),(1,1),(5,0)])\n", "p1 # default rendering is LaTeX" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "" ], "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p1.plot() #pity that matplotlib doesn't accept large LaTeX as title..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By default y0=0 , but it can be specified at construction.\n", "\n", "Piecewise functions can also be defined by adding (x0,y,x1) segments" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "" ], "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p2=Piecewise(default=1)\n", "p2+=(2.5,1,6.5)\n", "p2+=(1.5,1,3.5)\n", "p2.plot(xmax=7,ylim=(-1,5))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "" ], "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot.plot([p1,p2,p1+p2,p1-p2,p1*p2,p1/p2],\n", " labels=['p1','p2','p1+p2','p1-p2','p1*p2','p1/p2'],\n", " xmax=7, ylim=(-2,10), offset=0.02)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "" ], "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p1=Piecewise([(2,True)],False)\n", "p2=Piecewise([(1,True),(2,False),(3,True)],False)\n", "plot.plot([p1,p2,p1|p2,p1&p2,p1^p2,p1>>3],\n", " labels=['p1','p2','p1 or p2','p1 and p2','p1 xor p2','p1>>3'],\n", " xmax=7,ylim=(-.5,1.5), offset=0.02)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Piecewise Expr function" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbAAAAEgCAYAAADVKCZpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAHolJREFUeJzt3XtQ1XX+x/HXKVRSC/FW6kGRThGgmIWKOpWXzMsmpmOIlpd0FzfZcXIabdafuuZaOdNuu5VaYaY1tqBTW7CltFmpTeMl8pJCGycXFE6OAq2KFnjh8/uj8UwnUA+kfPnQ8zHDDJ/v93M+3/fnHDwvP9/vF47LGGMEAIBlrnG6AAAA6oMAAwBYiQADAFiJAAMAWIkAAwBYiQADAFiJAAMAWIkAAwBYiQADAFiJAAMAWIkAAwBYiQADAFiJAAMAWIkAAwBYiQADAFiJAAMAWIkAAwBYiQADAFiJAEMAl8ulVq1a6f/+7/8Ctg8cOFB79uyp9TGHDx9W69atdf78+aCO8c477ygiIkKtW7e+6JjBGjdunHJycur0mPz8fCUkJPyi415N//73v/XAAw8E1bdv377Ky8vzt7/88ksNGDCgzsecOHGi3n333To/zilHjx5VTEyMqqqq/NtWr16t1q1by+Vy6ZtvvnGwOjQYA/yEJOP1egO2ZWdnm+HDh1+xY0RFRZl333036P6bN2820dHR5rrrrjODBg0yRUVF/n07d+40d9xxR52OP27cOJORkeFvl5eXmwceeMC0bNnSdO3a1bz55pt1Gu9Ku/POO8327duD6rt+/Xozbty4gG0jR4402dnZQR9v3759JiYmxlRXVxtjjPn222/N6NGjTadOnYwkU1hYGPRYwfjTn/5U65hTp06t0ziPPvqoeeGFF2psr+1nGE0TKzBc1ssvv6zJkydfsfEOHTqkuLi4oPqWlZVp3Lhx+vOf/6zvvvtOCQkJmjBhgn9/3759dfLkSeXm5gY13pEjR/TJJ58ErHDS0tLUvHlzHT16VG+++aYeffTRgFVNQ/r888914sQJJSYmBtU/KSlJn3zyiY4cOeLf9tBDD+mVV14J+pivvPKKHnroIblcLknSNddcoxEjRujtt9+uW/GX8fTTT+vTTz+VJJ07d05PPfWUduzYoblz52r//v2SpO+//15z5szR4cOHLzteXeeJJsjpBEXjop/977WqqsqEhoaa4uLiiz6msLDQSDJnz541xhhzzz33mAULFpgBAwaY1q1bm2HDhpnS0lJTWVlpWrVqZSSZli1bmqioqMvW88orr5j+/fv726dOnTKhoaHmq6++8m/77W9/axYvXhzU/F5//XUzdOjQgPGaNWtmvv76a/+2hx9+2DzxxBNBjVdeXm6mTZtmOnXqZNq0aWPGjBnj35eenm5uvvlmEx4ebkaPHm18Pp8xxpjq6mrz2GOPmQ4dOpgbbrjB9OzZ0+zfv98YY8yTTz5pZsyY4R/js88+M+3atTOHDx82xhizd+9eExYWFjD/e++916xdu9bfLikpMaGhoaaysjKoOXTv3t18+umnNbafPXu2ziuwzMxM0717d3PixAljjDEbN240N954ozl27Jg5deqUmT9/vomOjjZDhw41//znP40xxpSWlpq0tDTTtWtXM3bsWLN161ZjjDHLli0z/fr18/9crVy50sTGxpoffvjBX991110XsCI3hhXYrwkrMFyS1+vVNddcI7fbXafH/eMf/9CaNWt07NgxnTlzRn/5y1/UokULnTp1SpK0b98+HTx48LLj5OXlqVevXv52q1atdPPNNweskGJiYrRv376g6tq/f7+io6P97YKCAl177bW69dZb/dt69eoV9Aps8uTJ+v7775WXl6djx45pzpw5kqSPP/5Yf/zjH7VhwwYdOXJE3bp1U0pKiqQfr3Ft27ZNBQUFOn78uNavX6927drVWt+AAQM0c+ZMTZ06VT/88IMmT56spUuX6rbbbrvo/Lt06aJmzZrp66+/vmz9p0+fVmFhYcAxf4kJEyaof//+mj17tsrLyzVjxgy9+uqr6tChgyT5V3kul0vXXnut/3G1bZ87d66aN2+upUuXyuv1av78+Vq3bp1CQ0MlSSEhIfJ4PEG/9mh6QpwuAI3b8ePHdf3119f5cY888og/FJKTk5WdnV2v4586dcr/5ndBWFiYKioq/O3rr79ex48fD2q848eP+8PiwvhhYWGXHP9ijhw5ok2bNqm8vFzh4eGSpHvuuUeS9Oabb2r69Om64447JEnPPPOMwsPDVVRUpGbNmqmiokL/+c9/1LdvX8XExATU9/Pne/HixUpMTFTfvn3VpUsXpaWlBey//vrrA04hXtgWzHNyoU99XuOLWbFiheLj4zVo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\n", "image/svg+xml": [ "\r\n", "\r\n", "\r\n", "\r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", "\r\n" ], "text/html": [ "${\\begin{cases}0&{x}<{0}\\\\\\cos\\left(x\\right)&{0}\\leq{x}<{1}\\\\x^x&{x}\\geq{1}\\end{cases}}$" ], "text/latex": [ "${\\begin{cases}0&{x}<{0}\\\\\\cos\\left(x\\right)&{0}\\leq{x}<{1}\\\\x^x&{x}\\geq{1}\\end{cases}}$" ], "text/plain": [ "[(-inf, 0), (0, cos(x)), (1, x**x)]" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from math import cos\n", "\n", "f=Piecewise().append(0,cos).append(1,lambda x:x**x)\n", "f" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "" ], "text/plain": [ "" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f.plot()" ] } ], "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.7.3" }, "latex_envs": { "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 0 } }, "nbformat": 4, "nbformat_minor": 2 }