{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "

DC Motor PD Controller Design Example

\n", "

MCHE474: Control Systems

\n", "

Dr. Joshua Vaughan
\n", "joshua.vaughan@louisiana.edu
\n", "http://www.ucs.louisiana.edu/~jev9637/

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In [a prior in-class exercise](), we found the transfer function of an armature-controlled DC motor to be:\n", " \n", "$ \\quad \\frac{K_1}{s(\\tau_1 s + 1)} $\n", "\n", "where:\n", "\n", "$ \\quad K_1 = \\frac{K_m}{R_a b + K_bK_m} $\n", "\n", "$ \\quad \\tau_1 = \\frac{R_a J}{K_bK_m + R_a b} $\n", "\n", "and $K_m$ is the motor constant, $b$ represents frictional effects, $J$ is the inertia of the load, $R_a$ is the armature resistance, and $K_b$ is the proportionality constant between motor speeds and back emf voltage.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will be looking a the potential use of Proportional-plus-derivative (PD) control for this motor, with the goal of making the shaft output angle match some desired angle. In this case, the block diagram for the control system looks like the one in Figure 1.\n", "\n", "

\n", "\t\"Feedback
\n", " Figure 1: Feedback Control Block Diagram\n", "

\n", "\n", "In this example, the plant transfer function, $G_p$, matches that of the DC motor:\n", "\n", "$ \\quad G_p(s) = \\frac{K_1}{s(\\tau_1 s + 1)} $\n", "\n", "The controller block, $G_c$, is the PD controller:\n", "\n", "$ \\quad G_c(s) = k_p + k_d s $\n", "\n", "We can rewrite the PD controller in the form below, to put the open-loop transfer function into a form suitable for the root locus:\n", "\n", "$ \\quad G_c(s) = k_p (1 + \\frac{k_d}{k_p} s) = k_p (1 + T_d s) $\n", "\n", "where \n", "\n", "$ \\quad T_d = \\frac{k_d}{k_p} $\n", "\n", "So, the open-loop tranfer function, $G_cG_p$, is:\n", "\n", "$ \\quad G_cG_p = \\frac{k_pK_1 ( 1 + T_d s)}{s (\\tau_1 s + 1)} $\n", "\n", "To plot a root locus for gain $k_p$, we will need to specify an initial choice for $T_d$, which will serve to place the zero from the PD controller. Here, that zero can either be to the left or the right of the pole at $-1/\\tau_1$.\n", "\n", "***Note:*** The parameters we're using here for $k_1$ and $\\tau_1$ are not generally representative of a real DC motor, but instead are chosen to make our reasoning about this problem more generalizable." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As usual, we'll being the \"code\" part of the notebook with the usual imports of NumPy, the Control Systems Library, and matplotlib." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "import control\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## PD Zero to the Left of Pole\n", "\n", "We'll first look at the case where the PD controller zero is placed to the left of the plant pole at $-1/\\tau_1$. " ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "k1 = 1.0\n", "tau = 1.0\n", "td = 0.5\n", "\n", "# Now, define the open-loop system\n", "num = [k1 * td, k1]\n", "den = [tau, 1, 0]\n", "\n", "sys = control.tf(num, den)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can start by plotting the poles and zeros of the open-loop transfer function. Most of the code below is just to make the plot easier to read." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nigAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "poles, zeros = control.pzmap.pzmap(sys, Plot=False)\n", "\n", "# Let's plot the pole-zero map with better formatting than the stock command would\n", "\n", "# Set the plot size - 3x2 aspect ratio is best\n", "fig = plt.figure(figsize=(6, 4))\n", "ax = plt.gca()\n", "plt.subplots_adjust(bottom=0.17, left=0.17, top=0.96, right=0.96)\n", "\n", "# Change the axis units to serif\n", "plt.setp(ax.get_ymajorticklabels(), family='serif', fontsize=18)\n", "plt.setp(ax.get_xmajorticklabels(), family='serif', fontsize=18)\n", "\n", "ax.spines['left'].set_color('none')\n", "ax.spines['top'].set_color('none')\n", "ax.spines['bottom'].set_position('zero')\n", "ax.spines['right'].set_position('zero')\n", "\n", "ax.xaxis.set_ticks_position('bottom')\n", "ax.yaxis.set_ticks_position('right')\n", "\n", "# Turn on the plot grid and set appropriate linestyle and color\n", "ax.grid(True,linestyle=':', color='0.75')\n", "ax.set_axisbelow(True)\n", "\n", "# Define the X and Y axis labels\n", "plt.xlabel('$\\sigma$', family='serif', fontsize=22, weight='bold', labelpad=5)\n", "ax.xaxis.set_label_coords(1.08, .54)\n", "\n", "\n", "plt.ylabel('$j\\omega$', family='serif', fontsize=22, weight='bold', rotation=0, labelpad=10)\n", "ax.yaxis.set_label_coords(5/6, 1.05)\n", "\n", "\n", "plt.plot(np.real(poles), np.imag(poles), linestyle='', \n", " marker='x', markersize=10, markeredgewidth=5, \n", " zorder = 10, label=r'Poles')\n", "\n", "plt.plot(np.real(zeros), np.imag(zeros), linestyle='', \n", " marker='o', markersize=10, markeredgewidth=3, markerfacecolor='none', \n", " zorder = 10, label=r'Zeros')\n", "\n", "\n", "# uncomment below and set limits if needed\n", "plt.xlim(-5, 1)\n", "# plt.ylim(0, 10)\n", "\n", "plt.xticks([-5,-4,-3,-2,-1,0, 1],['','','','','','' ,''], bbox=dict(facecolor='black', edgecolor='None', alpha=0.65 ))\n", "plt.yticks([-1.5, -1.0, -0.5, 0, 0.5, 1, 1.5],['','', '', '0', '','',''])\n", "\n", "# Create the legend, then fix the fontsize\n", "# leg = plt.legend(loc='upper right', ncol = 1, fancybox=True)\n", "# ltext = leg.get_texts()\n", "# plt.setp(ltext, family='serif', fontsize=20)\n", "\n", "# Adjust the page layout filling the page using the new tight_layout command\n", "plt.tight_layout(pad=0.5)\n", "\n", "# Uncomment to save the figure as a high-res pdf in the current folder\n", "# It's saved at the original 6x4 size\n", "# plt.savefig('MCHE474_PoleZeroMap.pdf')\n", "\n", "fig.set_size_inches(9, 6) # Resize the figure for better display in the notebook" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we can plot the root locus, using the control System Library's built in `.root_locus()` function. We'll add a few options:\n", "* `kvect=np.linspace(0,50,50001)` : Specify the range of gains to plot the locus over\n", "* `Plot=False` : Don't plot the results (since we want to plot them ourselves to give better control over the styling)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "roots, gains = control.root_locus(sys, kvect = np.linspace(0,50,50001), Plot=False)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Set the plot size - 3x2 aspect ratio is best\n", "fig = plt.figure(figsize=(6, 4))\n", "ax = plt.gca()\n", "plt.subplots_adjust(bottom=0.17, left=0.17, top=0.96, right=0.96)\n", "\n", "# Change the axis units to serif\n", "plt.setp(ax.get_ymajorticklabels(), family='serif', fontsize=18)\n", "plt.setp(ax.get_xmajorticklabels(), family='serif', fontsize=18)\n", "\n", "ax.spines['left'].set_color('none')\n", "ax.spines['top'].set_color('none')\n", "ax.spines['bottom'].set_position('zero')\n", "ax.spines['right'].set_position('zero')\n", "\n", "ax.xaxis.set_ticks_position('bottom')\n", "ax.yaxis.set_ticks_position('right')\n", "\n", "# Turn on the plot grid and set appropriate linestyle and color\n", "ax.grid(True,linestyle=':', color='0.75')\n", "ax.set_axisbelow(True)\n", "\n", "# Define the X and Y axis labels\n", "# Define the X and Y axis labels\n", "plt.xlabel('$\\sigma$', family='serif', fontsize=22, weight='bold', labelpad=5)\n", "ax.xaxis.set_label_coords(1.02, .525)\n", "\n", "\n", "plt.ylabel('$j\\omega$', family='serif', fontsize=22, weight='bold', rotation=0, labelpad=10)\n", "ax.yaxis.set_label_coords(5/6, 1.05)\n", "\n", "plt.plot(np.real(poles), np.imag(poles), linestyle='', \n", " marker='x', markersize=10, markeredgewidth=5, \n", " zorder = 10, label=r'Poles')\n", "\n", "plt.plot(np.real(zeros), np.imag(zeros), linestyle='', \n", " marker='o', markersize=10, markeredgewidth=3, markerfacecolor='none', \n", " zorder = 10, label=r'Zeros')\n", "\n", "plt.plot(roots.real, roots.imag, linewidth=2, linestyle='-', label=r'Data 1')\n", "\n", "\n", "plt.xticks([-5,-4,-3,-2,-1,0, 1],['','','','','','',''], bbox=dict(facecolor='black', edgecolor='None', alpha=0.65 ))\n", "plt.yticks([-1.0, -0.5, 0, 0.5, 1],['','', '0', '',''])\n", "\n", "# uncomment below and set limits if needed\n", "plt.xlim(-5, 1)\n", "# plt.ylim(0, 10)\n", "\n", "# Adjust the page layout filling the page using the new tight_layout command\n", "plt.tight_layout(pad=0.5)\n", "\n", "# Uncomment to save the figure as a high-res pdf in the current folder\n", "# It's saved at the original 6x4 size\n", "plt.savefig('example_rootLocus.pdf')\n", "\n", "fig.set_size_inches(9, 6) # Resize the figure for better display in the notebook" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## PD Zero to the Right of Pole\n", "\n", "Now, let's look at the case where the PD controller zero is placed to the right of the plant pole at $-1/\\tau_1$. " ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "k1 = 1.0\n", "tau = 1.0\n", "td = 2.0\n", "\n", "# Now, define the open-loop system\n", "num = [k1 * td, k1]\n", "den = [tau, 1, 0]\n", "\n", "sys = control.tf(num, den)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can start by plotting the poles and zeros of the open-loop transfer function. Most of the code below is just to make the plot easier to read." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "poles, zeros = control.pzmap.pzmap(sys, Plot=False)\n", "\n", "# Let's plot the pole-zero map with better formatting than the stock command would\n", "\n", "# Set the plot size - 3x2 aspect ratio is best\n", "fig = plt.figure(figsize=(6, 4))\n", "ax = plt.gca()\n", "plt.subplots_adjust(bottom=0.17, left=0.17, top=0.96, right=0.96)\n", "\n", "# Change the axis units to serif\n", "plt.setp(ax.get_ymajorticklabels(), family='serif', fontsize=18)\n", "plt.setp(ax.get_xmajorticklabels(), family='serif', fontsize=18)\n", "\n", "ax.spines['left'].set_color('none')\n", "ax.spines['top'].set_color('none')\n", "ax.spines['bottom'].set_position('zero')\n", "ax.spines['right'].set_position('zero')\n", "\n", "ax.xaxis.set_ticks_position('bottom')\n", "ax.yaxis.set_ticks_position('right')\n", "\n", "# Turn on the plot grid and set appropriate linestyle and color\n", "ax.grid(True,linestyle=':', color='0.75')\n", "ax.set_axisbelow(True)\n", "\n", "# Define the X and Y axis labels\n", "plt.xlabel('$\\sigma$', family='serif', fontsize=22, weight='bold', labelpad=5)\n", "ax.xaxis.set_label_coords(1.08, .54)\n", "\n", "\n", "plt.ylabel('$j\\omega$', family='serif', fontsize=22, weight='bold', rotation=0, labelpad=10)\n", "ax.yaxis.set_label_coords(5/6, 1.05)\n", "\n", "\n", "plt.plot(np.real(poles), np.imag(poles), linestyle='', \n", " marker='x', markersize=10, markeredgewidth=5, \n", " zorder = 10, label=r'Poles')\n", "\n", "plt.plot(np.real(zeros), np.imag(zeros), linestyle='', \n", " marker='o', markersize=10, markeredgewidth=3, markerfacecolor='none', \n", " zorder = 10, label=r'Zeros')\n", "\n", "\n", "# uncomment below and set limits if needed\n", "plt.xlim(-5, 1)\n", "# plt.ylim(0, 10)\n", "\n", "plt.xticks([-5,-4,-3,-2,-1,0, 1],['','','','','','' ,''], bbox=dict(facecolor='black', edgecolor='None', alpha=0.65 ))\n", "plt.yticks([-1.5, -1.0, -0.5, 0, 0.5, 1, 1.5],['','', '', '0', '','',''])\n", "\n", "# Create the legend, then fix the fontsize\n", "# leg = plt.legend(loc='upper right', ncol = 1, fancybox=True)\n", "# ltext = leg.get_texts()\n", "# plt.setp(ltext, family='serif', fontsize=20)\n", "\n", "# Adjust the page layout filling the page using the new tight_layout command\n", "plt.tight_layout(pad=0.5)\n", "\n", "# Uncomment to save the figure as a high-res pdf in the current folder\n", "# It's saved at the original 6x4 size\n", "# plt.savefig('MCHE474_ExtraZero_PoleZeroMap.pdf')\n", "\n", "fig.set_size_inches(9, 6) # Resize the figure for better display in the notebook" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we can plot the root locus, using the control System Library's built in `.root_locus()` function. We'll add a few options:\n", "* `kvect=np.linspace(0,50,50001)` : Specify the range of gains to plot the locus over\n", "* `Plot=False` : Don't plot the results (since we want to plot them ourselves to give better control over the styling)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "roots, gains = control.root_locus(sys, kvect = np.linspace(0,50,50001), Plot=False)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nXa95oCSa6KGJJrrooYmm0WhU9RQwbcV7gKQFYavl/kwjEtFED0000UUPTTTV6/Wqp4Bpi94DcFMJ\nAAAo8NoZSVo3lVy6jBk6aKKHJprooocmmjhlrCeEsOQ9RtKCsNlses0DJdFED0000UUPTTRxqESS\n+zua2DIGAAAFtowlaW0Zc++kHprooYkmuuihiSbuMtYTQljwHiNpQTgcDr3mgZJooocmmuiihyaa\nuLpOkvtb3NkyBgAABbaMJWltGQ8GA695oCSa6KGJJrrooYmmyWRS9RSwQwjhqPcYPEO4x9FED000\n0UUPTTTxDKGkE94DJG0ZxxhzjqNriTHyigAxNNFEFz000cSWsZ4QQtbpdFxX6knfiePx2GseKIkm\nemiiiS56aKKJQyWS3O95TFoQ9nru70VEIprooYkmuuihiSZuKpG07D1A0oKw3XY/9YxENNFDE010\n0UMTTY1Go+opYNq89wBJC8Isy7zmgZJooocmmuiihyaaeK5TkvsJrKTq3W7Xax4oiSZ6aKKJLnpo\nomk0GlU9BUxb8R4gaUHYark/04hENNFDE0100UMTTfV6veopYNqi9wDcVAIAAAq8dkaS1k0l/X7f\nax4oiSZ6aKKJLnpooolTxnpCCEveYyQtCJvNptc8UBJN9NBEE1300EQTh0okub+jiS1jAABQYMtY\nktaWMfdO6qGJHppooosemmjiLmM9IYQF7zGSFoTD4dBrHiiJJnpoookuemiiiavrJLm/xZ0tYwAA\nUGDLWJLWlvFgMPCaB0qiiR6aaKKLHppomkwmVU8BO4QQjnqPwTOEexxN9NBEE1300EQTzxBKOuE9\nQNKWcYwx5zi6lhgjrwgQQxNNdNFDE01sGesJIWSdTsd1pZ70nTgej73mgZJooocmmuiihyaaOFQi\nyf2ex6QFYa/n/l5EJKKJHppooosemmjiphJJy94DJC0I2233U89IRBM9NNFEFz000dRoNKqeAqbN\new+QtCDMssxrHiiJJnpoookuemiiiec6JbmfwEqq3u12veaBkmiihyaa6KKHJppGo1HVU8C0Fe8B\nkhaErZb7M41IRBM9NNFEFz000VSv16ueAqYteg/ATSUAAKDAa2ckad1U0u/3veaBkmiihyaa6KKH\nJpo4ZawnhLDkPUbSgrDZbHrNAyXRRA9NNNFFD000cahEkvs7mtgyBgAABbaMJWltGXPvpB6a6KGJ\n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\n85k/NDOzPEb78Zd/3fWf60/rvTdF+y+N1674+78xV7Pv33G7zc3N2WQysWeeecaazabdd999l/3z\n+/73v2+bm5t2//332y233CLZb69+/oUXXnjp2WeffcuVGl1aDOZ5/sC2X9tnZufM7FCe56/7cGfS\ngvBfPfTe/Mtf/vI1fz38feYznzGaaKGJJrpU66b/+yO789jv2E3/8NIVv2Yv/ITwg498217eeNXM\nzP742L+09tvvsOf/5kXbHP7khyV/e25kv/VnFx/3elP9JvvjD7vfOlbej5612m/9B6u9dOWfYm7v\ncvr0aTt06JAdPHjQVldXL/u6/fv325kzZ+zcuXO7/gQR5dVqtdU8zw9f4feOmNmTZnZnnufnd/ze\nOTN7OM/zU683RtKW8T/2XraDdx9K+Qic0UQPTTTRpTqvrp+xF//9cYtXWQya/eSUq/Ki8Jd+/q22\n0n3OzMy++udn7JGPH7C7f+Gtxe/neW5/+LW14u/fe99d1jr4M9d9ntfi1fUz9uKnPm3xKotBs8u7\nXOnZQTOzl1662JfF4Bvvnnvu+WdX+e2TZvbEzsXgln1mduZaxkg6VDI3p/0+pVlEEz000USXarz2\n0rmpV5hczaXFh+oNGf/uF1vFX3/nmRfsC19bsx/+3Xl7dRLth3933r7wtbXLThk/+O6frWKar6ts\nlzfFi7uKV3pWkMWgj83NzQtX+e2DZva1nb+49ZNDM7Nrupg66U/IT3/60ylfjuuAJnpoooku1bjp\nzXda8xOfmPr1ubfdbd+b/5VdT7k2P/EJ2VPG9//snfbL73p78fffeeYF+7XH/tLe9/tP2q899peX\nLQY/8q63S75yxuzqXX5jrnbVLg8++KCdOXP5D53Onz9v58+ft4ceeshtzrNsMBj8/m6/XqvVLv3I\ndrdnBI+b2Z9e4SeHU5IWhB/+8IdTvhzXAU300EQTXapz++cW7E0Lny3+/tIzaYf+03+cevXJmxY+\nK39TyRc+0raPbFsU7ubSTSXKrtTlh3fuu2qX48ePm5ld9hLqp59++rLfwxvrqaee+ie7/Xqe57tu\nB28tFI/YxUXhNUlaEA6Hw5Qvx3VAEz000USXal1afGw/oDAcDu2W/fcWi4+9sBg0M7v5pjn77Y++\n0x775HvsQ/ffY3fcdovN1czuuO0W+9D999hjn3yP/fZH3yl/bZ3Z7l1ijFftcuTIEXvwwQftU5/6\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Set the plot size - 3x2 aspect ratio is best\n", "fig = plt.figure(figsize=(6, 4))\n", "ax = plt.gca()\n", "plt.subplots_adjust(bottom=0.17, left=0.17, top=0.96, right=0.96)\n", "\n", "# Change the axis units to serif\n", "plt.setp(ax.get_ymajorticklabels(), family='serif', fontsize=18)\n", "plt.setp(ax.get_xmajorticklabels(), family='serif', fontsize=18)\n", "\n", "ax.spines['left'].set_color('none')\n", "ax.spines['top'].set_color('none')\n", "ax.spines['bottom'].set_position('zero')\n", "ax.spines['right'].set_position('zero')\n", "\n", "ax.xaxis.set_ticks_position('bottom')\n", "ax.yaxis.set_ticks_position('right')\n", "\n", "# Turn on the plot grid and set appropriate linestyle and color\n", "ax.grid(True,linestyle=':', color='0.75')\n", "ax.set_axisbelow(True)\n", "\n", "# Define the X and Y axis labels\n", "# Define the X and Y axis labels\n", "plt.xlabel('$\\sigma$', family='serif', fontsize=22, weight='bold', labelpad=5)\n", "ax.xaxis.set_label_coords(1.02, .525)\n", "\n", "\n", "plt.ylabel('$j\\omega$', family='serif', fontsize=22, weight='bold', rotation=0, labelpad=10)\n", "ax.yaxis.set_label_coords(5/6, 1.05)\n", "\n", "plt.plot(np.real(poles), np.imag(poles), linestyle='', \n", " marker='x', markersize=10, markeredgewidth=5, \n", " zorder = 10, label=r'Poles')\n", "\n", "plt.plot(np.real(zeros), np.imag(zeros), linestyle='', \n", " marker='o', markersize=10, markeredgewidth=3, markerfacecolor='none', \n", " zorder = 10, label=r'Zeros')\n", "\n", "plt.plot(roots.real, roots.imag, linewidth=2, linestyle='-', label=r'Data 1')\n", "\n", "\n", "plt.xticks([-5,-4,-3,-2,-1,0, 1],['','','','','','',''], bbox=dict(facecolor='black', edgecolor='None', alpha=0.65 ))\n", "plt.yticks([-1.0, -0.5, 0, 0.5, 1],['','', '0', '',''])\n", "\n", "# uncomment below and set limits if needed\n", "plt.xlim(-5, 1)\n", "# plt.ylim(0, 10)\n", "\n", "# Adjust the page layout filling the page using the new tight_layout command\n", "plt.tight_layout(pad=0.5)\n", "\n", "# Uncomment to save the figure as a high-res pdf in the current folder\n", "# It's saved at the original 6x4 size\n", "# plt.savefig('example_rootLocus.pdf')\n", "\n", "fig.set_size_inches(9, 6) # Resize the figure for better display in the notebook" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Licenses\n", "Code is licensed under a 3-clause BSD style license. See the licenses/LICENSE.md file.\n", "\n", "Other content is provided under a [Creative Commons Attribution-NonCommercial 4.0 International License](http://creativecommons.org/licenses/by-nc/4.0/), CC-BY-NC 4.0." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# This cell will just improve the styling of the notebook\n", "from IPython.core.display import HTML\n", "import urllib.request\n", "response = urllib.request.urlopen(\"https://cl.ly/1B1y452Z1d35\")\n", "HTML(response.read().decode(\"utf-8\"))" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.2" } }, "nbformat": 4, "nbformat_minor": 2 }