{"nbformat":4,"nbformat_minor":0,"metadata":{"anaconda-cloud":{},"colab":{"name":"mac0209-movimento-1D-stateSpace-Exercicios-Vazia.ipynb","provenance":[]},"kernelspec":{"display_name":"Python [default]","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.5.2"},"toc":{"base_numbering":1,"nav_menu":{},"number_sections":true,"sideBar":true,"skip_h1_title":false,"title_cell":"Table of Contents","title_sidebar":"Contents","toc_cell":false,"toc_position":{},"toc_section_display":true,"toc_window_display":true}},"cells":[{"cell_type":"markdown","metadata":{"id":"JAcSMzHxSxR5","colab_type":"text"},"source":[" MAC0209 - Modelagem e Simulação \n","\n","Roberto M. Cesar Jr. (IME-USP)\n","\n","Roberto Hirata Jr. (IME-USP)\n","***\n"," Exercícios - Movimento 1D usando Sistemas dinâmicos, State Vectors e State Space\n","***"]},{"cell_type":"markdown","metadata":{"id":"uEcmOVX9SxR7","colab_type":"text"},"source":["# Introdução: modelagem por sistemas dinâmicos e vetores de estado"]},{"cell_type":"markdown","metadata":{"id":"MhfLFFY0SxR8","colab_type":"text"},"source":["Equações diferenciais do movimento:\n","\n","$$\\frac{d^2x}{dt^2} = \\frac{dv}{dt} = a(t)$$\n","\n","$$\\frac{dx}{dt} = v(t)$$\n","\n","\n","\n","Euler:\n","\n","$$x(t+\\Delta t) = x(t) + v(t) \\; \\Delta t $$\n","\n","$$v(t+\\Delta t) = v(t) + a(t) \\; \\Delta t $$\n","\n","Assim, o movimento 1D da partícula pode ser representado por um vetor de estados \n","\n","$$\\vec{s} = (x,v)$$ \n","\n","O vetor de estados \n","\n","$$\\vec{s}(t) = (x(t),v(t))$$\n","\n","define a posição e a velocidade da partícula no instante de tempo $t$. \n","\n","A implementação do modelo de movimento da partícula com vetor de estados em uma modelagem por sistemas dinâmicos usando o algoritmo de Euler pode ser definida como:\n","\n","$$\\vec{s}(t+\\Delta t) = \\vec{s}(t) + \\vec{r}(t) \\; \\Delta t $$\n","\n","em que $\\vec{s}$ é o vetor de estados e $\\vec{r}$ é o vetor de taxas de variação."]},{"cell_type":"markdown","metadata":{"colab_type":"text","id":"XgnSRpe2jwdo"},"source":["## Exercício: $\\frac{dx}{dt} = 2t+1$"]},{"cell_type":"markdown","metadata":{"colab_type":"text","id":"11OVI5qe4BVs"},"source":["A partícula se movimenta segundo a equação:\n","\n","$$\n","v(t) = \\frac{dx}{dt} = 2 t + 1\n","$$\n","\n","$$ x(0) = 0$$\n","\n","**Solução analítica:**\n","\n","$$ x(t) = t^2 + t + c$$\n","\n","Como $ x(0) = 0 \\implies c = 0$\n","\n","**Solução de Euler:**\n","\n","$$\n","x(t + \\Delta t) = x(t) + (2 t + 1) \\Delta t\n","$$\n","\n","$$\n","v(t + \\Delta t) = 2 (t + \\Delta t) + 1 = (2 t + 1) + 2 \\Delta t = v(t) + 2 \\Delta t \n","$$\n","\n"," "]},{"cell_type":"markdown","metadata":{"id":"lECKyNJvSxR-","colab_type":"text"},"source":["### Exercício: Resolva na célula abaixo antes de olhar a solução"]},{"cell_type":"markdown","metadata":{"id":"q3VM_CJzSxR_","colab_type":"text"},"source":["O programa abaixo implementa a solucão desse problema **sem** usar a modelagem por sistemas dinâmicos e vetores de estado."]},{"cell_type":"code","metadata":{"id":"uZZq4c6NSxSA","colab_type":"code","colab":{}},"source":["# Escreva sua solucao aqui."],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"05WAdxBTSxSD","colab_type":"text"},"source":["### Resolução: Compare sua solução"]},{"cell_type":"code","metadata":{"colab_type":"code","id":"zqAj0xhX4BVu","colab":{}},"source":["# funcoes genericas que podem ser re-usadas em outros problemas\n","\n","import math\n","import matplotlib.pyplot as pyplot\n","import numpy as np\n","\n","# funcoes base para implementar o Euler. \n","# Deve-se implementar a funcao rates, que depende de cada modelo.\n","\n","def initStateVector(s):\n"," return(np.array(s))\n","\n","def updateStateVectorEuler(s,dt):\n"," return(s + rates(s,dt))\n","\n","# State Vector Trajectories store state space evolution. Uses list to init empty.\n","\n","def initSVTrajectory():\n"," return([])\n","\n","# append s a svt\n","def updateSVTrajectory(svt,s):\n"," svt.append(s)\n"," return(svt)\n","\n","def extractSVTrajectory(svt,i): # returns the trajectory as numpy array\n"," foo = np.array(svt)\n"," return(foo[:,i])\n"," \n","def plotCompareAnalyticalEuler(vxa, vva, vxe, vve, vtime):\n","\n"," fig, ax = pyplot.subplots()\n"," pyplot.plot(vtime, vxe, label='Euler',linestyle='',marker='o') \n"," pyplot.plot(vtime, vxa, label='Analytical') \n"," pyplot.title('Posição')\n"," ax.set_xlabel('Tempo (segundos)')\n"," ax.set_ylabel('Posição (metros)')\n"," pyplot.show(block=False)\n"," \n"," fig, ax = pyplot.subplots()\n"," pyplot.plot(vtime, vve,label='Euler',linestyle='',marker='o')\n"," pyplot.plot(vtime, vva,label='Analytical')\n"," pyplot.title('Velocidade')\n"," ax.set_xlabel('Tempo (segundos)')\n"," ax.set_ylabel('Velocidade (metros / segundo)')\n"," pyplot.show()\n","\n"," fig, ax = pyplot.subplots()\n"," pyplot.plot(vxe, vve,label='Euler',linestyle='',marker='o')\n"," pyplot.plot(vxa, vva,label='Analytical')\n"," pyplot.title('Dynamical System Trajectory')\n"," ax.set_xlabel('Posição (metros)')\n"," ax.set_ylabel('Velocidade (metros / segundo)')\n"," pyplot.show()\n","\n","\n","def erroTrajetorias(v1,v2,tipoErro):\n"," if (tipoErro == 0): # erro com sinal\n"," return(np.array(v1) - np.array(v2))\n"," elif (tipoErro == 1): # erro quadratico\n"," return((np.array(v1) - np.array(v2))**2)\n"," elif (tipoErro == 2): # erro em modulo\n"," return(fabs((np.array(v1) - np.array(v2))))\n"," \n","\n","def easyPlot(v,title):\n"," pyplot.figure()\n"," pyplot.plot(v)\n"," pyplot.title(title)\n"," pyplot.show()\n"," "],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"8WXAo3Z2SxSH","colab_type":"code","colab":{}},"source":["# solucao sem modelagem por sistemas dinamicos e vetor de estados\n","\n","# dx / dt = 2t + 1\n","\n"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"ByTpW_R3SxSK","colab_type":"text"},"source":["### Exercício: Resolva na célula abaixo antes de olhar a solução"]},{"cell_type":"markdown","metadata":{"id":"7QF3oENhSxSL","colab_type":"text"},"source":["Dado que temos a equação analítica da velocidade, vamos usá-la na atualização da coordenada da velocidade no vetor de estados. O programa abaixo implementa a solucão desse problema **com** a modelagem por sistemas dinâmicos e vetores de estado."]},{"cell_type":"code","metadata":{"id":"C32m3tPMSxSM","colab_type":"code","colab":{}},"source":["# Escreva sua solucao aqui."],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"qBSedGTiSxSP","colab_type":"text"},"source":["### Resolução: Compare sua solução"]},{"cell_type":"code","metadata":{"colab_type":"code","id":"dI_Ps3ixlezb","colab":{}},"source":[""],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"colab_type":"text","id":"ZzsRkUuw4BV1"},"source":["## Exercício: $\\frac{d^2x}{dt^2} = 6t$"]},{"cell_type":"markdown","metadata":{"colab_type":"text","id":"0yvVlvmZ4BV2"},"source":["Escreva a solução para a EDO:\n","\n","$ \\frac{d^2x}{dt^2} = 6t$"]},{"cell_type":"markdown","metadata":{"id":"zM2UjLv9SxSU","colab_type":"text"},"source":["### Exercício: Resolva na célula abaixo antes de olhar a solução"]},{"cell_type":"markdown","metadata":{"id":"gz7XjMFeSxSV","colab_type":"text"},"source":["O programa abaixo implementa a solucão desse problema **sem** usar a modelagem por sistemas dinâmicos e vetores de estado."]},{"cell_type":"code","metadata":{"code_folding":[],"id":"0fMHEa4pSxSV","colab_type":"code","colab":{}},"source":["# Escreva sua solucao aqui."],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"EEMA66WjSxSY","colab_type":"text"},"source":["### Resolução: Compare sua solução"]},{"cell_type":"markdown","metadata":{"id":"4oNc0of6SxSZ","colab_type":"text"},"source":["Depois de ter escrito sua solução, compare com a resolução abaixo:\n"]},{"cell_type":"code","metadata":{"colab_type":"code","id":"HuRRZz6Z4BV3","colab":{}},"source":[""],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"H5aEXF0MSxSc","colab_type":"text"},"source":["### Exercício: Resolva na célula abaixo antes de olhar a solução"]},{"cell_type":"markdown","metadata":{"id":"NOsdjhKiSxSd","colab_type":"text"},"source":["O programa abaixo implementa a solucão desse problema **com** a modelagem por sistemas dinâmicos e vetores de estado."]},{"cell_type":"code","metadata":{"code_folding":[],"id":"Odk1OQRiSxSd","colab_type":"code","colab":{}},"source":["# Escreva sua solucao aqui."],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"n4iKEtZDSxSf","colab_type":"text"},"source":["### Resolução: Compare sua solução"]},{"cell_type":"code","metadata":{"colab_type":"code","id":"xDtL5OZS4BV6","colab":{}},"source":[""],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"52fbwAPYSxSj","colab_type":"code","colab":{}},"source":[""],"execution_count":0,"outputs":[]}]}