{ "metadata": { "kernelspec": { "codemirror_mode": { "name": "ipython", "version": 3 }, "display_name": "IPython (Python 3)", "language": "python", "name": "python3" }, "name": "", "signature": "sha256:6335decbeaf50bc78fe212b682c3189bd83d7a83eb5fdb825b62bbd258f2da3f" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Decomposi\u00e7\u00e3o de Kalman\n", "Suponha que um par de matrizes $(A,B)$ n\u00e3o seja control\u00e1vel. Ent\u00e3o podemos decompor o sistema numa parte control\u00e1vel e outra sem controle.\n", "\n", "### Equival\u00eancia de sistemas\n", "Diremos que um par de matrizes $(A,B)$ \u00e9 equivalente a um par de matrizes $(A_1,B_1)$ se existirem matrizes invers\u00edveis\n", "$P \\in \\mathbb{M}_{n\\times n}$ e $Q\\in \\mathbb{M}_{m\\times m}$ tal que:\n", "$$ PAP^{-1} = A_1 \\text{ e } PBK^{-1} = B_1 $$\n", "Esta \u00e9 uma *rela\u00e7\u00e3o de equival\u00eancia* no conjunto desses pares de matrizes e, de outra forma, tamb\u00e9m indicam que os sistemas lineares\n", "$$ \\begin{gather}\\dot{x} = Ax + Bu \\\\\n", "\\dot{z} = A_1 z + B_1 v\\end{gather}$$\n", "s\u00e3o obtidos um do outro pelas tranfosma\u00e7\u00f5es lineares $z=Px$ e $ v=Ku.$\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Teorema de decomposi\u00e7\u00e3o\n", "Suponha que $(A,B)$ n\u00e3o seja control\u00e1vel, e que o posto de $[B|AB|\\cdots|A^{n-1}B]$ seja $k < n$. Ent\u00e3o $(A,B)$ \u00e9 equivalente a um par $(A_1,B_1)$ que tem as seguintes formas:\n", "$$\\begin{gather}\n", "A_1 = \\begin{bmatrix} A_{11} & A_{21} \\\\ \\mathbf{0} & A_{22} \\end{bmatrix} \\text{ e }\n", "B_1 = \\begin{bmatrix}B_{11} \\\\ \\mathbf{0} \\end{bmatrix}\\end{gather}$$\n", "Com $A_{11} \\in \\mathbb{M}_{k\\times k}$, $B_{11}\\in \\mathbb{M}_{k\\times m}$ e $(A_{11},B_{11})$ control\u00e1vel." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Id\u00e9ia da prova\n", "Tome $k$ colunas linearmente independentes da matriz $[B|AB|\\cdots|A^{n-1}B]$ e juntamos mais $n-k$ colunas quaisquer formando a matriz $P$, de forma que $P$ seja invers\u00edvel.\n", "Verificamos as propriedades para $A_1=P^{-1}AP$ e $B_1= P^{-1}B$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exemplo:\n", "$$ A = \\begin{pmatrix} 1 & 1 \\\\ -1 & -1 \\end{pmatrix} \\text{ e } B= \\begin{pmatrix} 1 \\\\ -1 \\end{pmatrix}$$" ] }, { "cell_type": "code", "collapsed": false, "input": [ "#rascunho;\n", "import numpy as np\n", "P = np.array([[1,2],[-1,3]])\n", "Pinv = np.linalg.inv(P)\n", "Aold = np.array([[0,1],[0,0]])\n", "Bold = np.array([[1],[0]])\n", "A =np.dot(np.dot(P,Aold),Pinv)\n", "B= np.dot(P,Bold)\n", "print(A)\n", "print(B)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[[ 0.2 0.2]\n", " [-0.2 -0.2]]\n", "[[ 1]\n", " [-1]]\n" ] } ], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "A=5*A\n", "K = np.array([B,np.dot(A,B)])\n", "print(K)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[[[ 1.]\n", " [-1.]]\n", "\n", " [[ 0.]\n", " [ 0.]]]\n" ] } ], "prompt_number": 21 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }