{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook describes the details of forming the coefficient matrix and ordinate vector from walking data for a linear least squares solution to the optimal gains from a simple full state feedback controller employed by the human while walking." ] }, { "cell_type": "code", "collapsed": false, "input": [ "!pip freeze" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Cython==0.19.1\r\n", "-e git+git@github.com:moorepants/DynamicistToolKit.git@ebf12eff9fd852b743a84eaee939c23e89a83c82#egg=DynamicistToolKit-dev\r\n", "Jinja2==2.7.1\r\n", "MarkupSafe==0.18\r\n", "Pygments==1.6\r\n", "Sphinx==1.2b1\r\n", "argparse==1.2.1\r\n", "coverage==3.6\r\n", "docutils==0.11\r\n", "ipython==1.0.0\r\n", "matplotlib==1.3.0\r\n", "nose==1.3.0\r\n", "numpy==1.7.1\r\n", "numpydoc==0.4\r\n", "pandas==0.12.0\r\n", "pyparsing==2.0.1\r\n", "python-dateutil==2.1\r\n", "pytz==2013d\r\n", "pyzmq==13.1.0\r\n", "scipy==0.12.0\r\n", "six==1.4.1\r\n", "sympy==0.7.3\r\n", "tornado==3.1\r\n", "wsgiref==0.1.2\r\n" ] } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "from sympy import init_printing\n", "init_printing()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "from sympy import symbols, Matrix, Symbol, zeros, eye" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "n = 3 # number of time samples in each cycle (step)\n", "m = 2 # number of cycles (steps)\n", "p = 2 # number of sensors\n", "q = 2 # number of controls" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "First form the equation that generates the controls given the error in the sensors at a single time step during a single foot step.\n", "\n", "$$m_m(t) = m(t)_0 + K(t) s_e(t) = m(t)_0 + K(t) (s_0(t) - s_m(t))$$\n", "\n", "Now rearrange the equations such that we have one linear in both the gains, $K(t)$, and in $m^*(t)$:\n", "\n", "$$m_m(t) = m(t)_0 + K(t) s_0(t) - K(t) s_m(t) = m^*(t) - K(t) s_m(t)$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The \"measured\" controls, $m_m(t)$:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "mm = Matrix(q, 1, lambda i, j: Symbol('m_m_q={}'.format(i)))\n", "mm" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left[\\begin{smallmatrix}{}m_{m q=0}\\\\m_{m q=1}\\end{smallmatrix}\\right]$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAEYAAAAZBAMAAAB+2EWVAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAu90iZpkydkTvqxCJ\nVM1ghewcAAABHElEQVQoFWMQUjJgYAlJL2UvTGDABjiUdBgUgBIs/Q6cq9kXoCvhPnIaJGQFVmNd\nxMDfwHoAXQ3jho0INQzLGTIZmC6gq+Fn4NwAFIOYwzCNoZDBno3B9Ypr7zEGBvcag1OrVq26YMnA\nlABXw/wBaJIjD8P1B5wX7jDwBnBCTERRw7GA4TGD1WkGroRNDGcZ+BISIWpQ7YKIMTAxXGVQuMC0\n4TgD2C5UN0PV7GKoYFhuwHFEDcLnDjkMYkDdDFUDoybAGGAaqxrWv4TVoKjAZReqIohd+OIUZg6O\nOGXgAkUF/jjlOGmAUIMjThmYkNVgj1MUNTjiFEUNjjhFUQMLD7Q4xaoGLU7Z6mOR/AUzCEqTE6dK\nwPyFD3AoaQEAe8NjjECjxxQAAAAASUVORK5CYII=\n", "prompt_number": 5, "text": [ "\u23a1m_m_q=0\u23a4\n", "\u23a2 \u23a5\n", "\u23a3m_m_q=1\u23a6" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The unknown gains, $K(t)$:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "K = Matrix(q, p, lambda i, j: Symbol('k_q={},p={}'.format(i, j)))\n", "K" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left[\\begin{smallmatrix}{}k_{q=0,p=0} & k_{q=0,p=1}\\\\k_{q=1,p=0} & k_{q=1,p=1}\\end{smallmatrix}\\right]$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAJoAAAAmBAMAAADO2Z8qAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEO+Zu3ZEIondMqvN\nZlSyKd/8AAACQUlEQVRIDe2UP2gTURzHvxfT5PKapKE66NRLRXQshS6CbYR2cZAiKRSlWJdat+Ag\ndDK2SAdJaaF/wOkodhAcdHAKiJsgCAUR4iIHorOhu3jv/X53757EvGAjOPSGy+/P933yfu8lXwyP\nnkd/nvHRMob7g1IUpg1csjNv1K2aaG+7ViVyi1YN05y2VYmRklXDtMymVYl7dgnT3LGDlzbxmrhl\nkzAt/+WOntVpPDKWnW2pGT98T8zKtVj3SkVMG7oc14F06UwiA646FZkf+fLND9eidPmiipi2Xw2i\nBjCElHHgP1AOm+LCdS0B1XRhT4VMqwrPx6f52pNmsxncR84HChOtwA3TN1kPT0PtQGVfoDC3nqx9\nXNiAWgKDNiM268WxFH0X0YrzDl0009Kzz118hac0XPtWP0dLTNo7vPbz/jNq8aTXxFvKaap8bfAm\n3otKspb2X1Bq0mQtV3pM25a3IADPPVRTRbcgNVvurK75SKHRaVKpzDTk8YSPc2UdD0vZnQVKcbpV\n4wjLn30Kw1q2jZW5Q0oPjgIZ8C1QzaMP+S6iUNeZjvhoVSFASzdUlKSd+qmbRaxUdKajqUDHQXZb\nJypK0n5r/UX6T2gnbpm8if/CLTFoGBI6uSXIHuO9/9ktM6vxP0mpO7kl22NE6+KWyJm0Tm7JphHR\nTA8x3JJoXd0StLwXtyRaV7dkWi9uyZN2dUvaWy9uKWk2t5S03txS3J60umVojyduGf8GjxuUMTI9\nc1wIr69Ot5FZutsn2oOlxV/mf9/t7EoKewAAAABJRU5ErkJggg==\n", "prompt_number": 6, "text": [ "\u23a1k_q=0,p=0 k_q=0,p=1\u23a4\n", "\u23a2 \u23a5\n", "\u23a3k_q=1,p=0 k_q=1,p=1\u23a6" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The unknown nominal controls, $m^*(t)$:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "ms = Matrix(q, 1, lambda i, j: Symbol('m^*_q={}'.format(i)))\n", "ms" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left[\\begin{smallmatrix}{}m^{*}_{q=0}\\\\m^{*}_{q=1}\\end{smallmatrix}\\right]$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAADwAAAAnBAMAAAChwzYZAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEO+Zu3ZEImYyq92J\nVM0hoUD5AAABRElEQVQ4EWNgQAYcAsg8EFtISRkuxHs0C84GMoyUFBmEkAVuL0fmMTCgSrOl1qCa\njirNwIaqGaa7uTPUINQTTQ7Ihepu+8GgJRCFS5pddAPDNwYbXNIMXAGcCgx7EdKMJw6COVDDmSaw\nOrB/mACXZxEQQZauB+rncDgAl+ZnYAL7EKo7i4GvgH2NAENrTMGpVatWXShi4AYbhepvXgMmiAHY\npfkmTIFIoxkOtZRb4CgD2HA0p0Gl2U7shLAYLY6DGah2MzAoQBVCKTRp5r94pVEl4VGCLgzjoxkO\nE4bRaNLoSRFVGi0pYthNXlKEpTUcSZG6aY2BC5IdoB5DT2tshwrAIQOVRk9rDNwo0uhpDU0aGsbw\ntIZdGp7WsEvD0xp2aXha44y3RXY5LH4x05q8iytckgE1rYW4fGRgS0tHSKOyytISAPZgUwRC8z7J\nAAAAAElFTkSuQmCC\n", "prompt_number": 7, "text": [ "\u23a1m^*_q=0\u23a4\n", "\u23a2 \u23a5\n", "\u23a3m^*_q=1\u23a6" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The measured sensors, $s_m(t)$:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "sm = Matrix(p, 1, lambda i, j: Symbol('s_m_p={}'.format(i)))\n", "sm" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left[\\begin{smallmatrix}{}s_{m p=0}\\\\s_{m p=1}\\end{smallmatrix}\\right]$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAEAAAAAZBAMAAABzxjXSAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAu90iiXZUmUQyEKtm\nze+zsTonAAABBUlEQVQoFWMQUjJgYGAJTWDABjiUVBgUQBIVnALo8lw+XiAha4gCwawF6AoYFyxE\nUjD7/wR0BfwMfCBNEBPYDLgDeMrOVKRMYDge48bgvXv37gQ7BiaQJogCpgnsE9hiGZ6xOTCkOiyC\nmIWigCcmgoFhJ5cCSwID44S5EAUoVoCFFNgKmNgY+Bh8IFagOhKogmsDawN3MINR6AGICVw1ziAG\n1JsQMRB5BMEEs9AVMCsSUIAmjcUKdBVQK3BFFtwELJHFwL0AZBrUBCyRxeEHTAZwBVgii4EJSQG2\nyEJRgC2yUBRgiywUBSDXMKBFFoYC9MjijC8DaUOPC3IiSwmUL3ABDiVtAAJzSZ85FRodAAAAAElF\nTkSuQmCC\n", "prompt_number": 8, "text": [ "\u23a1s_m_p=0\u23a4\n", "\u23a2 \u23a5\n", "\u23a3s_m_p=1\u23a6" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "And the equation:\n", "\n", "$$0 = m^*(t) - K(t) s_m(t) - m_m(t)$$" ] }, { "cell_type": "code", "collapsed": false, "input": [ "zero = ms - K * sm - mm\n", "zero" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left[\\begin{smallmatrix}{}- k_{q=0,p=0} s_{m p=0} - k_{q=0,p=1} s_{m p=1} + m^{*}_{q=0} - m_{m q=0}\\\\- k_{q=1,p=0} s_{m p=0} - k_{q=1,p=1} s_{m p=1} + m^{*}_{q=1} - m_{m q=1}\\end{smallmatrix}\\right]$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAAnBAMAAAD9bCIUAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEO+Zu3ZEIlSJ3TKr\nzWZMkIqIAAAFBklEQVRYCd1YXWgcVRQ++z87s9msVR8sQrcVsVIfgmCpFOoWUij0Jehuav2J60ts\nRXD1wYciZMRWyYtslNKCElbQKtSHIZgXUdg+BBQjlr70QSKRNGIslISCCIJ6z7135p47M7uzs1vN\n6n3YOfec75453z33hvkCMGzjp9gF7dhzn7fm8aZn9mFkHuxjUWDJ7GQ74OvieHjPbthB4madTOKb\nF+MvESuyZKHxWYPMejB1CrtKPSzpCElsdQxFBNIkPn18jsx6MHUKL/awojMk2+oc6x6hFKDeHRuI\n6hTes54JIDTHuSe1qT7Jjy22dY9vlq/ZPo+cIoXiocUnMlUnDLB2ozZWOxYWQZ9O4ce3yFG6Z0M7\nVon5OUjVPw8kUrCRX55XRwnh2rgMsN+qaC6cFPAlnMLLq8nLmTb6/OPnP+GhUnBz5Zt1CrfoJhxO\nVGiudOkuSB+9g7q4rWCjB0kQ4XScegBg/A1tUzCcfbfBfpHCK0/BaD3VRKdv5O5uwW/wqM8LIN8s\nKZwZZ6Nk3X+U4DZZi8gYhWTJ+v4P4hEmgxm4+jAsVG0VRbiaMesTgC//cjQXTswGfLdydWVlFZZg\nAUzbA2AbZeLChFWGT72Ia8gCtS5kKgsWFGvn88vLy1/nynCJgdemLsAHbG6/CqbzNnvP2jtrJ9+H\n4iMbNoVh2qpVdmD9RMODswPuwpCC0ShMFA/c3D/rqKxIQXQB9kEVZixMxAdpY9LJVHKbjlzrK1C/\nC+mJL/LwJpR5CknhbHOnSIkULsFBOHslac+CcSLRojC0j1itpjGW5G5AOCgYUjCdlGM8C3uNJnhZ\nFYXcJtuf63mxmv2SNs4A415pyrW+AnUKI43C0/CDe+dEn9LOVyIrplxfr0PB2QkXAI5ZV4Rfnbdr\nsOSMOPLCywo8GKNQnJoE+DbRytvgZVUUsm24Bq/P4SkgbeTveAlGGrlvSnKtr0CdAsd/mJ/gJ4Tf\nFgeSMC8OkttYk/WpZUM5v6pgggz+mqVzCs5OhQfDu4CjZYyZhsqqKIgweKdAtNH18qdYqxXI/Npd\n4LhTv8o7d+dGI7cFp2ur3A2JQ+e5cS9MwlIj9/GUcAODSQsf2Xm8QGwgfKakYIu3bO5uZ+qF4yqr\n9dwB5k5hSA53k8lBkpGEWEsLxEiQAtshNWzYUBNqFZt0Ru2ymhjQCdYhKy5lm8wPktt1lc61aIHM\nF0LhMdvFAti5j9SEWqcrdEbs1O9qYkAHWKesuNTdZLfrKp1r0QKZL4SCi9yup2+TI8sYQgq+Tf4v\nUois2QcYwi74Koyc/u8oDIN2hrjyX++CWY9sWzfAxW7BbrEsCcaU//4/qkTwkKS9mrdHOw8o/4dB\nOw8o/4dCO9cDXe9bOwNTu2TE1M5CFJP1LNtt1s6yQP06a9oZ1S4Z+NkVQzsLUazW/wPaWRYoKZxB\n9evTzu4XviwDP35jaGchBBQFzBZLO2Mbu2tnWaDWBU07c8Hev3YWFAbQzqSN4dpZFqh/qWraWSI8\nlRtTOwsKnsSOr51JG8O1cygFXTuLPnkqN6Z2lhX0r50JhQ7aOewg8ZPrSVNE9K+dsYKBtDOh4N6o\nFtfdWoEspN0FDnVVEzC1O4B2RlE8kHYOUvBrZynHgxSGRTsHKbjN8Mm6EApUNW2jdhb/23DLpk9a\nIPOHUKDo7bB9mxxZwm7YNX4kEvWvAnybHPHu6vgWZKdfiEANdfi16frfUBYqZFvKGnkAAAAASUVO\nRK5CYII=\n", "prompt_number": 9, "text": [ "\u23a1-k_q=0,p=0\u22c5s_m_p=0 - k_q=0,p=1\u22c5s_m_p=1 + m^*_q=0 - m_m_q=0\u23a4\n", "\u23a2 \u23a5\n", "\u23a3-k_q=1,p=0\u22c5s_m_p=0 - k_q=1,p=1\u22c5s_m_p=1 + m^*_q=1 - m_m_q=1\u23a6" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now for a simple linear least squares the equations can be massage into this form:\n", "\n", "$$Ax=b$$\n", "\n", "which gives and over determined system of linear equations.\n", "\n", "We define $x$ as:\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "x = K.reshape(q * p, 1).col_join(ms)\n", "x" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left[\\begin{smallmatrix}{}k_{q=0,p=0}\\\\k_{q=0,p=1}\\\\k_{q=1,p=0}\\\\k_{q=1,p=1}\\\\m^{*}_{q=0}\\\\m^{*}_{q=1}\\end{smallmatrix}\\right]$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAFgAAABsCAMAAADZoIW9AAAANlBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHL6OuAAAAEXRSTlMAMquZdlQQ\nQN0iRO+JzWa7fNDgyowAAAOnSURBVGgF7ZrpeqwgDIajonVhsN7/zZ6AiiQsCsPTsw0/WtbXgPjF\n4AC4SSzSLVbMj3NFmIMatsEpVczOYz1Ys5nUGqLsoBF7tvQK484DaLZOYOoN6KX6Obwcg1QysUxX\ns9K0dtPg5jJu65zCVY25dYBhJTWkwJoVAzeLWHfTyShdwJ6wxE1mzRwsVmgW0EbjhOQEst1TD9OC\nleMxHdUJJdGASLMezixeBTQj4DPSd2gfdrCJgHshYSD7hzTjIA5+TQCtQLteDTR0RclcV2x+2Yvq\nDGn2wbbvOIAU7lztzTOrgZORKth8ELjFFjxLdS7oUTd0ChcdJv1oTqMQyHXT0XxWRcHYgSzxOQBX\nH7PqVqkS4G4L7zusnUa6/NdVbS4Btn2KMj8HriX0vsWVhN4Dh5Utf5k9cC2h98AVhN5MzwMXCz1q\njKupHrhY6Ge54ANvEweXCz2KdQpcLPRoahJcLPR34HKhv7HYLn620D8FZwt9I7bO0Vm+K6zFmPkI\nvbsa5fnUGpdTcaQH/ngQu57/kgdhLsLO8chcoYKp0Lti6B2fEvcgzEVwMAsVJtQNNwZJeBAmXxx8\n834c9yAIulxEzVCBgKuGCq7FUDNUOMHVQ4XDRXxCBb5t78qeHt8NeNrugf8Kof/avq4J1goVvlE7\nXBGC/0jomR/wdkWx0DM/wMHlQn9q1LEPOLhY6JF3+QEscHA8VCAjfaEnzQFwIlQgJvlCT5p9i/Fa\ne/JDhXNkROjP5mM8X4qTC36ocCP0PxkqDMJ5YbEmw3tnQhOerTVkn1zkt3I9niMSEXqL5gyO3jyn\nT1E2C6yC9yJ83QxwL8X8/Iw9Awz92LonEmFLz9oM8DyLKXVIfyL3/ymw6lQjRAdCoDLolPPpJQme\nNzzKXfAMqeD7RQI8DUIflm9oZ3d7qmtm5P5JgPWZOj49+nBhdA4inNEsnnFaErKpey24tOhS8JDb\nfGcgA3WBxTOkPWUx8nar1aq/M/iJxTOkQwpsHgftUqbWbLPklxFCxUIKzPqmv4ywzjngmy8jjJxh\nse8FS28es8H3guzTB+mfYTGOixyYEeJRyALHvODb4BAgVpdlcQwSqv8zwB+fd9ybj8/7HT4v9GCc\ndckH5M7nsZjxZJr/KfCtz2Mx42Mw93lk4F6Iv7KnLOYg7kyxvQrYc6YPwM5PTbiZV9l3phGL7U9N\nBv3TECHu3iV9ZxoBm5+aCHw9e5h8Z8pixoecULcMZxoaHq3LcaYI+QUUbjPuTbLH3gAAAABJRU5E\nrkJggg==\n", "prompt_number": 10, "text": [ "\u23a1k_q=0,p=0\u23a4\n", "\u23a2 \u23a5\n", "\u23a2k_q=0,p=1\u23a5\n", "\u23a2 \u23a5\n", "\u23a2k_q=1,p=0\u23a5\n", "\u23a2 \u23a5\n", "\u23a2k_q=1,p=1\u23a5\n", "\u23a2 \u23a5\n", "\u23a2 m^*_q=0 \u23a5\n", "\u23a2 \u23a5\n", "\u23a3 m^*_q=1 \u23a6" ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "To form the $A$ matrix for a single time step in a single foot step the equation can be rearranged:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "A = zeros(q, q * p)\n", "for row in range(q):\n", " A[row, row * p:(row + 1) * p] = -sm.T\n", "A = A.row_join(eye(q))\n", "A" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left[\\begin{smallmatrix}{}- s_{m p=0} & - s_{m p=1} & 0 & 0 & 1 & 0\\\\0 & 0 & - s_{m p=0} & - s_{m p=1} & 0 & 1\\end{smallmatrix}\\right]$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAATAAAAAmBAMAAACxLdryAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEO+Zu3ZEIlSJMqvd\nZs16138IAAADaklEQVRYCe2Wz0sUYRjHv7NqO7s7i5t1iQTNiDxakNgvUNggOgml5cHak9Vt6dDJ\nw0SJSARbIkkhzKFOQdpBiDy0hywQAkE87CHwT0iCAjvUzDvvm/POPO/7stSAh+Yw+77v832e57M7\n77z7RUfPUey562TPEXTsOSoGlA7Y2Jjh21KC/CBL4qFUwIo1e0lLRgnyZ+tBjgilAuZ42NaCkQKb\ngYlQKmBdVfRqwUhBCCZCMlhuxNUWhFHA0hdL+KytQwpCMBGSwfr5BoxUtRYeR2aEAIVSRMCGfvHV\n+Jo0JwV/wFiuDFa+l2jSWjoYqUkI9j2pRgRsuFjFsfiaNCcFHIzncrAHZf8q4dUvTyrgT9qRCWDV\nAjgJsC4P3+N1pDkp4HuM50q/mF0tDBcHvvTPeNgYn8fzlZUV9w7890RclIAAcyqmt5IShGAiVwJz\nvBbPvo5eu4apWmdII4FRAgKsrc9wjpECuzvoKEISWHF8FHhn1XMuWr3XIRh/lOGEEhBgmJ1N7NWw\ngLgTguy5n8NBmIckMJZWt/scGxkshI9S3vyBIiagwFihv7slwKyltkrhKiZH1sPC1vmncoe4IH9j\nQBb8m1kCjJdtmMobBaYChrgCLPvBkGcUGPKNYQWYMS91AQXWNlfT9zUK9OmKKDdi/F+RAmvgoSKX\nLxsF+nQ6yo0Yt2WgwNbQrj+GjAK6tX5VGLHwD4ACs34g4+qKGAW6ZGVMGDE1WH4bDj/E6Co6gdGw\nzV2ji8K3QszE6cGGFdlsOQBTCQjDdqgR2RgtlRfJ0m+CJeHRNGD+o1T1DcE0AsKwDVmDLI3dWi/u\n353w0e3jwUB4NDWYtYP2Cs8hP0iB2rB99TcyYAeObwj59zvJmp+CJeHR1GD4aHor1QLCsE13Y22X\nZRrL2Hi0cesZiqcabs53fG8BBiaMmAbssukcUwsIw5aVwNZwBlNbGXcG9phV58AMTBix0JZRxwVy\np0/sfkVqpBZQhi18lLzO5mYFBa8T88Cl/BZfZGDciAlbRh2wFEszazHDJm3+oI6D+6i76M6tRx9l\nrEMKYHHDdqBRlZsexiiWq9nVcb788psrC4JZCmC8icmwFWtJmshKamBGwzY5GMFIDlMDS7ZqbuU/\nWHO/V7D5u8oXmk1KX3+lvI19EzfTb9Rsh7sTld+XCAfCcGUJtgAAAABJRU5ErkJggg==\n", "prompt_number": 11, "text": [ "\u23a1-s_m_p=0 -s_m_p=1 0 0 1 0\u23a4\n", "\u23a2 \u23a5\n", "\u23a3 0 0 -s_m_p=0 -s_m_p=1 0 1\u23a6" ] } ], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "b = mm\n", "b" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left[\\begin{smallmatrix}{}m_{m q=0}\\\\m_{m q=1}\\end{smallmatrix}\\right]$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAEYAAAAZBAMAAAB+2EWVAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAu90iZpkydkTvqxCJ\nVM1ghewcAAABHElEQVQoFWMQUjJgYAlJL2UvTGDABjiUdBgUgBIs/Q6cq9kXoCvhPnIaJGQFVmNd\nxMDfwHoAXQ3jho0INQzLGTIZmC6gq+Fn4NwAFIOYwzCNoZDBno3B9Ypr7zEGBvcag1OrVq26YMnA\nlABXw/wBaJIjD8P1B5wX7jDwBnBCTERRw7GA4TGD1WkGroRNDGcZ+BISIWpQ7YKIMTAxXGVQuMC0\n4TgD2C5UN0PV7GKoYFhuwHFEDcLnDjkMYkDdDFUDoybAGGAaqxrWv4TVoKjAZReqIohd+OIUZg6O\nOGXgAkUF/jjlOGmAUIMjThmYkNVgj1MUNTjiFEUNjjhFUQMLD7Q4xaoGLU7Z6mOR/AUzCEqTE6dK\nwPyFD3AoaQEAe8NjjECjxxQAAAAASUVORK5CYII=\n", "prompt_number": 12, "text": [ "\u23a1m_m_q=0\u23a4\n", "\u23a2 \u23a5\n", "\u23a3m_m_q=1\u23a6" ] } ], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can check to make sure that our new form gives the same answer as the previous form:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "zero2 = A * x - b \n", "zero2" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left[\\begin{smallmatrix}{}- k_{q=0,p=0} s_{m p=0} - k_{q=0,p=1} s_{m p=1} + m^{*}_{q=0} - m_{m q=0}\\\\- k_{q=1,p=0} s_{m p=0} - k_{q=1,p=1} s_{m p=1} + m^{*}_{q=1} - m_{m q=1}\\end{smallmatrix}\\right]$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAAnBAMAAAD9bCIUAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEO+Zu3ZEIlSJ3TKr\nzWZMkIqIAAAFBklEQVRYCd1YXWgcVRQ++z87s9msVR8sQrcVsVIfgmCpFOoWUij0Jehuav2J60ts\nRXD1wYciZMRWyYtslNKCElbQKtSHIZgXUdg+BBQjlr70QSKRNGIslISCCIJ6z7135p47M7uzs1vN\n6n3YOfec75453z33hvkCMGzjp9gF7dhzn7fm8aZn9mFkHuxjUWDJ7GQ74OvieHjPbthB4madTOKb\nF+MvESuyZKHxWYPMejB1CrtKPSzpCElsdQxFBNIkPn18jsx6MHUKL/awojMk2+oc6x6hFKDeHRuI\n6hTes54JIDTHuSe1qT7Jjy22dY9vlq/ZPo+cIoXiocUnMlUnDLB2ozZWOxYWQZ9O4ce3yFG6Z0M7\nVon5OUjVPw8kUrCRX55XRwnh2rgMsN+qaC6cFPAlnMLLq8nLmTb6/OPnP+GhUnBz5Zt1CrfoJhxO\nVGiudOkuSB+9g7q4rWCjB0kQ4XScegBg/A1tUzCcfbfBfpHCK0/BaD3VRKdv5O5uwW/wqM8LIN8s\nKZwZZ6Nk3X+U4DZZi8gYhWTJ+v4P4hEmgxm4+jAsVG0VRbiaMesTgC//cjQXTswGfLdydWVlFZZg\nAUzbA2AbZeLChFWGT72Ia8gCtS5kKgsWFGvn88vLy1/nynCJgdemLsAHbG6/CqbzNnvP2jtrJ9+H\n4iMbNoVh2qpVdmD9RMODswPuwpCC0ShMFA/c3D/rqKxIQXQB9kEVZixMxAdpY9LJVHKbjlzrK1C/\nC+mJL/LwJpR5CknhbHOnSIkULsFBOHslac+CcSLRojC0j1itpjGW5G5AOCgYUjCdlGM8C3uNJnhZ\nFYXcJtuf63mxmv2SNs4A415pyrW+AnUKI43C0/CDe+dEn9LOVyIrplxfr0PB2QkXAI5ZV4Rfnbdr\nsOSMOPLCywo8GKNQnJoE+DbRytvgZVUUsm24Bq/P4SkgbeTveAlGGrlvSnKtr0CdAsd/mJ/gJ4Tf\nFgeSMC8OkttYk/WpZUM5v6pgggz+mqVzCs5OhQfDu4CjZYyZhsqqKIgweKdAtNH18qdYqxXI/Npd\n4LhTv8o7d+dGI7cFp2ur3A2JQ+e5cS9MwlIj9/GUcAODSQsf2Xm8QGwgfKakYIu3bO5uZ+qF4yqr\n9dwB5k5hSA53k8lBkpGEWEsLxEiQAtshNWzYUBNqFZt0Ru2ymhjQCdYhKy5lm8wPktt1lc61aIHM\nF0LhMdvFAti5j9SEWqcrdEbs1O9qYkAHWKesuNTdZLfrKp1r0QKZL4SCi9yup2+TI8sYQgq+Tf4v\nUois2QcYwi74Koyc/u8oDIN2hrjyX++CWY9sWzfAxW7BbrEsCcaU//4/qkTwkKS9mrdHOw8o/4dB\nOw8o/4dCO9cDXe9bOwNTu2TE1M5CFJP1LNtt1s6yQP06a9oZ1S4Z+NkVQzsLUazW/wPaWRYoKZxB\n9evTzu4XviwDP35jaGchBBQFzBZLO2Mbu2tnWaDWBU07c8Hev3YWFAbQzqSN4dpZFqh/qWraWSI8\nlRtTOwsKnsSOr51JG8O1cygFXTuLPnkqN6Z2lhX0r50JhQ7aOewg8ZPrSVNE9K+dsYKBtDOh4N6o\nFtfdWoEspN0FDnVVEzC1O4B2RlE8kHYOUvBrZynHgxSGRTsHKbjN8Mm6EApUNW2jdhb/23DLpk9a\nIPOHUKDo7bB9mxxZwm7YNX4kEvWvAnybHPHu6vgWZKdfiEANdfi16frfUBYqZFvKGnkAAAAASUVO\nRK5CYII=\n", "prompt_number": 13, "text": [ "\u23a1-k_q=0,p=0\u22c5s_m_p=0 - k_q=0,p=1\u22c5s_m_p=1 + m^*_q=0 - m_m_q=0\u23a4\n", "\u23a2 \u23a5\n", "\u23a3-k_q=1,p=0\u22c5s_m_p=0 - k_q=1,p=1\u22c5s_m_p=1 + m^*_q=1 - m_m_q=1\u23a6" ] } ], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "assert zero == zero2" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now for n timesteps we want to form the A matrix such that there are different gains for each time step." ] }, { "cell_type": "code", "collapsed": false, "input": [ "gain_matrices = []\n", "control_vectors = []\n", "control_star_vectors = []\n", "sensor_vectors = []\n", "for time_step in range(n):\n", " gain_matrices.append(Matrix(q, p, lambda i, j: Symbol('k^{}_q={},p={}'.format(time_step, i, j))))\n", " control_vectors.append(Matrix(q, 1, lambda i, j: Symbol('m^{}_m_q={}'.format(time_step, i))))\n", " control_star_vectors.append(Matrix(q, 1, lambda i, j: Symbol('m^*{}_q={}'.format(time_step, i))))\n", " sensor_vectors.append(Matrix(p, 1, lambda i, j: Symbol('s^{}_m_p={}'.format(time_step, i))))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "gain_matrices" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\begin{bmatrix}\\left[\\begin{smallmatrix}{}k^{0}_{q=0,p=0} & k^{0}_{q=0,p=1}\\\\k^{0}_{q=1,p=0} & k^{0}_{q=1,p=1}\\end{smallmatrix}\\right], & \\left[\\begin{smallmatrix}{}k^{1}_{q=0,p=0} & k^{1}_{q=0,p=1}\\\\k^{1}_{q=1,p=0} & k^{1}_{q=1,p=1}\\end{smallmatrix}\\right], & \\left[\\begin{smallmatrix}{}k^{2}_{q=0,p=0} & k^{2}_{q=0,p=1}\\\\k^{2}_{q=1,p=0} & k^{2}_{q=1,p=1}\\end{smallmatrix}\\right]\\end{bmatrix}$$" ], "metadata": {}, "output_type": "pyout", "png": "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\nxPK4Kfx/ARSk9V4KMxp4AAAAAElFTkSuQmCC\n", "prompt_number": 16, "text": [ "\u23a1\u23a1k^0_q=0,p=0 k^0_q=0,p=1\u23a4, \u23a1k^1_q=0,p=0 k^1_q=0,p=1\u23a4, \u23a1k^2_q=0,p=0 k^2_q=0\n", "\u23a2\u23a2 \u23a5 \u23a2 \u23a5 \u23a2 \n", "\u23a3\u23a3k^0_q=1,p=0 k^0_q=1,p=1\u23a6 \u23a3k^1_q=1,p=0 k^1_q=1,p=1\u23a6 \u23a3k^2_q=1,p=0 k^2_q=1\n", "\n", ",p=1\u23a4\u23a4\n", " \u23a5\u23a5\n", ",p=1\u23a6\u23a6" ] } ], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "control_vectors" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\begin{bmatrix}\\left[\\begin{smallmatrix}{}m^{0}_{m q=0}\\\\m^{0}_{m q=1}\\end{smallmatrix}\\right], & \\left[\\begin{smallmatrix}{}m^{1}_{m q=0}\\\\m^{1}_{m q=1}\\end{smallmatrix}\\right], & \\left[\\begin{smallmatrix}{}m^{2}_{m q=0}\\\\m^{2}_{m q=1}\\end{smallmatrix}\\right]\\end{bmatrix}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAATgAAAAqBAMAAADVOFp9AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEO+Zu3ZEImYyq92J\nVM0hoUD5AAAC6ElEQVRYCdWYP2gUQRTG3x5J7s/exSNqI4G7xEIQhGBhLAyeEBG7FB6ChaaKoCkO\nC1sFQRRTXJNeSw+FsxILIdrEwiJgqYWd2EUEESz0dnZG3s6+NzMs+wSvmNmZed/Ob9/M7N13APYn\nevfG7gpqN9pBYVZQ/f0Fq8fZnGofco4zgzNvB8yIs3sKbjrHrcEDUCmUg7gQ3Cx0HLPNLR4FUIWG\nvAXx0OIFOLm4kOvLyoCCC5DBx/yNlSwp5pIxVeggEg6AhMP3peACZNEXfBNzrWYj4JhllYI7Qq4q\nB8ccCCG4aHneZAvXObh7D/tL/YsQnd7FYeaahdOy+rUVE4prnyz+/QuHm+sc3P2fcLx9xQzbNTuL\nnAztuerhMfyAMzaUaXNwgjIEB421ehdeG5i/9fyW2rIcnKAMw1WG073qfu4ddy7qJaAsnJwMw92Z\nJKHW20lI8Gc/5WLh5GQY7gbMDqrP2rWVB6c+DaHW322ORqPn1S68SlhZODkZhtPpal2FE60d+ABd\n1eGFk5MRcPA0Gjf34Gu9l07rW1YNJyCj4MatpbgFL5pralnBdyAMXPkyAi56PL3euAybj/S5Pbg1\nSOZn95yGE5ARcCYTFXOR1j44E12izAF3ds/Mp+pQuBJlDrgMmn9ZrXDTDH0mE69rJfvf4Bj35U0B\n7b58MsZ9cZkr+GOTcV8+OMZ9cXD/9mc64744OJfB6XzObFzsi0j3pc+RS0a5Ly0jDoQLLv5WCM4l\nK9F9XS8EBw5Zie7rbjE4Xlai+4qIWQLcl0NWovuqZRKX/lEQ4L4KytCBELRR2UdSzxQyG4LjbBQ8\nUfdm36aMaStBhuEYG7V5zA0nJ8NwjI2Cl244ORmGo20U+ODkZBhOb1vLfXnh5GQEnG2jfJnTcAIy\nCs6yUaFw5csWoLN6HtJCp8C2UdvfJ2bi0mr2Kz+NVVopWTLlzMbkW1kVZn10nbFRtzfWreGkKSqj\np9QUlo0i2MiuMmV/ACadTQRg0XHNAAAAAElFTkSuQmCC\n", "prompt_number": 17, "text": [ "\u23a1\u23a1m^0_m_q=0\u23a4, \u23a1m^1_m_q=0\u23a4, \u23a1m^2_m_q=0\u23a4\u23a4\n", "\u23a2\u23a2 \u23a5 \u23a2 \u23a5 \u23a2 \u23a5\u23a5\n", "\u23a3\u23a3m^0_m_q=1\u23a6 \u23a3m^1_m_q=1\u23a6 \u23a3m^2_m_q=1\u23a6\u23a6" ] } ], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "control_star_vectors" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\begin{bmatrix}\\left[\\begin{smallmatrix}{}m^{*0}_{q=0}\\\\m^{*0}_{q=1}\\end{smallmatrix}\\right], & \\left[\\begin{smallmatrix}{}m^{*1}_{q=0}\\\\m^{*1}_{q=1}\\end{smallmatrix}\\right], & \\left[\\begin{smallmatrix}{}m^{*2}_{q=0}\\\\m^{*2}_{q=1}\\end{smallmatrix}\\right]\\end{bmatrix}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAARIAAAAqBAMAAACNR8lkAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEO+Zu3ZEImYyq92J\nVM0hoUD5AAAEdUlEQVRYCc1YO2hUQRS9k5jdjZvoww9YiI5rIVoFKwvFFWJhZcBEQQXTuIIIrhYW\nIhjxA6LFItpZJIUIQSFWoiAmoihWAUst7MQuooiNn/ndyX0zd95bY+MU87v33DmZOzPvbAC4It7M\ncdMFc1MFNs5092Wbm47mlmVrornCiVNbCs2xsVmZiSeZmZXQkzHTBVOPC2yc6aP4Ek6vamwGMBVa\nahmchXrHDnsbDYaTaDSG0B3gkup6Jjwgt4ABDM64ANsbmwB0tUpPmMpZBl+dJEyA3R0hnbNuPhyc\nJEx4AF3AAja0fQjFBIBhAu/vA80OlychNdiVwacqqN+TLphogCBHPMWkcvxCRk9sKZPWobm/Y6IB\nq8/M4l+itkMVuieXr48Nje0DqACIHa+9X5JJbcedA32jHYBxgDtf5wsBJjsU8Pz3jAdETK79gG3Z\nYW/HTprJ6Ymeqb5J9PMtB7BMEoCQSXXtDHyHnT4gdrjAQirrmSOwcrx3VvXyhQMYJilAyASWj/RL\neLYY1T20XGAhtds9uAX1xazA+puZnuYA9u4EAHzJIyY9nb5mdaGjg5niji0XWEjtsRVG4WK/7tmy\nRzR1hwNYJgEA70XE5KLalVpzVgczxV1lLrCQyqO6oHblyoDxNdWCvQUcwDAJAfhWRExOwop29UEG\nV4+2305PT8+7h5YLLKRaujIJn+D8HNTGXg8o/4dVCU80Iw5gmBAAXSC+xTqKKoNDPbZTxsR6AbwD\nabqlTEIAflOiPXGOKzq3ba8sOxj4c3/TdsuyEwKS2XGO9ewVmM0rPbEO8GhgxGQHSk/sIoAukMxO\n5Y3Jtn9oubQL6YLq5tQNd99W32zrMQewd0dbVUEAvuSp7IBLu0XxgYVEq27ducKpUiYhIMmk9yfG\nNC0XWEjqsnuejsr3BAJAkkkubDd70gUgl53AP3lOQr/yPQkQHGDJTPCLoNfgAgupLbRMLQ44QMSE\navui7OAXQYfnAgupLaRQbc8BIiZU2xcxwTdHr8UFFlJbaPkb9ahxVNsnmeS0PTLZ+JGuKyQdXVKD\nkIn4RT1ykt3+GPDaXgtHVah6dFBe29dzP0+EdM664bX984y45JkYwNK1/QkaWEgy4rV9xby36JY7\nJ/+o7ScwqG6FVBUWXtvX0GzaHJN/0/ZigkYWUo2oVI+1/Trqb7NDAUvX9vk/0TJJSHV72SYYJglA\neGL/Y20Py83xT78ngVQHmDL7wAHsOQkBdoH4FofavvLCHH8usMlOpO3dQ8sBLJNA27sFYiahtod6\nMZNQquPzlmQSAewCMZNQ25cxIVLdqkf30CaZEIBRj26BmIk77F7blzHBy4HavnRPIkBqT5yj1/bd\nMvHavmxPkIkHlDDx2r5bJl7bd8tEAbjsbBzeC2AqR9lr+/5juwD6hvebu4x/j23Ft+ERP4NS3f4T\nhQfQBby2NwvA6LD6uOqq0lLfNlP50NL31I/fVouMfLfVMvfKjnPangfkF8gBzrXGAUzlo2Mn0PY4\nnW4DqZ52RAsL+AN8jEJslCydcAAAAABJRU5ErkJggg==\n", "prompt_number": 18, "text": [ "\u23a1\u23a1m^*0_q=0\u23a4, \u23a1m^*1_q=0\u23a4, \u23a1m^*2_q=0\u23a4\u23a4\n", "\u23a2\u23a2 \u23a5 \u23a2 \u23a5 \u23a2 \u23a5\u23a5\n", "\u23a3\u23a3m^*0_q=1\u23a6 \u23a3m^*1_q=1\u23a6 \u23a3m^*2_q=1\u23a6\u23a6" ] } ], "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ "sensor_vectors" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\begin{bmatrix}\\left[\\begin{smallmatrix}{}s^{0}_{m p=0}\\\\s^{0}_{m p=1}\\end{smallmatrix}\\right], & \\left[\\begin{smallmatrix}{}s^{1}_{m p=0}\\\\s^{1}_{m p=1}\\end{smallmatrix}\\right], & \\left[\\begin{smallmatrix}{}s^{2}_{m p=0}\\\\s^{2}_{m p=1}\\end{smallmatrix}\\right]\\end{bmatrix}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAASQAAAAqBAMAAADoqjsbAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEO+Zu3ZEIolUMqvd\nZs0eYxJ8AAAEAklEQVRYCd2YPWgUQRiGv8nv3eVOY7QIJJLxLMQuCEYiCBFORBtTmKhFNNWpYHFY\nWKWIgmiUwIkEUyhcoZUgWqTQFKZQhDQGQiCNkM5W0UrEOD87m53Zd2c3cgg6xfzcfO83z84sk31D\nZJXe9W5rnGXQtX1J4e7JLJlVzHE2kjk2COy4VduuhNroWmbNF9qXOdYEFrePtIMGPFvbU95PrFwe\nVAt0clo2K4Vta7kM9KGGEBLWyLWC8th0ttpDZbEdsuoRvzEuKlkgElELQuJKISqEhDVyLV3YZ9OL\ntuqEHCTCB9d8pD7wkKRfGhcJv95NR2JHeqO7Y/rxXbp9gXav18x8pE1Gyo3VC5eGI6FhF2n0wQlN\ncfNnGBjpxJBaJ59GpqNdlJ5xGTFUGJENKEijkZI1MaS2U7tAavkTSs+4nKk8gC+FmEEajZSsiSEV\n3v6Qq1hF3+YoPeMy8PlmQzbRwmZvyiHSaKRkTQzpES1EU6u+ft1ResZFQL7WNariIlVb9x45QhqF\n5NHEkJbpaCSz7upLAaVnXEQUG60N0Vhlp6ZBGoXk0cSQ1tYmafXJ6tV7VDq8Xs8tLi6+Dq5OlJ5x\nAVKaGKfS8Keh+QatTszQfaGpXxegYgppFJJHE0MSeWhuo6U+T/nzbEmOzG2O0jMuA0TJX6SD+Wma\nm+7X4zQkjwYidTX6aYbodGFD5085OBX0hi3l6tTWeKElaQfn0UCkIj2kpTrx3Io6OEp5vVX6pfxg\nMU8tNKsPLu319mggUh+N00Kt8/2EfuLgNvceHHvZPtl1jqbGVrSGHbsjO0ijLwExmaCBSDpraVq3\npkbpGTezul23h36kINbVeJCmRuz8GZA639mSLEgxjQfJyQ7TM+5G2WP0GOHB2aHh6F9Bwg4FPTHj\n5uGwQ0GacJcSHArcpT/4hEtwKF6kBIcCkf7Sh26CQ0FIPjvAfpmTUi3jZuixA44mPDgi4FDwt7cP\niT5aX2uZkBzNFlKTHEpHzeyLbBkXlSqeXSJbs4XUJIdSMgyqZdwMfUi2JkRqlkPZaxhUy7hs0hyK\nrdFITXQowZ9VSSIK46JKdSi2RiP9fw6FXsm9QNce43IGuA3StznS6F1K1sTuJeRQrhyQC6P0jIsJ\n5DaC2xxpFJJHE0NCDoU+iIWTkZDbCP6Tkojk0cSQgEOhFCTkNtKQPJoYktwPx6GkIUmJ61DSkDwa\niOQ6lJRdkunJcShZkBI0EMl1KFmQHIeSCQlrAqSBygli3yuj6oHJdSjPvtWpvXKmW89G61Djug31\n/yaskWupAjVnK1+JZNVRvUxUrdaiy9kOpbNajU6avqOx3QbWqLWMXrS25kZ1kkhVkRDTdR2K+d3T\nxtyGJ9ZMJWh+A5QnM2g1BTWuAAAAAElFTkSuQmCC\n", "prompt_number": 19, "text": [ "\u23a1\u23a1s^0_m_p=0\u23a4, \u23a1s^1_m_p=0\u23a4, \u23a1s^2_m_p=0\u23a4\u23a4\n", "\u23a2\u23a2 \u23a5 \u23a2 \u23a5 \u23a2 \u23a5\u23a5\n", "\u23a3\u23a3s^0_m_p=1\u23a6 \u23a3s^1_m_p=1\u23a6 \u23a3s^2_m_p=1\u23a6\u23a6" ] } ], "prompt_number": 19 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Picking off a trio we should get our familiar equation back:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "zero = - control_vectors[0] + control_star_vectors[0] - gain_matrices[0] * sensor_vectors[0]\n", "zero" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left[\\begin{smallmatrix}{}- k^{0}_{q=0,p=0} s^{0}_{m p=0} - k^{0}_{q=0,p=1} s^{0}_{m p=1} + m^{*0}_{q=0} - m^{0}_{m q=0}\\\\- k^{0}_{q=1,p=0} s^{0}_{m p=0} - k^{0}_{q=1,p=1} s^{0}_{m p=1} + m^{*0}_{q=1} - m^{0}_{m q=1}\\end{smallmatrix}\\right]$$" ], "metadata": {}, "output_type": "pyout", "png": "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\n", "prompt_number": 20, "text": [ "\u23a1-k^0_q=0,p=0\u22c5s^0_m_p=0 - k^0_q=0,p=1\u22c5s^0_m_p=1 + m^*0_q=0 - m^0_m_q=0\u23a4\n", "\u23a2 \u23a5\n", "\u23a3-k^0_q=1,p=0\u22c5s^0_m_p=0 - k^0_q=1,p=1\u22c5s^0_m_p=1 + m^*0_q=1 - m^0_m_q=1\u23a6" ] } ], "prompt_number": 20 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The larger A matrix for all of the time steps can be formed by stacking the A matrices from a single time step diagonally:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "Am = zeros(n * q, n * (q + q * p))\n", "for time_step in range(n):\n", " An = zeros(q, q * p)\n", " for row in range(q):\n", " An[row, row * p:(row + 1) * p] = -sensor_vectors[time_step].T\n", " An = An.row_join(eye(q))\n", " num_rows, num_cols = An.shape\n", " Am[time_step * num_rows:(time_step + 1) * num_rows, time_step * num_cols:(time_step + 1) * num_cols] = An\n", "Am" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left[\\begin{smallmatrix}{}- s^{0}_{m p=0} & - s^{0}_{m p=1} & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\0 & 0 & - s^{0}_{m p=0} & - s^{0}_{m p=1} & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\0 & 0 & 0 & 0 & 0 & 0 & - s^{1}_{m p=0} & - s^{1}_{m p=1} & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & - s^{1}_{m p=0} & - s^{1}_{m p=1} & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0\\\\0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & - s^{2}_{m p=0} & - s^{2}_{m p=1} & 0 & 0 & 1 & 0\\\\0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & - s^{2}_{m p=0} & - s^{2}_{m p=1} & 0 & 1\\end{smallmatrix}\\right]$$" ], "metadata": {}, "output_type": "pyout", "png": "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\nppkM6P4PRQITeq4dFvwAAAAASUVORK5CYII=\n", "prompt_number": 21, "text": [ "\u23a1-s^0_m_p=0 -s^0_m_p=1 0 0 1 0 0 0 \n", "\u23a2 \n", "\u23a2 0 0 -s^0_m_p=0 -s^0_m_p=1 0 1 0 0 \n", "\u23a2 \n", "\u23a2 0 0 0 0 0 0 -s^1_m_p=0 -s^1_m_p=1 \n", "\u23a2 \n", "\u23a2 0 0 0 0 0 0 0 0 \n", "\u23a2 \n", "\u23a2 0 0 0 0 0 0 0 0 \n", "\u23a2 \n", "\u23a3 0 0 0 0 0 0 0 0 \n", "\n", " 0 0 0 0 0 0 0 0 \n", " \n", " 0 0 0 0 0 0 0 0 \n", " \n", " 0 0 1 0 0 0 0 0 \n", " \n", " -s^1_m_p=0 -s^1_m_p=1 0 1 0 0 0 0 \n", " \n", " 0 0 0 0 -s^2_m_p=0 -s^2_m_p=1 0 0 \n", " \n", " 0 0 0 0 0 0 -s^2_m_p=0 -s^2_m_p=1 \n", "\n", " 0 0\u23a4\n", " \u23a5\n", " 0 0\u23a5\n", " \u23a5\n", " 0 0\u23a5\n", " \u23a5\n", " 0 0\u23a5\n", " \u23a5\n", " 1 0\u23a5\n", " \u23a5\n", " 0 1\u23a6" ] } ], "prompt_number": 21 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The control vector and the gain vector are simple column stacks:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "bm = control_vectors[0]\n", "for control in control_vectors[1:]:\n", " bm = bm.col_join(control)\n", "bm" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left[\\begin{smallmatrix}{}m^{0}_{m q=0}\\\\m^{0}_{m q=1}\\\\m^{1}_{m q=0}\\\\m^{1}_{m q=1}\\\\m^{2}_{m q=0}\\\\m^{2}_{m q=1}\\end{smallmatrix}\\right]$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAEwAAACDCAMAAAAQ9w14AAAANlBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHL6OuAAAAEXRSTlMAMquZdlQQ\nQN0iRGa774nNfONeSiIAAANsSURBVGgF7Vprk6sgDI2CbJWWLv//z95gZy0ckJjxzu7OjnypvI55\nEA6hEu0XF3xw+926nrsjd9dN2R8duevxn0SbHwx2G/ZfVvcMcS1j3XMc7PbCIBqisVymGowOq+kT\nwsjDh7iriM4BHsC88YO1hqy9pzc448PckLjdVIEt0bMDR0e2YcM2xtYKYLOzN+6LC5EJ26CjDwBG\nNFo24roiWg4BWAiQCuzBprK86OdIu27ZIME/CMYYL+n8nWQ9YeUg2JLM/mQHzmOKcG8m780yhVVK\nXkzs2zC+ykS4phFs0+D1MNkn+3aiKUk5GX7OByjBaBzIsX9D8sZzoKHcQgQ18xenZwZKAt2I0W6O\nAvv6rSYJDgAwxya0vOhGy2ZcgocdBAJEsBlglybDTtKBmdhdyTqwSpay4TvBIPhKQaqaIBn4vppe\nNghgsCrLuVWtD4bxUk0vG74R7Dg7rSL2JcPgK7Wqagh2sVNlotTABPsuaDNSsdMSHjnfI5iOnXj3\n7YGp2IkV7IK9DbA+9dlJCSawk04ygZ10YAI7DTaajBXQm2AzrBaEjp0rO33Ej6q93SCw0yfvpZ0z\nbRtzr1Wp5h7Mq10EK4KvjyUxOgTfOTBYSBdYsoDozWKPUdoM2AmCTwt2NndydmOFc7nTnFKlPN+8\ncie6cqd1OQvhJLDTlTsJe4LcnRzQJWENOwkkfLFTwx9CBPwiEv5d7JQRyjl2qhygYifwaAWmyp0a\niVgem7rcCaINYxNyJ9CjrhbnmkrNcnz/mpDHasCuRCwZF86CggNKd8DNKnbKZ9pihpCIKSUroKuK\nADaEcM/vB6r5RYMAxhfGS/qD4FhJYNkBGSfxzbaL2/EZe7G+HpCLmMAR03HJ0tBsc0QkFizd5x8s\ngs3IaY4HApgzs5P/sPgSXABL/5odtxmCAdV9vfPYbwV2NhHLvPmTVAf36Kim7poQ7tERTEd1cI+O\nYEB1fXbCe3QEgzXQZyclmHBNKKgJkgnXhIIDAOxKxMAgqSosjcaMTpMA9sNUl21BqIOO6gQ1GVxB\ndSLY36Q6YKeTVPdH2KmROxWLVpWIQe6E60zHTkK6o2Injo/inIiSQXD22UkJJrBTU7K9z594cPcT\nizfY9vmTS58u2fQlRVUEdnrnTuvnT5avoxWl/yeWAoiHCrkTj/gHGk859Rn4yUEAAAAASUVORK5C\nYII=\n", "prompt_number": 22, "text": [ "\u23a1m^0_m_q=0\u23a4\n", "\u23a2 \u23a5\n", "\u23a2m^0_m_q=1\u23a5\n", "\u23a2 \u23a5\n", "\u23a2m^1_m_q=0\u23a5\n", "\u23a2 \u23a5\n", "\u23a2m^1_m_q=1\u23a5\n", "\u23a2 \u23a5\n", "\u23a2m^2_m_q=0\u23a5\n", "\u23a2 \u23a5\n", "\u23a3m^2_m_q=1\u23a6" ] } ], "prompt_number": 22 }, { "cell_type": "code", "collapsed": false, "input": [ "xm = gain_matrices[0].reshape(q * p, 1).col_join(control_star_vectors[0])\n", "for gain, control_star in zip(gain_matrices[1:], control_star_vectors[1:]):\n", " xm = xm.col_join(gain.reshape(q * p, 1)).col_join(control_star)\n", "xm" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left[\\begin{smallmatrix}{}k^{0}_{q=0,p=0}\\\\k^{0}_{q=0,p=1}\\\\k^{0}_{q=1,p=0}\\\\k^{0}_{q=1,p=1}\\\\m^{*0}_{q=0}\\\\m^{*0}_{q=1}\\\\k^{1}_{q=0,p=0}\\\\k^{1}_{q=0,p=1}\\\\k^{1}_{q=1,p=0}\\\\k^{1}_{q=1,p=1}\\\\m^{*1}_{q=0}\\\\m^{*1}_{q=1}\\\\k^{2}_{q=0,p=0}\\\\k^{2}_{q=0,p=1}\\\\k^{2}_{q=1,p=0}\\\\k^{2}_{q=1,p=1}\\\\m^{*2}_{q=0}\\\\m^{*2}_{q=1}\\end{smallmatrix}\\right]$$" ], "metadata": {}, "output_type": "pyout", "png": "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\n3Ah21oRUAAAAAElFTkSuQmCC\n", "prompt_number": 23, "text": [ "\u23a1k^0_q=0,p=0\u23a4\n", "\u23a2 \u23a5\n", "\u23a2k^0_q=0,p=1\u23a5\n", "\u23a2 \u23a5\n", "\u23a2k^0_q=1,p=0\u23a5\n", "\u23a2 \u23a5\n", "\u23a2k^0_q=1,p=1\u23a5\n", "\u23a2 \u23a5\n", "\u23a2 m^*0_q=0 \u23a5\n", "\u23a2 \u23a5\n", "\u23a2 m^*0_q=1 \u23a5\n", "\u23a2 \u23a5\n", "\u23a2k^1_q=0,p=0\u23a5\n", "\u23a2 \u23a5\n", "\u23a2k^1_q=0,p=1\u23a5\n", "\u23a2 \u23a5\n", "\u23a2k^1_q=1,p=0\u23a5\n", "\u23a2 \u23a5\n", "\u23a2k^1_q=1,p=1\u23a5\n", "\u23a2 \u23a5\n", "\u23a2 m^*1_q=0 \u23a5\n", "\u23a2 \u23a5\n", "\u23a2 m^*1_q=1 \u23a5\n", "\u23a2 \u23a5\n", "\u23a2k^2_q=0,p=0\u23a5\n", "\u23a2 \u23a5\n", "\u23a2k^2_q=0,p=1\u23a5\n", "\u23a2 \u23a5\n", "\u23a2k^2_q=1,p=0\u23a5\n", "\u23a2 \u23a5\n", "\u23a2k^2_q=1,p=1\u23a5\n", "\u23a2 \u23a5\n", "\u23a2 m^*2_q=0 \u23a5\n", "\u23a2 \u23a5\n", "\u23a3 m^*2_q=1 \u23a6" ] } ], "prompt_number": 23 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now the original equations can be regenerated with:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "Am * xm - bm" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left[\\begin{smallmatrix}{}- k^{0}_{q=0,p=0} s^{0}_{m p=0} - k^{0}_{q=0,p=1} s^{0}_{m p=1} + m^{*0}_{q=0} - m^{0}_{m q=0}\\\\- k^{0}_{q=1,p=0} s^{0}_{m p=0} - k^{0}_{q=1,p=1} s^{0}_{m p=1} + m^{*0}_{q=1} - m^{0}_{m q=1}\\\\- k^{1}_{q=0,p=0} s^{1}_{m p=0} - k^{1}_{q=0,p=1} s^{1}_{m p=1} + m^{*1}_{q=0} - m^{1}_{m q=0}\\\\- k^{1}_{q=1,p=0} s^{1}_{m p=0} - k^{1}_{q=1,p=1} s^{1}_{m p=1} + m^{*1}_{q=1} - m^{1}_{m q=1}\\\\- k^{2}_{q=0,p=0} s^{2}_{m p=0} - k^{2}_{q=0,p=1} s^{2}_{m p=1} + m^{*2}_{q=0} - m^{2}_{m q=0}\\\\- k^{2}_{q=1,p=0} s^{2}_{m p=0} - k^{2}_{q=1,p=1} s^{2}_{m p=1} + m^{*2}_{q=1} - m^{2}_{m q=1}\\end{smallmatrix}\\right]$$" ], "metadata": {}, "output_type": "pyout", "png": "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\n", "prompt_number": 24, "text": [ "\u23a1-k^0_q=0,p=0\u22c5s^0_m_p=0 - k^0_q=0,p=1\u22c5s^0_m_p=1 + m^*0_q=0 - m^0_m_q=0\u23a4\n", "\u23a2 \u23a5\n", "\u23a2-k^0_q=1,p=0\u22c5s^0_m_p=0 - k^0_q=1,p=1\u22c5s^0_m_p=1 + m^*0_q=1 - m^0_m_q=1\u23a5\n", "\u23a2 \u23a5\n", "\u23a2-k^1_q=0,p=0\u22c5s^1_m_p=0 - k^1_q=0,p=1\u22c5s^1_m_p=1 + m^*1_q=0 - m^1_m_q=0\u23a5\n", "\u23a2 \u23a5\n", "\u23a2-k^1_q=1,p=0\u22c5s^1_m_p=0 - k^1_q=1,p=1\u22c5s^1_m_p=1 + m^*1_q=1 - m^1_m_q=1\u23a5\n", "\u23a2 \u23a5\n", "\u23a2-k^2_q=0,p=0\u22c5s^2_m_p=0 - k^2_q=0,p=1\u22c5s^2_m_p=1 + m^*2_q=0 - m^2_m_q=0\u23a5\n", "\u23a2 \u23a5\n", "\u23a3-k^2_q=1,p=0\u22c5s^2_m_p=0 - k^2_q=1,p=1\u22c5s^2_m_p=1 + m^*2_q=1 - m^2_m_q=1\u23a6" ] } ], "prompt_number": 24 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have $n(p q + q)$ unknowns and $nq$ equations so we need at least $1 + p$ cycles to solve for the unknowns." ] }, { "cell_type": "code", "collapsed": false, "input": [ "n * (p*q + q)" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$18$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAABMAAAAPBAMAAAD0aukfAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAzRAiu5mrdu/dZolE\nVDLjuNgcAAAAeklEQVQIHWNgYBBiYGAq33qAgYHB5BMDAysDQy4Dg0oYkHmLgcEQKMoOZG5hYNCE\nMs87MeyCMtn+r14AZTLEf1SAMrni5HugzGUMXD+AwiATmhgY3l8AM5k+MDCwLYCINjMwsBhAmAcV\nGJYDrc/4mcXAlwp2DtAQCAAASJ4i3e599ZEAAAAASUVORK5CYII=\n", "prompt_number": 25, "text": [ "18" ] } ], "prompt_number": 25 }, { "cell_type": "code", "collapsed": false, "input": [ "1 + p" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$3$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOBAMAAADkjZCYAAAALVBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOrOgAAAADnRSTlMAIom7VJlmdt1E7xDNMpCR\nWcAAAABSSURBVAgdY2AQUjJhYGAMYPBLYGB/wsDXwMC5kmHfAQYgAIoAwVEg5tUIADEZtC6ASK7V\nDIwCDMxAxa8ZmJ8xcBkwcDxkYEtg8CtgYJgaaskAAFKHDvy4QzOnAAAAAElFTkSuQmCC\n", "prompt_number": 26, "text": [ "3" ] } ], "prompt_number": 26 }, { "cell_type": "code", "collapsed": false, "input": [ "Am.shape, bm.shape" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\begin{pmatrix}\\begin{pmatrix}6, & 18\\end{pmatrix}, & \\begin{pmatrix}6, & 1\\end{pmatrix}\\end{pmatrix}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAALoAAAAaBAMAAADyPFssAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMkS7zRCZdiKJ71Rm\nq90icBAQAAACxElEQVRIDZ2VPWhTURTH/y9NXl6blxh0c2kGV2lAHNziIFJQDNhJxMRvHMROik6B\nulsQKgWHIAiCy5tcdHibVChEBAd10EEnwVpaKFbU/znvI++93NvBA7nn3HPO79zvFwD7ATgtNnZZ\nNIeENEpVvAo5bVoHjEmp83BqZQ0ls47ULo1oKlTu0jqRBozGdGhyK2kKAI/pVug6DVdWsXq3WUzl\noJU7Ky3gazEifSHNEBoyZULeNvUDdhZabodmVpYYc4GPwO2sO7aFtECo9plEaFr0Cn/zmGpTZeTs\nTfKvgPscPuNOTCEtELwNZhGaCaifA/5OQo11ldUfAheARjj2JhZJGwR8ZxahWW6KwypTw4Qaa6k+\nd1SOyC0sS3JI2iDgMhMIvaHyh8C+448u0cyJVK//XQuB6jAX0A5JGwTcYwqhK1RynL1T0SYpGDdS\nHbe2uLqSWAUhaYUwF0FHyMhx9rbhPi3wUt2/eOYJ9+5nIcQuSRvEbWsqdJp55REX+Rn+ZqGEVF+H\n/6sLrxhiJkkbxPvS4mXfxDfmNfq8Ox34v2lnRapzPbMBvN2sP7JJ2iBWD1h9V2agc+fxm+Ze2eDB\nhra5WyCWjOeeVK9x34fRpNJW5v6MxzKAY3gNJG0Q1zvgvu/gHWvV22yO4VxQ2UoriyHVD3Xx2nxn\nhLRAfCZdheKLyU/CtbfADzpTcT/8+QTnvXzF5EWgMLaQFgjJM4oHYaZIaaBqooneam5snZ4mmqD4\nrc60mMEbHYmfGAVdXhRHvoyS4jZBJ+kn5C5T35AkkfORmmh7umP5MkpaoApPDIScIfVBSRIJtZ1s\n1tWVH1tJ8YcazDX+iF2B+N+AepCLTXa+qCvMB4S0SKPJgEAL/FU6bPYQf9kUFNIia/QrVOvTemHJ\nit1LxrCSxojXpjuCXtKq7b01V401IKRR3C7dFsgI/JfzH5YmuXfLGAVgAAAAAElFTkSuQmCC\n", "prompt_number": 27, "text": [ "((6, 18), (6, 1))" ] } ], "prompt_number": 27 }, { "cell_type": "code", "collapsed": false, "input": [ "b = bm\n", "A = Am\n", "for step in range(p):\n", " b = b.col_join(bm)\n", " A = A.col_join(Am)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 28 }, { "cell_type": "code", "collapsed": false, "input": [ "A.shape, b.shape" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\begin{pmatrix}\\begin{pmatrix}18, & 18\\end{pmatrix}, & \\begin{pmatrix}18, & 1\\end{pmatrix}\\end{pmatrix}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAANAAAAAaBAMAAAA0+c+VAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMkS7zRCZdiKJ71Rm\nq90icBAQAAADC0lEQVRIDbWVP2gUQRTG316ye5fL5QhqJchdYWEjORDFzmuClbigYCPm/IekCF6l\naGMg9icIqSyCIAgWprLRYislQjAgWJhAtNBKMWoEScT4fW//zM7cXjof5Jtvfm/mzcztzkZE9ghC\nhWZwlItTXrOYJ7TLVsVrwakkqUFNaaUws7eQZvAwncpwCKeSJQeYB4V8spBmcCSCVblGRuFi525d\nYteKjNe5JTeCLggW82/ON90cuXwihVR+oaVUTqBOR8YWmciF4eVODqe2h1lzmB6IrKYsbcnlBnuQ\nkQ5aiH9sPZTRSCpt9HOR45WNHE/tvMiZGRR8IXI3ZUmrXHrsQao8gcqdUEZa4n9gIh+Gf8njxD9B\nW8ZC90UuuGlyqUexNHB0UUHB0s9QnxuQCcMvG5g6j7VYcOKo9L0sulDQwgjIa05RQUFZ/9M3Wgy/\nzbF21BbQZ8GxnaXITsVcyjpiQa4wq8KCwQ5fFDsMn+Dp7Qja6OvOr2/2ZZWXeGbIEU5UYcGX+7aa\nBPkwvDGe5+qHWmhYsHbx9EM3qwt534Ehp5hVQcHairx55A43vNd0czK8AsSCy1Lbwk6t0IUqP8Ag\nn5lSQcFqKN62NRYdw3uLbk7qHSAWxP4abjpeiAUr2/aJpsDW8GcFFkr4LifyN/A+RNa85NmlJ7J+\nuuqsyHFntJ4o5g00TmQ/3WORITetJ/J+YwrkLWeqYOelSal1/U0iEynHXXEfAk7RwkAWPBjKK5lq\nm2kJ5wunb53eDcrM06+RHJjGR/WbVc/w+LrZxXhLgvd/18R7h49qnUWzUC560yC6S3urpdlsrG30\ny2AX0/2aUYeMTV36Zag2QVTSjNQy55iT2reL2ZcncmagO9yNJbiHViUbcz5ztvHjHyay6HS+59s5\nTU3xQUC8BbQqiilR5myD64xwiu3Pjyn6LZY5gLJKo0KzW9THmXWK9f2jdCt8JKCcpVGh2S2WipJ+\nu4gaVuOjURntwKmYbKGrtArxs0KawTk6FXlOq0IzOIKwMDe6WIhTeJVGJSX/uf0HSmHWidRWRpoA\nAAAASUVORK5CYII=\n", "prompt_number": 29, "text": [ "((18, 18), (18, 1))" ] } ], "prompt_number": 29 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following should compute the least squares solution but since I didn't actually create new equations for the steps, then you get NaN as a solution." ] }, { "cell_type": "code", "collapsed": false, "input": [ "x = A.LDLsolve(b)\n", "x" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left[\\begin{smallmatrix}{}\\bot\\\\\\bot\\\\\\bot\\\\\\bot\\\\\\bot\\\\\\bot\\\\\\bot\\\\\\bot\\\\\\bot\\\\\\bot\\\\\\bot\\\\\\bot\\\\\\bot\\\\\\bot\\\\\\bot\\\\\\bot\\\\\\bot\\\\\\bot\\end{smallmatrix}\\right]$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAACQAAADrCAMAAAA2YMTLAAAAM1BMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADxgEwMAAAAEHRSTlMAMquZdlQQQN0i\nRLuJ72Z8fOynKQAAAZtJREFUaAXtmuF2gjAMhYtWxOmU939aIT0XanoV1sFWMf1B0MS25ssNHMW5\nrLGb86nz/wdVrYxxu9GemuBzrmr3vhuHYbtR0LX37No+qBr8chIFyetrTtDl3I3v/nAZZ6czje5w\ntnLQmLEXyy2SApl/szMZ4FA/BjjkITqurOBoJTmly2XL/NgeHxfQgG857VCm1DPRjRcW9FYyr339\nmt3Jr3W9M8CPmccrWuNwwtIgpmAT589v10pRcCJODdjE6agQpq4IpQBOxKkBf9aVU5rbFLtZQX8A\nOBEnWjMsFSecsLR8dRXQoEXyJNvY7Ey/q4JEnGAGS8UJJyxlZ4DdIkX3FPCK4gRYWAOcdw2W/E1V\nwVPAK4oTYGEN8MKAY3YUcH5jBTNYyg5OWBpkLZq26KSxagXrux4KmGYcOGBLCPq8KojFKSQ0YCpO\nHaTZFVsFmwI8T5zNCQoLVrM7NBm/+BlgnkwtBCqpdwgywAY4ZCA50vLVUflBRbToGY8O1P3jAd5/\nDd88aqzy6IDv/kpJRhSU+IY3FgmiCu6WuAMhFTqkOvNfLgAAAABJRU5ErkJggg==\n", "prompt_number": 30, "text": [ "\u23a1nan\u23a4\n", "\u23a2 \u23a5\n", "\u23a2nan\u23a5\n", "\u23a2 \u23a5\n", "\u23a2nan\u23a5\n", "\u23a2 \u23a5\n", "\u23a2nan\u23a5\n", "\u23a2 \u23a5\n", "\u23a2nan\u23a5\n", "\u23a2 \u23a5\n", "\u23a2nan\u23a5\n", "\u23a2 \u23a5\n", "\u23a2nan\u23a5\n", "\u23a2 \u23a5\n", "\u23a2nan\u23a5\n", "\u23a2 \u23a5\n", "\u23a2nan\u23a5\n", "\u23a2 \u23a5\n", "\u23a2nan\u23a5\n", "\u23a2 \u23a5\n", "\u23a2nan\u23a5\n", "\u23a2 \u23a5\n", "\u23a2nan\u23a5\n", "\u23a2 \u23a5\n", "\u23a2nan\u23a5\n", "\u23a2 \u23a5\n", "\u23a2nan\u23a5\n", "\u23a2 \u23a5\n", "\u23a2nan\u23a5\n", "\u23a2 \u23a5\n", "\u23a2nan\u23a5\n", "\u23a2 \u23a5\n", "\u23a2nan\u23a5\n", "\u23a2 \u23a5\n", "\u23a3nan\u23a6" ] } ], "prompt_number": 30 }, { "cell_type": "code", "collapsed": false, "input": [ "type(x[0])" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 31, "text": [ "sympy.core.numbers.NaN" ] } ], "prompt_number": 31 } ], "metadata": {} } ] }