alchemyst/Skogestad-Python

View on GitHub
reproductions/Exercise/Exercise_06_10.ipynb

Summary

Maintainability
Test Coverage
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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xNDzPERMWYwGegRvuukmsrKyHJ3UcXFxbN++nYsXL/LAAw+wfft2rwTaHPHx8eTn5/s6DGlFjj/ZhyhOc+BfXmX42DRfhyPiE65+OxuseZSWlta6uunmm2+mW7dudOvWjYsXL3ouShF/pIqHiKkG+zxKSkpqTb/00kuO17oEVto+3WEuYqbB5DF69GheffXVevN///vfq6NaROQa1WCz1X//93/zr//6r7z55puMGDECgL1793L16lXH3eAibZWu1BUx12DyiIqKYteuXezYsYODBw8CcOeddzJu3LgWD05ERPxTg8nDMAwsFgvjxo1zmjCq1xFpc1T1EDHVqOFJXnzxRb7++uta80tLS9mxYwfp6emOm/lE2hwlDxFTDdY8cnJyeP3115k2bRqHDx+mS5cuXL58mcrKSiZMmMDixYuJi4vzRqwiIuInGkwe7du3Z+HChSxcuJCysjJOnjxJaGgoXbp08UZ8Ij5lGLpUV8SMW8/zCAoKIjo6mi5duvDhhx86hiwREZFrS4M1j5oKCgp48803+eMf/0ivXr0cD3ESEZFrS4PJ45///CdZWVm89dZbREZGkpqayq5duzQMulwT9DAoEXMNJo8BAwZw5513snXrVnr16uWNmERExM812Ofxpz/9iQ4dOnDLLbcwd+5ccnNzm/QMc5HWyKKxrURMNZg8Jk+ezNtvv82hQ4dITEzkd7/7HVarlTlz5pCTk+ONGEVExM80+mqrjh07Mn36dP7yl79w8OBBEhISePbZZ1syNhGfU5+HiLkG+zzq3lle7Y477uCOO+5wLO/SpQudO3f2bHQiPmJQNdyORclDxFSDySM9Pd3pMovF4hjXaubMmcyYMcOjwYn4mlKHiLkGk8f777/vjThE/JIqHiLmmtxsVZearURErh3NaraqpmYrabt0qa6IGTVbiYiI29waGLE5jh49ytixYxk4cCCDBw/mhRdeAOD06dMkJSURGxtLUlISJSUlQNUlkosWLcJmszFs2DD27dvn2FdmZiaxsbHExsbqWSLSIqqvttKouiLmvJY8AgMD+a//+i8+/fRTdu/ezapVqzh06BArVqxg/Pjx2O12xo8fz4oVKwDYsmULdrsdu91ORkYGCxYsAKqSzbJly9izZw95eXksW7bMkXBEPKU6eVCp5CFixmvJIzo6mhEjRgDQqVMnBg4cSFFREdnZ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X4clInLNaJXNVoGBgbz00kskJydTUVHBrFmzGDx4sK/DEhG5ZrTK5AEwceJEJk40vy5fRERaVqtsthIREd9S8hAREbcpeYiIiNuUPERExG2tcmwrd1133XX07t3bMX327FnCw8NNp6tf15x34sQJIiMbN/5RXXWP5c46ZvMbE7uz180pR2PK4mq5P5WlOe9JQ3E3tlyt8fPVUFla+vPlybK0ps+XL8ty5MgRTp48ab7QuAbNnTvX6XT165rzRo4c6bFjubOO2fzGxO7sdXPK4SrOxiz3p7I05z0xW+bOdGv+fNWdrluWlv58uVqnLX++zOZ583vvTMCTTz75ZJNSUivXv39/p9PVr6v/z8jIcAx14oljubOO2fzGxG72urnlcBVnY5b7U1ma856YLXNnujV/vupO1yyLNz5frtZpy58vs3ne/N6buSaarZqrqUO6+5u2Ug5QWfxRWykHqCyNcc3WPNw1cuRIX4fgEW2lHKCy+KO2Ug5QWRqimoeIiLhNl+qKiIjblDxERMRtSh4iIuI2JY9m+PTTT5k/fz6pqam8/PLLvg6nWTZt2sTcuXOZNGkSubm5vg6nWb766itmz55Namqqr0Nx28WLF0lPT2fu3LmsX7/e1+E0S2t+H+pqS98Pj/1utcjdI63AAw88YERGRhqDBw+uNX/Lli3G9ddfb/Tr189Yvnx5o/ZVUVFhzJo1qyXCbBRPluX06dNtpiz33ntvS4ToNnfKtG7dOuPdd981DMMw0tLSvB5rQ5ry/vjL+1BXU8ri6++HM00pS3N/t67Z5PG3v/3N2Lt3b62TXV5ebvTt29f48ssvjatXrxrDhg0zDh48aHzyySfGnXfeWevfsWPHDMMwjOzsbOPGG2801q9f76uieKwshmEYDz74oLF3715fFMMwDM+WxV9+tNwp09NPP23s37/fMAzDmDZtmq9CdsqdslTzl/ehrqaUxdffD2fcLYsnfreu2eRhGIZx+PDhWid7165dxoQJExzTTz/9tPH00083al8TJ070eHzuaG5ZKisrjV/+8pfGe++916JxNoan3hd/+tFqbJnWrVtn/PnPfzYMwzCmTJni9Tgbw933x5/eh7oaWxZ/+n4405TvTXN+t9TnUUNRURExMTGOaavVSlFRkdP1d+7cyaJFi/jxj3/sd081dLcsL774Itu2bWPjxo288sor3gix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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# -*- coding: utf-8 -*-\n",
    "\"\"\"\n",
    "Created on Tue May 26 21:05:19 2015\n",
    "\n",
    "@author: cronjej\n",
    "\"\"\"\n",
    "\n",
    "from robustcontrol import utils\n",
    "from robustcontrol import utilsplot\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import matplotlib as mpl\n",
    "\n",
    "mpl.rcParams['figure.facecolor'] = 'white'\n",
    "\n",
    "\n",
    "s = utils.tf([1, 0], 1)\n",
    "A = np.asarray([[-10, 0], [0, -1]])\n",
    "B = np.eye(A.shape[0])\n",
    "C = np.asarray([[10., 1.1], [10., 0]])\n",
    "D = np.asarray([[0., 0.], [0., 1.]])\n",
    "\n",
    "G = utils.mimotf(C*utils.mimotf(s*np.eye(2) - A).inverse()*B + D)\n",
    "\n",
    "# a) Controllability analysis\n",
    "\n",
    "G_poles = G.poles()\n",
    "G_rhp_poles = utils.RHPonly(G_poles)\n",
    "# G has stable poles, -10 with multiplicity of 2 and -1\n",
    "G_zeros = G.zeros()\n",
    "G_rhp_zeros = utils.RHPonly(G_zeros)\n",
    "# G has a LHP zero @ -10 and a RHP zero @ 0.1\n",
    "# Zero at 0.1 limits bandwidth to wB* < 0.05\n",
    "\n",
    "pairing1 = np.asmatrix(np.eye(2))\n",
    "pairing2 = np.asmatrix(pairing1[[1, 0]])\n",
    "\n",
    "utilsplot.rga_nm_plot(G, pairing_list=[pairing1, pairing2], \n",
    "                      pairing_names=['Diagonal pairing', 'Off diagonal pairing'],\n",
    "                        w_start=-3, w_end=3, points=1000, plot_type='all')\n",
    "\n",
    "# RGA Number of Off-diagonal pairing exhibits the lowest RGA Number for w < wB*\n",
    "\n",
    "# b) Disturbance rejection and input saturation\n",
    "\n",
    "w = np.logspace(-3, 3, 1000)\n",
    "dim = G(0).shape[0]\n",
    "Sv_G = np.zeros((len(w), dim))\n",
    "Sv_G_min = np.zeros((len(w), 1))\n",
    "Sv_G_max = np.zeros((len(w), 1))\n",
    "wB_index = 0\n",
    "for i in range(len(w)):\n",
    "    _, Sv_G[i, :], _ = np.linalg.svd(G(1j*w[i]))\n",
    "    Sv_G_min[i] = np.min(Sv_G[i, :])\n",
    "    if w[i] > 0.05 and wB_index == 0:\n",
    "        wB_index = i\n",
    "        \n",
    "figure = plt.figure()\n",
    "plt.loglog(w, Sv_G_min, label='$\\sigma_{min}(G)$')\n",
    "plt.axhline(w[wB_index], linestyle='--')\n",
    "plt.legend()\n",
    "plt.xlabel('Frequency  [rad/s]')\n",
    "plt.ylabel('Magnitude')\n",
    "\n",
    "plt.show()\n",
    "\n",
    "# Note that minimum singular value of G(iw) where w < wB* is located at steady state (w=0)\n",
    "\n",
    "u, _, _ = np.linalg.svd(G(0))\n",
    "\n",
    "# Most difficult output direction\n",
    "u_min = u[:, 1]\n",
    "\n",
    "# Unsure of how to form gd with given information, cannot determine gd = y/d\n",
    "\n",
    "# TODO Complete section b\n",
    "\n",
    "# c) Decentralized control\n",
    "\n",
    "# As mentioned in a), the off-diagonal pairing exhibits the lowest RGA number\n",
    "# over the bandwidth frequency (see figure 1)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "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.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}