{"cells":[{"cell_type":"markdown","metadata":{"id":"pvaYxt9Ibv1e"},"source":[" MAC0209 - Modelagem e Simulação \n","\n","Roberto M. Cesar Jr. (IME-USP)\n","\n","Roberto Hirata Jr. (IME-USP)\n","***\n"," Resoluções de EDOs: soluções analítica e numérica pelo método de Euler \n","***"]},{"cell_type":"markdown","metadata":{"id":"QklAi6a0bv1h"},"source":["# Método de Euler para solução de EDOs de primeira ordem"]},{"cell_type":"markdown","metadata":{"id":"ZH-CEat5bv1h"},"source":["O método de Euler é uma forma de resolver numericamente uma equação diferencial ordinária. Assume-se ser conhecidas a derivada de uma função que se quer encontrar (\"resolver\") e um valor inicial da equação a ser integrada. Por exemplo, no caso do movimento uniformemente acelerado:$$a=\\mbox{constante}, b=\\mbox{constante}$$\n","\n","$$v(t) = x'(t) = \\frac{dx(t)}{dt} = 2at + b$$ $$x(0)=0$$\n","\n","A ideia do método de Euler é substituir a derivada por uma aproximação de Taylor, desprezando-se os termos maiores que segunda ordem. Isto é:\n","\n","$$x'(t)\\sim \\frac{x(t+\\Delta t)-x(t)}{\\Delta t} = 2at + b$$\n","\n","Portanto, podemos escrever\n","\n","$$ x(t+\\Delta t) = x(t) + \\Delta t (2at + b) $$\n","\n","Isso permite implementar o algoritmo de Euler para calcular a posição futura $x(t+\\Delta t)$ a partir da posição atual $x(t)$. Nesse caso, $a, b, \\Delta t$ são parâmetros de entrada, bem como a posição inicial $x(0) = 0$.\n","\n","Observamos que, para esse caso, é possível calcular a solução $x(t)$ analiticamente: \n","\n","$$v(t) = x'(t) = \\frac{dx(t)}{dt} = 2at + b \\Rightarrow x(t) = a t^2 + bt + c$$"]},{"cell_type":"markdown","metadata":{"id":"4R6kRr8_bv1i"},"source":["# Implementanto o método de Euler"]},{"cell_type":"markdown","metadata":{"id":"rTMF7FwLbv1i"},"source":["\n","\n","Para a implementação ficar organizada, crie duas funções: \n","- nextXeuler(x,t,params,dt): que recebe um vetor de parâmetros iniciais, params, o tempo e a posição atual, t e x, respectivamente, e o delta de tempo, dt (note que com isso desacoplamos os índices do incremento). A função retorna a nova posição $x(t + \\Delta t)$ conforme explicado acima.\n","- nextXa(t,params): que recebe um vetor de parâmetros iniciais, params, e o tempo atual. A função retorna a nova posição $x_t$ de acordo com a equação integrada analiticamente: $ x(t) = at^2 + bt + c $.\n","\n","params pode ser implementada como uma lista $[a,b,c]$.\n","\n","Crie uma função main que itera essas duas funções entre os tempos 0s e 2s (com um dt de 0.1s) calcula e imprime a diferença absoluta entre elas (erro) e as grafique.\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"eM7FEYKZbv1j"},"outputs":[],"source":["# Implementa o exercício da integração de Euler de dx(t)/dt = 2at + b\n","\n"]},{"cell_type":"markdown","metadata":{"id":"TQ7GI7mObv1k"},"source":["# Exercício usando uma EDO de segunda ordem"]},{"cell_type":"markdown","metadata":{"id":"n_IkKEqnbv1l"},"source":["Escreva a solução para a EDO:\n","\n","$ \\frac{d^2x}{dt^2} = 6t$\n","\n"]},{"cell_type":"code","execution_count":null,"metadata":{"collapsed":true,"id":"wuzsXhtvbv1l"},"outputs":[],"source":["# Escreva sua solucao aqui."]},{"cell_type":"markdown","metadata":{"id":"e6EfBqLVbv1l"},"source":["Depois de ter escrito sua solução, compare com a resolução abaixo:\n"]},{"cell_type":"code","execution_count":null,"metadata":{"code_folding":[0],"id":"KLTjO0rZbv1m"},"outputs":[],"source":["# d2x / dt2 = 6t\n","\n"]},{"cell_type":"code","execution_count":null,"metadata":{"collapsed":true,"id":"AiNpCCuGbv1m"},"outputs":[],"source":[""]}],"metadata":{"anaconda-cloud":{},"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":false},"colab":{"name":"mac0209-movimento-1D-vazia.ipynb","provenance":[]}},"nbformat":4,"nbformat_minor":0}