{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "## Libreria de control\n", "try:\n", " from control.matlab import *\n", "except:\n", " !pip install control\n", " from control.matlab import *\n", " \n", "## Libreria para graphicar\n", "import matplotlib.pyplot as plt\n", "import numpy\n", "\n", "## Libreria para calculo simbolico\n", "import sympy\n", "\n", "## Libreria de control\n", "import control\n", "\n", "## Libreria para widgets\n", "import ipywidgets as widgets\n", "\n", "## Libreria para animaciones\n", "from matplotlib.animation import FuncAnimation\n", "plt.rcParams[\"animation.html\"] = \"html5\"#\"jshtml\"\n", "\n", "## Libreria para importar Iframe de Youtube\n", "from IPython.display import IFrame" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Sistemas híbridos\n", "_como combinar la naturaleza discreta en modelos_\n", "\n", "[tomado del curso robótica móvil](https://www.classcentral.com/course/conrob-404)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Suiches en todas partes \n", "\n", "Hasta el momento hemos estudiado modelos que se mantienen igual durante el tiempo. **Lo que no es verdad.**\n", "\n", "Hemos diseñado controladores que sirven para todos los propositos. **No es verdad en robótica.**\n", "\n", "Recordemos el enfoque de control basado en comportamiento. Necesitamos ser capaces de lidiar con todos estos tipos de fenomenos. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Los suiches aparecen como una necesidad\n", "\n", "Las condiciones en el mundo real cambián todo el tiempo. \n", "\n", "- Caminar\n", "- El rebote de una pelota" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Los suiches aparecen por diseño\n", "\n", "Realizar cambio en la manera como funcionan las cosas mejora su desempeño.\n", "\n", "- Caja de cambios\n", "- Diferente juego de engranes" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Problemas que aparecen a tener suiches\n", "\n", "- ¿Cómo podemos crear estos modelos?\n", "- ¿Son estables y tiene buen desempeño? \n", "- ¿Podemos diseñar dichos sistemas? \n", "- ¿Hay trampas? " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Automatas híbridos\n", "\n", "Necesitamos describir sistemas que contienen ambos mundos, la dinámica del sistema continuo y los cambios de la lógica discreta. \n", "\n", "Un automata híbrido es:\n", "\n", "**Una máquina de estados finitos (lógica discreta) que incluye dinámica continua**" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Modos, transiciones, guardias y resets\n", "\n", "- Supongamos un estado continuo para el sistema $x$ y como estaremos cambiando entre diferentes modos de operacion agreguemos un estado discreto $q$. La dinámica entonces será:\n", "\n", "$$\\dot{x}=f_q(x,u)$$\n", "\n", "- La transicion entre diferente modos discretos puede ser representada como una maquina de estados finitos.\n", "\n", "![](simple-fem.png)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Modos, transiciones, guardias y resets\n", "\n", "- La condiciones en la cuales ocurre una transición la llamamos condición, ejemplo: una transición de $q$ a $q'$ ocurre si:\n", " \n", " $$x\\in G_{q,q'}$$\n", "\n", "- Como componente final, vamos a permitir cambios radicales/abruptos en los estados mientras la transición ocurre, esto son llamads reset:\n", "\n", " $$x:=R_{q,q'}(x)$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Modelo de los automatas híbridos\n", "\n", "- Poniendo todo en conjunto obtenemos una respresentación muy rica del modelo, que se conoce como un automatata híbrido. \n", "\n", "![](primer-automata-hibrido.png)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Ejemplo del modelo de temperatura de un salón\n", "\n", "![](ah-temperatura.png)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Ejemplo del modelo de una caja de cambios\n", "\n", "![](ah-caja-cambios.png)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Ejemplo de un modelo basado en comportamiento\n", "\n", "![](ah-comportamiento.png)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# ¿ Qué puede salir mal cuando empezamos a cambiar entre diferentes controladores ?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Un sencillo sistema con dos modos\n", "\n", "$$\\dot{x}=A_1\\,x=\\left[\\array{-\\epsilon&1\\\\-2&-\\epsilon}\\right]x$$\n", "$$\\dot{x}=A_2\\,x=\\left[\\array{-\\epsilon&2\\\\-1&-\\epsilon}\\right]x$$\n", "\n", "$$\\text{eig}(A_i)=-\\epsilon\\pm1.41j$$\n", "\n", "- Ambos modos son asintóticamente estables. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Modo 1" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "T = numpy.linspace(0, 20, 201)\n", "dt = 0.1\n", "\n", "e = 0.05\n", "A1 = numpy.array([[-e,1],[-2,-e]])\n", "A2 =numpy.array([[-e,2],[-1,-e]])\n", "B = numpy.zeros([2,1])\n", "C = numpy.eye(2)\n", "D = numpy.zeros([2,1])\n", "\n", "#####\n", "sys1 = ss(A1, B, C, D)\n", "Y1,T = step(sys1,X0=numpy.array([[1],[1]]),T=T)\n", "\n", "fig, ax = plt.subplots();\n", "\n", "m, = ax.plot(Y1[0,0],Y1[0,1])\n", "plt.xlim(-2,2)\n", "plt.ylim(-2,2)\n", "ax.set_aspect('equal', 'box')\n", "\n", "def animate(i):\n", " m.set_data(Y1[0:i,0],Y1[0:i,1])\n", "\n", "ani = FuncAnimation(fig, animate, frames=len(T), interval=1000/10);" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(ani)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Modo 2" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sys2 = ss(A2, B, C, D)\n", "Y2,T = step(sys2,X0=numpy.array([[1],[1]]),T=T)\n", "\n", "fig, ax = plt.subplots();\n", "\n", "m, = ax.plot(Y2[0,0],Y2[0,1])\n", "plt.xlim(-2,2)\n", "plt.ylim(-2,2)\n", "ax.set_aspect('equal', 'box')\n", "\n", "def animate(i):\n", " m.set_data(Y2[0:i,0],Y2[0:i,1])\n", "\n", "ani = FuncAnimation(fig, animate, frames=len(T), interval=1000/10);" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(ani)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Automata Híbrido 1\n", "\n", "![](7-ejemplo-ha-1.png)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "x = numpy.array([[1],[1]])\n", "YHA1= numpy.array([[1,1]])\n", "A = A1\n", "for t in T:\n", " x = x + dt*numpy.matmul(A,x)\n", " YHA1 = numpy.concatenate((YHA1, x.T), axis=0)\n", " if(numpy.sign(YHA1[-1,1])!=numpy.sign(YHA1[-2,1])):\n", " A = A2\n", " if(numpy.sign(YHA1[-1,0])!=numpy.sign(YHA1[-2,0])):\n", " A = A1\n", "\n", "fig, ax = plt.subplots();\n", "\n", "m, = ax.plot(YHA1[0,0],YHA1[0,1])\n", "plt.xlim(-2,2)\n", "plt.ylim(-2,2)\n", "ax.set_aspect('equal', 'box')\n", "\n", "def animate(i):\n", " m.set_data(YHA1[0:i,0],YHA1[0:i,1])\n", "\n", "ani = FuncAnimation(fig, animate, frames=len(T), interval=1000/10);" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(ani)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Automata Híbrido 2\n", "\n", "![](7-ejemplo-ha-2.png)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "x = numpy.array([[1],[1]])\n", "YHA2= numpy.array([[1,1]])\n", "A = A1\n", "for t in T:\n", " x = x + dt*numpy.matmul(A,x)\n", " YHA2 = numpy.concatenate((YHA2, x.T), axis=0)\n", " if(numpy.sign(YHA2[-1,0])!=numpy.sign(YHA2[-2,0])):\n", " A = A2\n", " if(numpy.sign(YHA2[-1,1])!=numpy.sign(YHA2[-2,1])):\n", " A = A1\n", "\n", "fig, ax = plt.subplots();\n", "\n", "m, = ax.plot(YHA2[0,0],YHA2[0,1])\n", "plt.xlim(-200,200)\n", "plt.ylim(-200,200)\n", "ax.set_aspect('equal', 'box')\n", "\n", "def animate(i):\n", " m.set_data(YHA2[0:i,0],YHA2[0:i,1])\n", "\n", "ani = FuncAnimation(fig, animate, frames=len(T), interval=1000/10);" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(ani)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Resumen" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, axs = plt.subplots(1, 4)\n", "\n", "\n", "\n", "m1, = axs[0].plot(Y1[0,0],Y1[0,1])\n", "axs[0].set_aspect('equal', 'box')\n", "axs[0].set(xlim=(-2, 2), ylim=(-2, 2))\n", "axs[0].set_title('modo1')\n", "m2, = axs[1].plot(Y2[0,0],Y2[0,1])\n", "axs[1].set_aspect('equal', 'box')\n", "axs[1].set(xlim=(-2, 2), ylim=(-2, 2))\n", "axs[1].set_title('modo2')\n", "m3, = axs[2].plot(YHA1[0,0],YHA1[0,1])\n", "axs[2].set_aspect('equal', 'box')\n", "axs[2].set(xlim=(-2, 2), ylim=(-2, 2))\n", "axs[2].set_title('AH1')\n", "m4, = axs[3].plot(YHA2[0,0],YHA2[0,1])\n", "axs[3].set_aspect('equal', 'box')\n", "axs[3].set(xlim=(-200, 200), ylim=(-200, 200))\n", "axs[3].set_title('AH2')\n", "\n", "def animate(i):\n", " m1.set_data(Y1[0:i,0],Y1[0:i,1])\n", " m2.set_data(Y2[0:i,0],Y2[0:i,1])\n", " m3.set_data(YHA1[0:i,0],YHA1[0:i,1])\n", " m4.set_data(YHA2[0:i,0],YHA2[0:i,1])\n", "\n", "ani = FuncAnimation(fig, animate, frames=len(T), interval=1000/10);" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(ani)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Anotar\n", "\n", "- Combinando modos estables, el resultado del sistema híbrido puede ser inestable. \n", "- Combinando modos inestables, el resultado del sistema híbrido puede ser estable. \n", "- Diseña modos estables pero ten cuidado del riesgo de transforma el sistema híbrido en un sistema inestable. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Hay Peligros\n", "\n", "Subsistemas estables no garantizan que el sistema híbrido sea estable. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Sistemas suicheado\n", "\n", "Vimos que podemos destabilizar subsistemas estables a traves de una desafortunada serie de suiches\n", "\n", "Si ignoramos los _resets_ podemos escribir los sistemas híbridos como sistemas suicheados:\n", "\n", "$$\\dot{x}=f_\\sigma(x,u)$$\n", "\n", "donde $\\sigma$ es la señal de suicheado\n", "\n", "La señal de suicheado dicta in que modo discreto nos encontramos. \n", "\n", "$$\\sigma(t) \\in \\Sigma = \\{1,\\ldots \\,,p\\}$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Diferentes tipos de estabilidad\n", "\n", "Dado un sistema suicheado $\\dot{x}=f_\\sigma(x,u)$ tendremos estabilidad:\n", "\n", "- **universal**, asintoticamente estable:\n", " $$x \\to 0, \\forall\\sigma$$\n", "- **existencial**, asintoticamente estable:\n", " $$\\exists \\sigma \\quad\\text{s.t.}\\quad x\\to 0$$\n", " \n", "Si la señal de suicheado es generada por un automata híbrido:\n", "\n", "- **híbrida**, asintoticamente estable:\n", " $$x\\to 0$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Algunas consideraciones\n", "\n", "Si todos los modos son _AS_ entonces:\n", "\n", "- Tendremos un sistema existencialmente _AS_, ya que podemos escoger un modo y no cambiamos!\n", "- No siempre sera universalmente _AS_, vimos un contraejemplo. \n", "\n", "## Recomendaciones\n", "\n", "- Diseñar controladores estables para los subsistemas.\n", "- Diseña la logica suicheada en el automata híbrido.\n", "- Esta pendiente de las posibilidades de inestabilidad y probar, probar y probar. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# El modelo de la pelota que rebota en una superficie\n", "\n", "La ecuación del movimiento entre rebotes es:\n", "\n", "$$\\ddot{h}=-g$$\n", "\n", "$$\\dot{x}=\\left[\\array{0&1\\\\0&0}\\right]x + \\left[\\array{0\\\\-g}\\right] \\qquad y = \\left[\\array{1&0}\\right] x$$\n", "\n", "Los rebotes pueden ser modelados como _resets_:\n", "\n", "$$\\dot{h}:= - \\gamma \\dot{h}$$\n", "\n", "$$x:=\\left[\\array{1&0\\\\0&-\\gamma}\\right]x$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# El automata híbrido de la pelota\n", "\n", "![](ha-pelota.png)\n", "\n", "$$A=\\left[\\array{0&1\\\\0&0}\\right] \\qquad\n", "B=\\left[\\array{0\\\\-g}\\right] \\qquad \n", "R=\\left[\\array{1&0\\\\0&-\\gamma}\\right]$$\n", "\n", "Cuál sería la condición o guardia ?\n", "\n", "- $h\\leq0 \\to \\left[\\array{1&0}\\right] x \\leq0$\n", "- $h\\leq0 \\:\\text{y}\\: \\dot{h}\\leq0 \\to x \\leq 0$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Resolviendo el sistema\n", "\n", "Partiendo del sistema\n", "\n", "$$\\dot{x}=\\left[\\array{0&1\\\\0&0}\\right]x + \\left[\\array{0\\\\-g}\\right] \\qquad y = \\left[\\array{1&0}\\right] x$$\n", "\n", "y recordando la solución general para la ecuación en espacio de estados:\n", "\n", "$$y=C\\Phi(t,t_0)x(t_0) + C\\int_{t_0}^t \\Phi(t,\\tau)Bu(\\tau) d\\tau \\qquad \\Phi(t,\\tau)=e^{A(t-\\tau)}$$\n", "\n", "Analizando la matriz dinámica de este sistema tenemos:\n", "\n", "$$A^2 = A^3 = \\ldots = 0$$\n", "\n", "luego:\n", "\n", "$$e^{At} = \\sum_{k=0}^\\infty \\frac{At^k}{k!} = I + At + 0 = \\left[\\array{1&t\\\\0&1}\\right]$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Resolviendo el sistema\n", "\n", "$$y=C\\Phi(t,t_0)x(t_0) + C\\int_{t_0}^t \\Phi(t,\\tau)Bu(\\tau) d\\tau \\qquad \\Phi(t,\\tau)=e^{A(t-\\tau)}$$\n", "\n", "remplazamos:\n", "\n", "$$y=\\left[\\array{1&0}\\right]\\left[\\array{1&t-t_0\\\\0&1}\\right]\\left[\\array{h_0\\\\ \\dot{h}_0}\\right] + \\left[\\array{1&0}\\right]\\int_{t_0}^t \\left[\\array{1&t-\\tau\\\\0&1}\\right]\\left[\\array{0\\\\-g}\\right] d\\tau$$\n", "\n", "integrando:\n", "\n", "$$y = h_0 + \\dot{h}_0(t-t_0) - \\frac{g}{2}(t-t_0)^2$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Tiempo entre rebotes\n", "\n", "Partiendo de la solución y teniendo las condiciones $h_0=0$ y $t_0=0$\n", "\n", "$$y = h_0 + \\dot{h}_0(t-t_0) - \\frac{g}{2}(t-t_0)^2$$\n", "\n", "El tiempo para un primer rebote será:\n", "\n", "$$y(T)=0 = \\dot{h}_0T - \\frac{g}{2}T^2 = T \\left(\\dot{h}_0 - \\frac{g}{2}T\\right)$$\n", "\n", "solución:\n", "\n", "$$T=0 \\qquad T = \\frac{2\\dot{h}}{g}$$\n", "\n", "El tiempo entre rebotes será : $T = \\frac{2\\dot{h}}{g}$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Tiempo acumulado\n", "\n", "Siendo $\\gamma$ la fracción de energía recuperada por el sistema en el rebote tendremos y $v=\\dot{h}_0$ la velocidad inicial, para los tiempos de los rebotes. \n", "\n", "$$\\array{T_1 =& 2v/g \\\\ T_2=& 2v/g&+\\gamma 2v/g}$$\n", "\n", "Luego para el rebote $N$ tendremos :\n", "\n", "$$T_N = \\frac{2v}{g}\\sum_{k=0}^{N-1}\\gamma^k = \\frac{2v}{g}\\frac{1}{1-\\gamma} \\qquad \\gamma<1$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Rebotes infinito en tiempo finito\n", "\n", "$$T_\\infty = \\frac{2v}{g}\\frac{1}{1-\\gamma} < \\infty$$\n", "\n", "La pelota rebota infinitas veces en tiempo finito. Esto es más que una curiosidad matemática. \n", "\n", "- La simulaciones explotan.\n", "- Los sistemas híbrido quedan indefinido despues de ese momento. \n", "\n", "Este hecho se conoce como el fenómemo de Zenón.\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# El fenómeno/paradoja de Zenón\n", "\n", "Zenón de Elea (490ac-430ac)\n", "\n", "\n", "\n", "\"In a race, the quickest runner can never over take the slowest, since the pursuer must first reach the point whence the pursued started, so that the slower must always hold a lead.\" — as recounted by Aristotle, Physics VI:9, 239b15\n", "\n", "- La paradoja : Aquiles nunca alcanza a la tortuga.\n", "- La solución : La convergencia de la situación.\n", "- El problema : Se generan infinitos suiches en tiempo finito. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Ejemplo \n", "\n", "$$\\dot{x}=\\cases{-1& x > 0\\\\+1& x < 0}$$\n", "\n", "![](ejemplo-suicheo-infinito.png)\n", "\n", "- Este sistema suichea infinitamente muchas veces en un solo instante de tiempo\n", "- Zeno: Infinitos cambios en tiempo finito. \n", " - Tipo 1: En un solo instante\n", " - Tipo 2: No tipo 1 (rebote de una pelota)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Buenas y malas noticias\n", "\n", "- Zeno es un problema\n", "- Zeno Tipo 1 no es solo detectable, sino que que podemos lidiar con él de manera directa.\n", "- Zeno Tipo 2 es en general difícil de manejar. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Control modo deslizante \n", "\n", "![](ejemplo-suicheo-infinito.png)\n", "\n", "Para evitar los suicheo infinitos usaremos un control modo deslizante." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Superficie de deslizamiento\n", "\n", "![](control-modo-deslizante.png)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Deslizamiento\n", "\n", "![](deslizamiento.png)\n", "\n", "El deslizamiento ocurre cuando:\n", "\n", "$$\\frac{\\partial g}{\\partial x}f_1 < 0 \\qquad\\text{y}\\qquad \\frac{\\partial g}{\\partial x}f_2 > 0 $$\n", "\n", "La derivada de $g$ in la dirección $f$ se conoce como la derivada de Lie $L_fg$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Probando el Zeno tipo 1\n", "\n", "Podemos saber si tenemos zeno tipo 1 si ocurre el deslizamiento:\n", "\n", "\n", "$$\\frac{\\partial g}{\\partial x}f_1 < 0 \\qquad\\text{y}\\qquad \\frac{\\partial g}{\\partial x}f_2 > 0 $$\n", "\n", "o escrito de otra forma\n", "\n", "$$L_{f_1} g < 0 \\qquad\\text{y}\\qquad L_{f_2} g > 0 $$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Regularización\n", "\n", "![](regularizacion.png)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Modo Deslizante\n", "\n", "El modo deslizante se da cuando $dg/dt = 0$, luego\n", "\n", "$$\\frac{dg}{dt} = \\frac{\\partial g}{\\partial x} \\dot{x} = \\frac{\\partial g}{\\partial x}\\left(\\sigma_1f_1+\\sigma_2f_2\\right) = \\sigma_1L_{f_1}g+\\sigma_2L_{f_2}g$$\n", "\n", "de aquí:\n", "\n", "$$\\sigma_2 = -\\sigma_1 \\frac{L_{f_1}g}{L_{f_2}g}$$\n", "\n", "con lo anterior podemos calcular los valores $\\sigma_1$ y $\\sigma_2$ del modo deslizante. Teniendo en cuenta que:\n", "\n", "$$\\array{\\sigma_1,\\sigma_2 \\geq 0 &\\text{y}& \\sigma_1+\\sigma_2 = 1}$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Modo inducido\n", "\n", "De las ecuaciones anteriores podemos definir:\n", "\n", "$$\\sigma_2 = -\\sigma_1 \\frac{L_{f_1}g}{L_{f_2}g}$$\n", "\n", "$$\\sigma_1+\\sigma_2 = \\sigma_1 \\left(1-\\frac{L_{f_1}g}{L_{f_2}g}\\right)= 1$$\n", "\n", "de aquí:\n", "\n", "$$\\array{\\sigma_1 = \\frac{L_{f_2}g}{L_{f_2}g-L_{f_1}g}&&\\sigma_2 = -\\frac{L_{f_1}g}{L_{f_2}g-L_{f_1}g}}$$\n", "\n", "el modo inducido será:\n", "\n", "$$\\dot{x} = \\frac{1}{L_{f_2}g-L_{f_1}g}\\left(L_{f_2}g\\,f_1-L_{f_1}g\\,f_2\\right)$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Regularización de Zeno tipo 1\n", "\n", "" ] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.8" } }, "nbformat": 4, "nbformat_minor": 2 }