{ "metadata": { "kernelspec": { "codemirror_mode": { "name": "ipython", "version": 3 }, "display_name": "IPython (Python 3)", "language": "python", "name": "python3" }, "language": "Julia", "name": "", "signature": "sha256:4289ed33ea6bf55fd88106027a0aa07d0e3b3bbc318eda85d1a3b843323ef357" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Crit\u00e9rio de Routh-Hurwitz\n", "====\n", "\n", "O teorema de Routh pode ser colocado numa forma mais c\u00f4moda usando a *matriz de Hurwitz*\n", "\n", "Operador de Hurwitz\n", "----\n", "S\u00e3o dadas duas sequ\u00eancias $\\alpha: \\mathbb{N} \\to \\mathbb{R}$ e $\\beta: \\mathbb{N} \\to \\mathbb{R}$. Definimos o operador de Hurwitz como $\\alpha * \\beta = \\gamma:\\mathbb{N} \\to \\mathbb{R}$ tal que\n", ":$$ \\gamma(i) = \\frac{-1}{\\beta(1)}\\begin{vmatrix} \\alpha(1) & \\alpha(i+1)\\\\ \\beta(1) & \\beta(i+1) \\end{vmatrix}$$" ] }, { "cell_type": "code", "collapsed": false, "input": [ "#operador de Hurwitz para duas sequencias finitas\n", "def hurwitz(a,b):\n", " if len(a) <= len(b):\n", " for i in range(len(a),len(b)):\n", " a.append(0)\n", " c=[0*u for u in b]\n", " else:\n", " for i in range(len(b),len(a)):\n", " b.append(0)\n", " c=[0*u for u in a]\n", " if b[0] == 0 :\n", " return c\n", " for i in range(len(c) -1):\n", " c[i] = (-1.0/b[0])*(a[0]*b[i+1] - a[i+1]*b[0])\n", " return c \n", " \n", " " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "print (hurwitz([1,1],[1,0]))\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[1.0, 0]\n" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "A sequ\u00eancia de Hurwitz\n", "----\n", "Se $\\gamma_1$ e $\\gamma_2$ s\u00e3o duas sequ\u00eancias de n\u00fameros reais, tal que $\\gamma_2(1) \\neq 0$. Definimos por recorr\u00eancia\n", "$$ \\gamma_{k+1} = \\gamma_{k-1}*\\gamma_{k}$$\n", "at\u00e9 que $\\gamma_k(1)=0$. A matriz de Hurwitz \u00e9 a matriz em que cada linha \u00e9 a sequ\u00eancia $\\gamma_k$." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Matriz de Hurwitz a partir de duas sequencias finitas\n", "def MatrizHurwitz(a,b):\n", " H=[a,b]\n", " while H[len(H)-1][0] != 0 :\n", " b2=hurwitz(H[len(H)-2],H[len(H)-1])\n", " H.append(b2)\n", " return H \n", " " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "#teste\n", "a=[1,2,6]\n", "b=[4,1]\n", "H = MatrizHurwitz(a,b)\n", "print (H)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[[1, 2, 6], [4, 1, 0], [1.75, 6.0, 0], [-12.714285714285714, -0.0, 0], [5.999999999999999, 0.0, 0], [-0.0, 0.0, 0]]\n" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Matriz de Hurwitz de um polin\u00f4mio $p(\\lambda)$\n", "Seja $p(\\lambda)= \\lambda^n +a_1\\lambda^{n-1} + \\cdots + a_n$ um polin\u00f4mio, construimos duas sequ\u00eancias\n", "$$ \\begin{gather}\n", "\\gamma_1 = 1 , a_2, a_4,\\dots, a_{2k} \\text{ com } a_{2k}=0 \\text{ se } 2k>n \\\\\n", "\\gamma_2 = a_1, a_3, \\dots, a_{2k+1} \\text{ com } a_{2k+1}=0 \\text{ se } 2k+1>n\n", "\\end{gather}$$\n", "e depois $\\gamma_{i+2} = \\gamma_i*\\gamma_{i+1}$ at\u00e9 $k$ tal que $\\gamma_{k+1}(0)=0$.\n", "A matriz $H = (h_{ij})$ com $h_{ij}=\\gamma_i(j)$ \u00e9 chamada matriz de Hurwitz.\n", "\n", "## Teorema de Routh-Hurwitz \n", "O polin\u00f4mio $p(\\lambda)$ \u00e9 est\u00e1vel se, e somente se, $\\gamma_{k}(0) > 0$ para todo $k \\in \\{1, \\dots, n+1\\}$ " ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }