Open-access Análise numérica e visualização de osciladores via Python

Numerical analysis and visualization of oscillators via Python

Resumo

Apresentamos nesse trabalho o uso da linguagem de programação Python e suas bibliotecas VPython, NumPy, Pandas e Matplotlib como recursos de desenvolvimento de simulações computacionais relacionadas a problemas de osciladores para serem aplicados nas aulas de física nos cursos de graduação em física, exatas e engenharias como uma alternativa de experimento virtual. A discussão foi feita no comparativo entre os resultados provenientes de soluções exatas e soluções aproximadas obtidas através de métodos numéricos e na construção de simuladores visuais em três tipos de osciladores: sistema massa-mola com rotação, pêndulo físico acoplado a uma mola e um sistema de oscilador acoplado. O estudo comparativo, entre as soluções exatas e as soluções aproximadas, foi feito usando os métodos numéricos de Euler, de Heun e o método de Runge-Kutta de quarta ordem (RK4), onde foi considerado três passos de tempo, δt=tn+1tn, de 0.2 e 0.05 para cada um dos métodos. Os resultados mostraram que o método de RK4 forneceu uma melhor aproximação da solução exata nos valores de posição e velocidade dos osciladores. A construção e visualização da animação dos osciladores foram feitas através da implementação computacional do método de Euler e o uso da biblioteca VPython, proporcionando um ambiente de aprendizado mais interativo.

Palavras-chave:
Programação Python; Métodos Numéricos; Osciladores; Simuladores Visuais


Abstract

In this work, we present the use of the Python programming language and its libraries VPython, NumPy, Pandas and Matplotlib as resources for developing computational simulations related to oscillator problems to be applied in physics classes in undergraduate courses in physics, exact sciences and engineering as an alternative to virtual experiments. The discussion is made by comparing the results from exact solutions and approximate solutions obtained through numerical methods and by building visual simulators in three types of oscillators: mass-spring system with rotation, physical pendulum coupled to a spring and a coupled oscillator system. The comparative study, between the exact solutions and the approximated solutions, was done using the numerical methods of Euler, Heun and the fourth-order Runge-Kutta method (RK4), where three time steps were considered, δt=tn+1tn, of 0.2 and 0.05. The results showed that the RK4 method presented a better approximation of the exact solution in the position and velocity values of the oscillators. The construction and visualization of the oscillator animation were done through the computational implementation of the Euler method and the use of the VPython library, providing a more interactive learning environment.

Keywords
Python Programming; Numerical Methods; Oscillators; Visual Simulators


1. Introdução

Do ponto de vista experimental, a visualização de eventos reais realizados em laboratório de física é algo que nem sempre é fácil de perceber, uma vez que tais experimentos ocorrem de maneira muito rápida, em intervalos de tempos tão curtos que, algumas vezes, estão aquém de serem observáveis pela percepção humana (da audição, visão, etc).

Relacionar os conceitos de física com o cotidiano nem sempre é uma tarefa fácil. A dificuldade de aprendizagem desta ciência é mostrada nos altos índices de desistência e reprovação nos vários níveis de ensino [1, 2, 3, 4]. No entanto, é possível aproximar o aluno do conhecimento através de atividades experimentais virtuais que favoreçam o desenvolvimento do espírito crítico, da elaboração de hipóteses, raciocínio lógico e uma melhor percepção da relação ciência e tecnologia [5].

Visando proporcionar um entendimento mais completo do fenômeno físico a partir de atividades experimentais, a utilização de novas tecnologias, tais como simulações computacionais, como ferramenta de clarificação de fenômenos físicos podem auxiliar com mais rapidez o entendimento do fenômeno de interesse. Simulações e animações oferecem ilimitado potencial de aplicação [6], o que lhes permite serem chamados de laboratórios virtuais, podendo incentivar e motivar a busca pelo entendimento de princípios teóricos das ciências naturais. A utilização das tecnologias computacionais também possibilita a criação de ambientes virtuais de aprendizagem, nos quais os estudantes podem interagir e colaborar de maneira ativa na exploração dos conceitos físicos.

A ferramenta computacional tem um papel muito importante para a pesquisa na área de física. Existe uma série de fenômenos físicos que são difíceis de serem reproduzidos em um laboratório com experimentos reais e também são extremamente complicados de serem solucionados do ponto de vista da matemática. Diante dessas dificuldades, a utilização de alguma liguagem de programação na computação científica se apresenta como um importante instrumento auxiliar no estudo de fenômenos físicos, pois ela serve como um recurso valioso para investigar e compreender esses fenômenos de maneira mais eficaz. A adoção dessa abordagem, além de facilitar a modelagem e simulação, também amplia as possibilidades de análise e interpretação dos resultados.

Vários pesquisadores sugerem que atividades mediadas por recursos tecnológicos e multimídias sejam aplicadas em sala de aula [7, 8, 9, 10, 11]. A utilização de uma ferramenta computacional nos permite ter uma análise mais completa de um determinado fenômeno. No estudo de oscilação não amortecida e amortecida, por exemplo, é possível obter de maneira rápida informações acerca do seu movimento através de gráficos do deslocamento, velocidade e energia por meio de análise numéricas, como feito nas Refs.[12, 13, 14, 15, 16, 17, 18].

Uma linguagem de programação que é usada como referência no campo da física é o Python. Esta linguagem conta com pacotes para análise e manipulação de dados com a biblioteca Pandas, além de pacotes avançados matemáticos, o NumPy, incluindo funcionalidades gráficas como a Matplotlib, que auxiliam na criação de códigos para, por exemplo, resolver numericamente problemas de equações diferenciais [19]. O Python é apresentado como uma linguagem de programação fácil de aprender e robusta, o que se torna apropriada para aqueles com pouca ou nenhuma experiência em programação além de ser muito adequada para criar modelos interativos de sistemas físicos em 3D utilizando a biblioteca VPython [20]. Outras biliotecas como o Sympy e o Manim também são utlizadas respectivamente para manipulação simbólica, a qual se apresenta como uma ferramenta alternativa a sistemas como Mathematica ou Maple, e construções de animações gráficas, projetada para criar animações de alta qualidade para matemática, ciências e tópicos relacionados a dados. Apresentamos na Tab. 1 um resumo dessas bibliotecas e suas especificidades.

Tabela 1
Bibliotecas do Python.

Este trabalho tem como finalidade apresentar o uso da linguagem de programação Python e suas bibliotecas VPython, NumPy, Pandas e Matplotlib como recursos de desenvolvimento de simulações computacionais relacionadas a problemas de osciladores e para serem aplicados nas aulas de física nos cursos de graduação em física, exatas e engenharias como uma alternativa de experimento virtual. A discussão se baseia na construção de simuladores visuais e no comparativo entre os resultados provenientes de soluções exatas de equações diferenciais de segunda ordem e soluções aproximadas obtidas através de métodos numéricos em três tipos de osciladores: sistema massa-mola com rotação, pêndulo físico acoplado a uma mola e um sistema de oscilador acoplado. Para a implementação computacional desses osciladores, os métodos numéricos utilizados foram o método de Euler, o método de Heun e o método de Runge-Kutta de quarta ordem.

O método de Euler foi introduzido por Leonhard Paul Euler em seu livro em 1768 [21]. Esse método, também conhecido como método da reta tangente, é utilizado na resolução aproximada de equações diferenciais ordinárias de primeira ordem com um problema de valor incial dado, utilizando a descrição da série de Taylor [22, 16].

O método de Heun, também conhecido como método Preditor-Corretor, é uma versão aperfeiçoada do método de Euler [23]. O método, apresenta uma abordagem para melhorar a estimativa da inclinação por meio da utilização de duas derivadas, uma no ponto inicial e outra no ponto final, resultando em uma melhor aproximação em comparação ao valor real.

Os métodos de Runge-Kutta foram inicialmente desenvolvidos por C. Runge em 1895 [24], enquanto W. Kutta estendeu esta classe de métodos em 1901 [25]. Os métodos representam toda uma família de algoritmos para a solução numérica de problemas de valor inicial para EDOs de primeira ordem ou sistemas destes fundamentados na comparação de um polinômio de Taylor apropriado para eliminar o cálculo das derivadas, efetuando diversas avaliações da função a cada passo [26, 27]. Dentre esses métodos, o de quarta ordem (RK4) é um dos mais usados para obter soluções numéricas aproximadas. Embora seja mais complexo do que o método de Euler e o método de Heun, o método RK4 é também mais preciso em seus resultados.

O ponto chave desenvolvido nesse trabalho integra Física, métodos numéricos e física computacional, o qual relaciona diretamente o conhecimento tradicional às novas técnicas de análise e estudo em física. Diante disso, o artigo foi organizado da seguinte forma: na próxima seção, são apresentados os modelos de osciladores utilizados para o estudo. Na seção 3, apresentamos os métodos numéricos utilizados na investigação. Na seção 4 os resultados e discussões acerca dos métodos utilizados e a construção dos simuladores visuais para os diferentes modelos de osciladores e por fim, na seção 5, as conclusões obtidas.

2. Osciladores

Quando o movimento se repete de maneira regular no decorrer do tempo, é considerado periódico, e o intervalo entre duas ocorrências equivalentes é denominado período do movimento. Os sistemas físicos que realizam esse tipo de movimento são chamados deosciladores.

Para uma partícula que executa um movimento periódico, a força resultante que atua sobre ela é nula na posição de equilíbrio. Durante a oscilação, a posição da partícula, a sua velocidade e a aceleração variam periodicamente com o tempo e, consequentemente, a força que atua sobre ela também varia. A descrição matemática desse tipo de movimento envolve o uso de funções trigonométricas senos e cossenos ou de combinações dessas funções, conhecidas como funções harmônicas, o que leva o movimento periódico a ser conhecido como movimento harmônico.

O movimento oscilatório é um importante tópico de estudo na física, devido à frequencia que este tipo de evento pode ocorrer, desde situações simples como o movimento de uma cadeira de balanço, como em situações mais sofisticadas, como em circuitos elétricos oscilantes RLC [28, 29] e na emissão de sons em instrumentos musicais [30, 31], por exemplo. Os mais variados estudos de sistemas oscilatórios foram feitos usando simulações computacionais e cálculo numérico apartir da linguagem de programação Python e sua biblioteca gráfica VPython. Entre eles, temos a análise do movimento do pêndulo simples sob a influência de uma força externa [32]; a visão geral do uso do VPython para modelar e simular alguns fenômenos simples na física com visualização explícita dos comportamentos desses fenômenos sob condições variadas [33]; o estudo de um pêndulo harmônico como exemplo didático de integração de laboratório construído com peças LEGO e implemetação númérica Python [34]; abordagem computacional para resolver o problema do oscilador harmônico simples usando o método de Runge-Kutta [35]; investigação da relação entre sincronização de pêndulo simples e duplo e sincronização do mundo real implementado em Python [36]; e o estudo do caos determinístico através da simulação do movimento de um pêndulo duplo, permitindo a visualização de trajetórias intrincadas e a análise de padrões emergentes com as linguagens de programação Python e Fortran [37].

Nesta seção, apresentamos e discutimos os três modelos de osciladores utilizados no trabalho: sistema massa-mola com rotação, pêndulo físico acoplado a uma mola e um oscilador harmônico acoplado. Trataremos aqui de suas principais características e análise acerca de suas equações de movimento.

2.1. Modelo 1: sistema massa-mola com rotação

Um oscilador harmônico pode ser representado por mola de constante elástica k, de massa desprezível, que tem uma extremidade fixada numa parede e a outra, presa a um disco de massa m e raio R, que rola sem deslizar numa superfície horizontal, como mostrado na Fig. 1. Nesta situação, existem duas forças relevantes que atuam sobre o corpo: uma é resultado do estiramento ou compressão da mola e a outra é devido ao atrito na superfície, causando o movimento de rolamento do disco. Quando a mola está relaxada, a força resultante sobre o disco é nula e o sistema está em equilíbrio.

Figura 1
Oscilação de um disco preso a uma mola sem deslizamento.

O disco se move em movimento harmônico simples quando é deslocado de sua posição de equilíbrio e depois liberado, seguindo uma trajetória retilínea unidirecional e executando um movimento periódico de translação e rotação. A força que atua na mola é uma força restauradora linear, lei de Hooke, dada pelo produto entre a constante elástica k da mola e o deslocamento x do bloco em torno de sua posição de equilíbrio, F=kx. Sabemos também que a Segunda Lei do Movimento de Newton nos diz que F=ma, sendo assim

(1)ma=kxfatrito.

Note que, para o caso da força de atrito, fatrito, ser nula teremos, na equação Eq01, o problema físico bem conhecido que é o oscilador harmônico simples. Portanto, nesse caso, o disco executará apenas um movimento periódico de translação, pois a força de atrito é responsável pelo rolamento do disco. A força de atrito estatico é obtida aplicando a segunda na lei na forma angular, τ=Iα. Sendo assim, temos que o torque, τ, aplicado no centro de massa do disco é dado por τ = = Rfatrito, onde α = a/R é a aceleração angular e I = mR2/2 é o momento de inércia do disco, então fatrito = ma/2. Portanto, a equação Eq01 assume a seguinte forma

(2)a(t)=2k3mx(t)d2x(t)dt2=2k3mx(t),

que é a equação diferencial para o sistema cuja solução pode ser escrita na seguinte forma

(3)x(t)=xmcos(ω0t).

Essa é a equação de posição x(t) para corpo em relação a posição de equilíbrio, na qual xm é a amplitude do movimento e ω0 é a frequência angular,

(4)ω0=2k3m.

A velocidade v(t) é obtida por v(t) = dx(t)/dt, assim

(5)v(t)=xmω0sen(ω0t).

2.2. Modelo 2: pêndulo físico acopladoa uma mola

Um pêndulo físico é caracterizado por oscilações semelhantes às de um pêndulo simples, mas não pode ser representado como uma massa pontual suspensa por um fio. Em vez disso, a distribuição de massa do objeto deve ser considerada na equação de movimento, o que é feito por meio do momento de inércia. Este parâmetro é fundamental, pois descreve a forma como a massa está distribuída em relação ao ponto de oscilação.

Considere que uma barra rígida de comprimento L e massa mb está suspensa, podendo girar em torno do ponto O, por uma das suas extremidades. Na outra extremidade, a barra está ligada a um disco de raio R e de massa md. Uma mola de constante k, que está na posição relaxada quando a barra se encontra na posição vertical, é conectada à barra a uma distância d abaixo de seu ponto de suspensão. A barra é deslocada para a esquerda, até um ângulo θ com a direção vertical, e abandonada a partir do repouso, a qual descreve um arco de circunferência em um movimento harmônico simples, como mostra a Fig. 2(a).

Figura 2
Diagrama ilustrativo para um pêndulo físico acoplado a uma mola.

A barra está sujeita à força peso Pb, aplicada no centro de massa da barra, à distância L/2 do ponto O, e também à força elástica exercida pela mola Fel aplicada a uma distância d do ponto O, na direção horizontal. Temos também a força peso Pd, aplicada no centro de massa do disco, à distância R + L do ponto O, como mostrado na Fig. 2(b). Somente as componentes dessas forças, na direção perpendicular à barra, exercem torque. Nesta situação, temos a componente perpendicular da força peso da barra dada por mbgsen(θ) e a componente perpendicular da força peso do disco dada por mdgsen(θ), como mostra a Fig. 2(c). O torque resultante, τR, no pêndulo é dado pela contribuição do torque exercido pela componente perpendicular da força peso da barra τb = (L/2)mbgsen(θ), contribuição do torque exercido pela força componente perpendicular da peso do disco τd = (R + L)mdgsen(θ) e pela contribuição da força elástica aplicada pela mola τF = Feladcos(θ). Então,

(6)τR=mbgL2sen(θ)+mdg(R+L)sen(θ)+Feladcos(θ),

a força exercida pela mola, é Fel = kx, onde x é a deformação da mola e tem a forma x = hsen(θ). Assim:

(7)τR=mbgL2+mdg(R+L)+kd2cos(θ)sen(θ).

Como o torque é restaurador, a equação do movimento será dada por τR = −. Logo

(8)α=1ImbgL2+mdg(R+L)+kd2cos(θ)sen(θ)

Para pequenas amplitudes, onde θ ˂˂ 1, temos que cos(θ) ≈ 1 e sen(θ) ≈ θ. Portanto, a equação(8) pode ser escrita como

(9)α(t)=d2θ(t)dt2=(mb+2md)gl+2mdgR+2kd22Iθ(t)

que é a equação diferencial para o sistema, onde I é o momento de inércia total em relação ao ponto O dado por

(10)I=13mbL2+12mdR2+mdR+L2.

A equação(9) pode ser resolvida por

(11)θ(t)=θMcos(ω0t),

que é a equação da posição θ(t) em relação à posição de equilíbrio, ponto O, onde θM é a amplitude do movimento e ω0 é a frequência natural do movimento chamada de frequência angular,

(12)ω0=(mb+2md)gl+2mdgR+2kd22I.

A velocidade angular ω(t) é obtida por ω(t) = (t)/dt, assim

(13)ω(t)=θMω0sen(ω0t),

essa é a velocidade em função do tempo no qual o pêndulo físico gira em torno da posição de equilíbrio, ponto O, como mostrado na Fig. 2.

2.3. Modelo 3: oscilador acoplado

Osciladores acoplados são osciladores conectados de tal forma que a energia pode ser transferida entre eles. Considere dois corpos de massas iguais a m que podem se mover sem atrito sobre um trilho e estão presos por meio de duas molas de constantes elásticas k1 e k2, conforme mostrado na Fig. 3. Suponha que a posição de equilíbrio do sistema esteja em cada mola não esticada, sendo x1 o deslocamento da primeira massa em relação ao seu equilíbrio e x2 o deslocamento da segunda massa do seu equilíbrio. As forças F1 e F2 são forças restauradoras que obedecem a Lei de Hooke, como visto no Modelo 1. A força que o corpo 1 sente devido as ações das molas é −k1x1 + k2(x2x1) e para o corpo 2 temos que a força é dada por −k2(x2x1). Estas forças resultam em duas equações diferenciais quando a segunda lei de Newton é aplicada em cada um dos corpos, −(k1 + k2)x1 + k2x2 e ma2 = k2x1k2x2. Portanto

Figura 3
Oscilação para o sistema acoplado.
(14)d2x1(t)dt2=k1+k2mx1(t)+k2mx2(t)

e

(15)d2x2(t)dt2=k2mx1(t)k2mx2(t).

Estas equações são extremamentes exaustivas de se obter as soluções, o que não é a proposta desse trabalho. Os detalhes das soluções podem ser vistas no Apêndice [apdA]A. As soluções para x1(t) e x2(t) são dadas respectivamente por

(16)x1(t)=A1cos(ω1t)+A2cos(ω2t)

e

(17)x2(t)=B1cos(ω1t)+B2cos(ω2t),

com A1, A2, B1=k1+k12+4k22A1/2k2 e B2=k1k12+4k22A2/2k2 sendo as amplitudes do movimento. Para as frequências de oscilações ω1 e ω2 temos respectivamente

(18)ω1=±k1+2k22mk12+4k222m1/2
(19)ω2=±k1+2k22m+k12+4k222m1/2

e as velocidades v1(t) e v2(t) são dadas por

(20)v1(t)=ω1A1sen(ω1t)ω2A2sen(ω2t)

e

(21)v2(t)=ω1B1sen(ω1t)ω2B2sen(ω2t),

Podemos ver ainda os vínculos do sistema através de dois modos de vibração, o simétrico e o anti-simétrico. Perceba que, nas equações(16) e (17), sempre que apenas um dos coeficientes for diferente de zero, o movimento envolverá oscilação harmônica simples (mas pertencente a ambos os corpos ao mesmo tempo). Sendo assim, para o caso de A2 = 0 obtemos B2 = 0 e ax1(t) = x2(t) = A1cos(ω1t), onde a=k1+k12+4k22/2k2, temos um modo de vibração simétrico. Observamos então como se tivéssemos um único oscilador. Já para o caso de A1 = 0 obtemos B1 = 0 e bx1(t) = x2(t) = A2cos(ω2t), onde b=k1k12+4k22/2k2, temos um modo de vibração anti-simétrico, ou seja, ambos os corpos se movem em sentidos opostos. Como frequências mais altas correspondem a energias mais altas, o modo assimétrico tem uma energia mais alta.

3. Métodos Numéricos

Dizemos que uma equação diferencial ordinária (EDO) é de primeira ordem se apenas a primeira derivada da função desconhecida aparece na equação. Se quisermos encontrar uma solução para uma equação diferencial que cumpra um determinado valor inicial, dizemos que temos um problema de valor inicial do tipo

(22)dfdx=f(x,y), y(x=x0)=y0.

Para o caso de uma EDO de segunda ordem podemos reescrevê-la na forma de duas EDO’s de primeira ordem. Por exemplo, sabemos que em um problema de Física a aceleração é a segunda derivada temporal da posição, assim a = d2x/dt2 e a velocidade é a primeira derivada temporal da posição v = dx/dt, então é possível estudar o sistema de interesse através do par de EDO’s de primeira ordem a = dv/dt e v = dx/dt com suas devidas condições iniciais.

Mesmo quando sabemos que o problema de valor inicial tem solução, não é necessariamente possível resolver o problema utilizando uma fórmula ou uma receita de cálculo. Sendo assim, temos que recorrer a outros meios, como métodos numéricos, para dizer algo sobre as soluções obtidas. Diante disso, discutiremos aqui três métodos numéricos para resolver sistemas físicos regidos por EDO de primeira e segunda ordem.

3.1. Método de Euler

Considere um problema que obedece uma equação diferencial ordinária f(x, y) e condição de contorno y(x = x0) = y0 como a equação ME:Eq01, onde y é a variável dependente e x é a variável independente. Podemos encontrar uma solução aproximada para essa equação, f(x, y), dividindo o intervalo [x0, xf ] em um grande número de pequenos intervalos de igual largura δx que é denominado tamanho do passo, então para n intervalos temos o passo δx = xn+1xn. Dessa forma, podemos inicialmente aplicar na equação diferencial f(x, y) os valores iniciais f(x0, y0) para descobrir uma primeira aproximação. Sendo assim, a estratégia do método de Euler consiste em calcular y1 = y0 + f(x0, y0)δx, que é, no primeiro passo, a aproximação y1 da solução exata y(x1) no ponto x1 no ponto x1 na equação(22). Em seguida, y2 = y1 + f(x1, y1)δx, que é, no segundo passo, a aproximação y2 da solução exata y(x2) no ponto x2. Continuando esse processo sucessivas vezes chegaremos a uma fórmula geral

(23)xn+1=xn+δx

e

(24)yn+1=yn+f(xn,yn)δx

o qual nos dá uma solução aproximada da solução exata para a equação (22). Esse procedimento é chamado método de Euler. A Fig. 4 mostra um fluxograma que nos permite visualizar o processo feito nas interações.

Figura 4
Fluxograma método de Euler.

Temos que para uma análise numérica em um computador o processo deve seguir as seguintes instruções: (i) entrar com as condições iniciais x = x0 e y(x0) = y0, o passo δx e a função f(xn, yn); (ii) enquanto x ˂ xf as equações (23) e (24) são utilizadas para armazenar os dados; x ˂ xf caso contrário, com os dados obtidos são plotados os gráficos ou guardados em uma lista (tabela de dados).

3.2. Método de Heun

Para uma melhor estimativa dos resultados numéricos, temos o método de Heun que é uma versão aperfeiçoada do método de Euler. O método consiste numa estratégia que envolve a utilização da média de duas derivadas, uma no ponto inicial e outra no ponto final. Sendo assim, modifica-se a fórmula do método Euler, equação (24), para

(25)yn+1=yn+12f(xn,yn)+f(xn+1,yn+1)δx.

Combinando com a equação (24), obtemos o método de Heun na forma

(26)yn+1=yn+12[f(xn,yn)+f(xn+1,yn+f(xn,yn)δx)]δx.

Esse método apresenta um número maior de cálculos pois a equação (26) é calculada em cada interação garantindo então uma melhor estimativa para o resultado numérico quando comparando com a equação (24).

Uma análise numérica com a implementação do método de Heun é feita da seguinte forma em um computador: (i) entrar com as condições iniciais x = x0 e y(x0) = y0, o passo δx e a função f(xn, yn); (ii) é calculado f(xn, yn); (iii) em seguida é feita a estimativa de yn+1 usando o método de Euler; (iv) é calculado f(xn+1, yn+1); (v)enquanto x ˂ xf as equações (25) e (26) são utilizadas para armazenar os dados; (vi) caso contrário, com os dados obtidos são plotados os gráficos ou guardados em uma lista (tabela de dados). A Fig. 5 apresenta um fluxograma que ilustra a implementação do método de Heun.

Figura 5
Fluxograma método de Heun.

3.3. Método de Runge-Kuta de quarta ordem

Um dos métodos numéricos mais utilizado para obter soluções aproximadas de equações diferenciais do tipo (22) são os métodos de Runge-Kutta, que são constituídos por uma família de métodos iterativos implícitos e explícitos. Os métodos de Runge-Kutta incluem o método de Euler, dada na equação (24), nesse caso temos o método de Runge-Kutta de primeira ordem e o método de Heun, equação (26), que é o método de Runge-Kutta de segunda ordem [27]. Entre os métodos destacamos aqui o método de Runge-Kutta de quarta ordem (RK4), onde a vantagem desse método está em evitar os cálculos de derivadas de ordem superior, o qual exigiria um significativo esforço computacional além do que são problemas extremamentes complexos de se obter soluções analíticas.

No método RK4, a variável independente x da equação (22) é incrementada de δx (passo) em etapas e o novo valor da variável dependente y é calculado ao final de cada etapa de acordo com

(27)yn+1=yn+16K1+2K2+2K3+K4δx

e

(28)xn+1=xn+δx,

onde

(29)K1=fxn,yn,K2=fxn+12δx,yn+12K1,K3=fxn+12δx,yn+12K2 eK4=fxn+δx,yn+K3.

Note que no conjunto das funções K em (29), K2 depende de K1 para determinar o valor de y no ponto xn + δx/2 através do método de Euler, K3 é dependente de K2 e K4 depende de K3. Além disso, o conjunto de equações RK:Eq03 envolvem aproximações das derivadas no ponto médio do intervalo entre xn e xn+1.

A implementação computacional do método RK4 é apresentada em um fluxograma na Fig. 6 e é feita da seguinte forma: (i) entrar com as condições iniciais x = x0 e y(x0) = y0, o passo δx e a função K1 = f(xn, yn); (ii) é computado as funções K2, K3 e K4 usando o método de Euler; (iii) em seguida é feita a estimativa de f¯(xn,yn); (iv) é calculado yn+1; (v) enquanto x ˂ xf as equações (27) e (28) são utilizadas para armazenar os dados; (vi) caso contrário, com os dados obtidos são plotados os gráficos ou guardados em uma lista (tabela de dados). O erro de truncamento local, erros causados pelo tipo de técnica empregada para a atualização do valor de y no determinado passo, do método RK4 é O(δx5), enquanto que para o método de Euler é O(δx2) e o método de Heun é de O(δx3).

Figura 6
Fluxograma método RK4.

4. Resultados e Discussão

Nessa seção apresentamos e discutimos, em duas partes, os resultados obtidos para os três modelos dos osciladores, Modelos 2.1, 2.2 e 2.3. A primeira parte, seção 4.1, trata-se do estudo numérico, onde é apresentado o comparativo entre os resultados provenientes de soluções exatas e soluções aproximadas obtidas através do métodos numéricos apresentados na seção 3. A segunda parte, seção 4.2, traz a discussão sobre a construção das animação para os simuladores visuais dos modelos.

4.1. Estudo numérico dos osciladores

Em todo estudo numérico dos osciladores, Modelos 2.1, 2.2 e 2.3, utilizamos três métodos numéricos implementado na linguagem de programação Python. O estudo foi desenvolvido na plataforma Anaconda Navigator e o Jupiter Lab versão 3.6.3, o qual utilizamos os pacotes NumPy, Pandas e Matplotilib como recursos fundamentais nesse trabalaho. A biblioteca NumPy é um pacote fundamental para computação científica em Python, ela fornece uma variedade de rotinas para operações rápidas de cálculos numéricos [38]. Enquanto a biblioteca Pandas fornece estrutura de dados de alto desempenho e ferramentas de análise de dados, o qual ajuda a trabalahar com dados armazenados em planilhas ou bancos de dados [39]. A bilioteca Matplotlib é utilizada para criação e visualizações de gráficos de dados em geral, essa biblioteca faz uso intenso de NumPy e outros códigos de extensão para fornecer bom desempenho [40].

4.1.1. Estudo numérico do Modelo 2.1

Iniciamos o estudo numérico apartir do oscilador harmônico simples, Modelo 2.1, onde escrevemos a equação Eq02 na forma de duas equações diferenciais de primeira ordem, uma para a aceleração a(t) = dv(t)/dt = f1(x, v, t) e outra para a velocidade v(t) = dx(t)/dt = f2(x, v, t). Dessa forma, fazendo a mudança yv e xt temos que para o método de Euler (E) a equação (24) assume a seguinte forma

(30)vn+1E=vn+f1(xn,vn,tn)δt

e a outra equação é obtida por yx e xt, também na equação ME:Eq03, assim

(31)xn+1E=xn+f2(xn,vn,tn)δt.

As equações (30) e (31) são, respectivamente, as equações numéricas para velocidade e posição baseadas no método de Euler usadas no estudo do Modelo 2.1. Para o método de Heun (H), equação (25), as equações numéricas para o estudo são dadas por

(32)vn+1H=vn+12f1(xn,vn,tn)+f1(xn+1,vn+1,tn+1)δt,

e

(33)xn+1H=xn+12f2(xn,vn,tn)+f2(xn+1,vn+1,tn+1)δt.

Fazendo as mesmas mudanças no método RK4, temos as seguintes equações para a análise numérica

(34)vn+1RK4=vn+16K1v+2K2v+2K3v+K4vδt

e

(35)xn+1RK4=xn+16K1x+2K2x+2K3x+K4xδt.

Onde as funções Kiv, i = 1, 2, 3, e 4, são dadas por

K1v=f1xn,vn,tn,K2v=f1xn+0.5K1x,vn+0.5K1v,tn+0.5δt,K3v=f1xn+0.5K2x,vn+0.5K2v,tn+0.5δt,K4v=f1xn+K3x,vn+K3v,tn+δt.

E para Kix, i = 1, 2, 3 e 4, temos que

K1x=f2xn,vn,tn,K2x=f2xn+0.5K1x,vn+0.5K1v,tn+0.5δt,K3x=f2xn+0.5K2x,vn+0.5K2v,tn+0.5δt,K4x=f2xn+K3x,vn+K3v,tn+δt.

Uma vez obtida as equações de posição e velocidade dos três métodos numéricos, equações (30) e (31) para o método de Euler, equações (32) e (33) para o método de Heun, e equações (34) e (35) para o método de RK4, usamos os parâmetros de massa m = 0.8, constante elástica da mola k = 4.0 e condições iniciais t = 0, x(0) = 2.0 e v(0) = 0.0 para obtemos os dados numéricos do modelo e compará-lo com o resultado analítico. Os passos de tempo δt = tn+1tn usados foram de 0.2 e 0.05 sendo respectivamente 50 e 200 interações para um parâmento de tempo máximo t = tmax = 10. O primeiro resultado que obtivemos é apresentado na Fig. 7, que mostra o plot das oscilações da posição x(t), Fig. 7(a), e da velocidade v(t), Fig. 7(b) para o passo δt = 0.2. Em ambas figuras, respectivamente posição x(t) e velocidade v(t), temos a solução analítica, equações (3) e (5), em preto (linha contínua), método de Euler, equações (32) e (33), em azul escuro (linha tracejada), método de Heun, equações Res:Eq04 e Res:Eq05, em vermelho (linha traço-ponto) e método de RK4, equações (34) e (35), em azul claro (linha pontilhada), para o passo δt = 0.2. Note que na Fig. 7 a solução numérica do método de RK4 praticamente coincide com o resultado analítico e uma melhor forma de observamos esses resultados é olhar a Tab. 2.

Tabela 2
Comparação para as posições x(t) do Modelo 2.1 obtidas analiticamente, equação (3), e pelos métodos de Euler, equação (31), Heun, equação (33), e RK4, equação (35), nos instantes de tempos t = 0, 3, 6 e 9. Na tabela temos, de cima para baixo, o passo δt = 0.2 e δt = 0.05 respectivamente.
Figura 7
Soluções analíticas e numéricas para o Modelo 2.1. Na Fig. (a) temos as soluções para a posição x(t)e em (b) as soluções para a velocidade v(t). Em ambas as figuras temos a solução analítica, equações (3) e (5), em preto (linha contínua), método de Euler, equações (30) e (31), em azul escuro (linha tracejada), método de Heun, equações (32) e (33), em vermelho (linha traço-ponto) e método de RK4, equações (34) e (35), em azul claro (linha pontilhada), para o passo δt = 0.2.

Embora utilizamos dois passos de tempo δt = 0.2 e δt = 0.05, no estudo numérico optamos por fazer oplot apenas para o δt = 0.2 pois os gráficos para os demais passos são semelhantes ao da Fig. 7 e do ponto de vista visual não é percebido a diferença dos resultados numéricos. Diante disso, construímos uma tabela de dados correspondentes aos valores da posição x(t), considerando seis casas decimais, obtidas pelos três métodos numéricos e pela solução analítica, como mostrado na Tab. 2. Perceba então que ao compararmos os dados obtemos que o método RK4 tem uma melhor aproximação numérica do resultado analítico.

Podemos ver isso na Tab. 2 escolhendo t = 6.00 para o passo δt = 0.2, por exemplo, onde o resultado analítico para a posição vale −1.578491,, enquanto que para o método de Euler temos −1.442437, para o método de Heun é 1.763005 e para RK4 temos 1.577655; e para o o passo δt = 0.05 temos a posição para o método de Euler dada por −1.536118,, para o método de Heun é −1.588673 e para RK4 temos −1.578488. A medida que diminuimos o passo a precisão dos resultados aumentam, mas isso requer mais cálculos computacionais.

Uma outra forma de verificarmos a precisão dos resultados além da comparação direta dos dados é analizar o erro percentual relativo, que é obtido calculando o módulo da diferença do valor real e o aproximado dividido pelo valor real multiplicado por 100, assim

(36)Erro%relativo =valor real ࢤ aproximadovalor real×100,

o termo |valor real − aproximado| é chamado de valor absoluto. Temos então que o erro percentual relativo, equação (36), compara um valor real com o valor aproximado, expressando a resposta como o valor absoluto de uma porcentagem. Portanto, com a equação (36) foi possível calcular os erros relativos para os três métodos numéricos os quais obtemos que, na análise anterior em t = 6.00 e δt = 0.2, o Erro% relativo para o método de Euler é de 8.619245%, o Erro% relativo para o método de Heun é 11.689265% e o Erro% relativo para o método RK4 é de 0.052962% como mostrado na Tab. 2, respectivamente na sexta, sétima e oitava colunas. Isso mostra de fato que o método RK4 nos dá um resultado mais aproximado do resultado analítico quando comparado com os métodos de Euler e o de Heun. Na tentativa de diminuir os erros, diminuímos o passo para δt = 0.05, mesmo que isso quadruplicasse o número de cálculos necessários para garantirmos erros menores. Sendo assim, obtivemos para δt = 0.05 o Erro% relativo para o método de Euler foi de 2.684399%,, para o método de Heun foi de 0.645046% e para o método RK4 um erro de 0.000190%, esses resultados, para t = 6, discutidos aqui e outros, para t = 0,3 e t = 9, são apresentados na Tab. 2. Note então que, embora tenhamos um tempo de cálculo computacional maior, quando diminuímos os valores dos passos obtemos resultados ainda mais precisos nos três métodos utilizados.

4.1.2. Estudo numérico do Modelo 2.2

Prosseguindo com o nosso estudo numérico temos agora o modelo do pêndulo simples, Modelo 2.2, o qual escrevemos a equação mod2:Eq01 na forma de duas equações diferenciais de primeira ordem. Para a aceleração angular temos que α(t) = (t)/dt = f1(θ, ω, t) e para a velocidade angular ω(t) = (t)/dt = f2(θ, ω, t) Dessa forma, fizemos a mudança yω e xt tal que as equações numéricas baseadas no método de Euler usadas aqui são dadas por

(37)ωn+1E=ωn+f1(θn,ωn,tn)δt,

e a outra equação é obtida por yθ e xt, também na equação (24), assim

(38)θn+1E=θn+f2(θn,ωn,tn)δt.

Para o método de Heun, equação (25), as equações para o estudo são dadas por

(39)ωn+1H=ωn+12f1(θn,ωn,tn)+f1(θn+1,ωn+1,tn+1)δt,

e

(40)θn+1H=θn+12f1(θn,ωn,tn)+f1(θn+1,ωn+1,tn+1)δt.

Fazendo as mesmas mudança no método RK4, temos as seguintes equações para a análise numérica

(41)ωn+1RK4=vn+16K1ω+2K2ω+2K3ω+K4ωδt

e

(42)θn+1RK4=θn+16K1θ+2K2θ+2K3θ+K4θδt.

Com as funções K, i = 1, 2, 3 e 4, dadas por

(57)K1ω=f1θn,ωn,tn,K2ω=f1θn+12K1θ,ωn+12K1ω,tn+12δt,K3ω=f1θn+12K2θ,ωn+12K2ω,tn+12δt,K4ω=f1θn+K3θ,ωn+K3ω,tn+δt.

E para K, i = 1, 2, 3 e 4, temos que

(58)K1θ=f2θn,ωn,tn,K2θ=f2θn+12K1θ,ωn+12K1ω,tn+12δt,K3θ=f2θn+12K2θ,ωn+12K2ω,tn+12δt,K4θ=f2θn+K3θ,ωn+K3ω,tn+δt.

Com as equações de posição e velocidade dos três métodos numéricos, equações Res:(37) e (38) para o método de Euler, equações (39) e (40) para o método de Heun, e equações (41) e (42) para o método de RK4, usamos, em unidades de medidas abritárias, os parâmetros de massa da barra mb = 1.0, massa do disco md = mb, raio do disco R = 6, comprimento da barra L = 4.0R, a dis tância da mola ao pivô d = L/3, a contantes elástica da mola k = 6.0, a aceleração da gravidade g = 9.8 e as condições iniciais t = 0, θ(0) = π/18 e ω(0) = 0.0 para obtemos os dados numéricos do modelo e compará-lo com o resultado analítico. Assim como feito no Modelo 2.1, o passo de tempo δt = tn+1tn usado foi de 0.2 e 0.05 sendo respectivamente 50 e 200 interações para um parâmento de tempo máximo t = tmax = 10. Com esses parâmetros plotamos a Fig. 8 que mostra as oscilações da posição angular θ(t), Fig. 8(a), e da velocidade angular ω(t), Fig. 8(b) para o passo δt = 0.2. Em ambas as figuras temos a solução analítica, equações (11) e (13), em preto (linha contínua), método de Euler, equações (37) e (38), em azul escuro (linha tracejada), método de Heun, equações (39) e (40), em vermelho (linha traço-ponto) e método RK4, equações (41) e (42), em azul claro (linha pontilhada), para o passo δt = 0.2. Assim como o Modelo 2.1, estudado anteriomente, tivemos aqui que a solução numérica para o método RK4 apresentou resultados bem mais próximos do resultado analítico quando comparado com os métodos de Euler e o de Heun, ver Fig. 8.

Figura 8
Soluções analíticas e numéricas para o Modelo 2.2. Na Fig. (a) temos as soluções para a posição x(t) e em (b) as soluções para a velocidade v(t). Em ambas as figuras temos a solução analítica, equações (11) e (13), em preto (linha contínua), método de Euler, equações (37) e (38), em azul escuro (linha tracejada), método de Heun, equações (39) e (40), em vermelho (linha traço-ponto) e método de RK4, equações (41) e (42), em azul claro (linha pontilhada), para o passo δt = 0.2.

Para verificarmos detalhadamente os resultados numéricos construímos também, assim como no Modelo 2.1, uma tabela de dados correspondentes aos valores da posição angular θ(t) para três passos de tempo δt = 0.2 e δt = 0.05 como mostra a Tab. 3. Como a quantidade de dados é grande, escolhemos o instante de tempo t = 6.00 para discutimos aqui a comparação dos três métodos numéricos nos três passos de tempo, para os outros valores a discussão é similar. Perceba então que para o passo δt = 0.2 onde o resultado analítico para a posição angular vale 0.05114, enquanto que para o método de Euler temos 0.026461, para o método de Heun é 0.038498 e para RK4 temos 0.051179; e para o o passo δt = 0.05 temos a posição para o método de Euler dada por 0.045673, para o método de Heun é 0.050319 e para RK4 temos 0.05114. Note que já no passo δt = 0.2 o método RK4 já apresenta um resultado bem próximo a solução analítica e isso fica ainda mais evidente quando analisamos o erro percentual relativo pela equação (36). Sendo assim, obtemos que em t = 6.00 e δt = 0.2, o Erro% relativo para o método de Euler é de 48.257724%, o Erro% relativo para o método de Heun é 24.720375% e o Erro% relativo para o método RK4 é de 0.076261%; E por fim para δt = 0.05 o Erro% relativo para o método de Euler foi de 10.690262%, para o método de Heun foi de 1.605397% e para o método RK4 um erro de 0.000000%, como mostrado na Tab. 3, respectivamente na sexta, sétima e oitava colunas. Todos os resultados, para t = 4, discutidos aqui e outros, para t = 0, 3, 6 e 9, são apresentados na Tab. 3 o qual mostra que o método RK4 fornece uma melhor aproximação do resultado analítico em todos os passos quando comparado com os métodos de Euler e Heun.

Tabela 3
Comparação para as posições θ do Modelo 2.2 obtidas analiticamente, equação (11), e pelos métodos de Euler, equação (37), Heun, equação (39), e RK4, equação (41), nos instantes de tempos t = 0, 3, 6 e 9. Na tabela temos, de cima para baixo, o passo δt = 0.2 e δt = 0.05 respectivamente.
4.1.3. Estudo numérico do Modelo 2.3

A construção da análise numérica do oscilador acoplado, Modelo 2.3, é mais sofistificada que os Modelos 2.1 e 2.2 pois aqui temos um par de equações diferencais de segunda ordem acopladas, equações mod3:Eq01 e mod3:Eq02. Sendo assim, escrevemos essas equações na forma de quatro equações diferenciais de primeira ordem dadas por: aceleração e velocidade do corpo 1, respectivamente, a1(t) = dv1(t)/dt = f11(x1, x2, v1, v2, t), v1(t) = dx1(t)/dt = f21(x1, x2, v1, v2, t) e aceleração e velocidade para o corpo 2, temos respectivamente a2(t) = dv2(t)/dt = f12(x1, x2, v1, v2, t), v2(t) = dx2(t)/dt = f22(x1, x2, v1, v2, t). Então, para o estudo desse modelo escrevemos as equações numéricas baseadas no método de Euler, equação (24), nas formas

(43)v1n+1E=v1n+f11(x1n,x2n,v1n,v2n,t)δt,
(44)x1n+1E=x1n+f21(x1n,x2n,v1n,v2n,t)δt,
(45)v2n+1E=v2n+f12(x1n,x2n,v1n,v2n,t)δt,

(46) x 2 n + 1 E = x 2 n + f 22 ( x 1 n , x 2 n , v 1 n , v 2 n , t ) δ t ,

essas equações foram obtidas fazendo as seguintes alterações no método de Euler: para a velocidade yv1 e yv2; para a posição yx1 e yx2; e para o tempo xt. Para o método de Heun, equação (25), as equações numéricas para o estudo são dadas por

(47)v1n+1H= v1n+12f11(x1n,x2n,v1n,v2n,t)+f11(x1n+1,x2n+1,v1n+1,v2n+1,t)δt,
(48)x1n+1H= x1n+12f21(x1n,x2n,v1n,v2n,t)+f11(x1n+1,x2n+1,v1n+1,v2n+1,t)δt,
(49)v2n+1H= v2n+12f12(x1n,x2n,v1n,v2n,t)+f11(x1n+1,x2n+1,v1n+1,v2n+1,t)δt,
(50)x2n+1H= x2n+12f22(x1n,x2n,v1n,v2n,t)+f11(x1n+1,x2n+1,v1n+1,v2n+1,t)δt,

Fazendo as mesmas mudança no método RK4 dado pelas equações (27) e (29), temos as seguintes equações para a análise numérica

(51)v1n+1RK4=v1n+16K11v+2K21v+2K31v+K41vδt,
(52)x1n+1RK4=x1n+16K11x+2K21x+2K31x+K41xδt,
(53)v2n+1RK4=v2n+16K12v+2K22v+2K32v+K42vδt,
(54)x2n+1RK4=x2n+16K12x+2K22x+2K32x+K42xδt.

As funções Kijv, com i = 1, 2, 3 e 4; e j = 1 e 2, são dadas por:

(59)K11v=f11(x1n,x2n,v1n,v2n,t),K21v=f11x1n+12K11x,x2n+12K21x,v1n+12K11v,v2n+12K21v,tn+12δt,K31v=f11x1n+12K21x,x2n+12K31x,v1n+12K21v,v2n+12K31v,tn+12δt,K41v=f11x1n+K31x,x2n+K32x,v1n+K31v,v2n+K32v,tn+δt;K12v=f12(x1n,x2n,v1n,v2n,t),K22v=f12x1n+12K11x,x2n+12K21x,v1n+12K11v,v2n+12K21v,tn+12δt,K32v=f12x1n+12K21x,x2n+12K31x,v1n+12K21v,v2n+12K31v,tn+12δt,K42v=f12x1n+K31x,x2n+K32x,v1n+K31v,v2n+K32v,tn+δt;

E para as funções Kijx, com i = 1, 2, 3 e 4; e j = 1 e 2, temos: e 2, temos:

(60)K11x=f21(x1n,x2n,v1n,v2n,t),K21x=f21x1n+12K11x,x2n+12K21x,v1n+12K11v,v2n+12K21v,tn+12δt,K31x=f21x1n+12K21x,x2n+12K21x,v1n+12K21v,v2n+12K21v,tn+12δt,K41x=f22x1n+K31x,x2n+K32x,v1n+K31v,v2n+K32v,tn+δtK12x=f22(x1n,x2n,v1n,v2n,t),K22x=f22x1n+12K11x,x2n+12K21x,v1n+12K11v,v2n+12K21v,tn+12δt,K32x=f22x1n+12K21x,x2n+12K21x,v1n+12K21v,v2n+12K21v,tn+12δt,K42x=f22x1n+K31x,x2n+K32x,v1n+K31v,v2n+K32v,tn+δt

No estudo, consideramos por simplicidade o caso de molas iguais, k1 = k2 = k, então as frequêcias ω1 e ω2, dadas respectivamente pelas equações 1mod3:Eq05 e 2mod3:Eq05, assumiram a forma ω1=351/2k/2m e ω2=3+51/2k/2m. Consideramos também que os coeficientes da amplitude de movimento A1 = A2 = 1, sendo assim os coeficientes B1 e B2 são dados por B1=1+5/2 e B2=15/2. Os parâmetros numéricos usados foram: massa m = 0.8, constante elástica da mola k = 1.5 e condições iniciais para o corpo 1 x1(0) = A1 + A2 = 2.0 e v1(0) = 0.0 e para o corpo 2 x2(0) = B1 + B2 = 1.0 e v2(0) = 0.0. O passo de tempo δt = tn+1tn usado foi de 0.2 e 0.05 sendo respectivamente 75 e 300 interações para um parâmento de tempo máximo t = tmax = 15.

Com os parâmetros e condições inicias dadas, plotamos na Fig. 9 as soluções analíticas e numéricas que mostram as oscilações para as posições e velocidades dos corpos 1 e 2 para o passo δt = 0.05. Na Fig. 9(a) temos as soluções para a posição x1(t), figura de cima, e velocidade v1(t), figura de baixo, para o corpo 1 apresentadas na forma: solução analítica, equações (16) e (20), em preto (linha contínua); método de Euler, equações (44) e (43), em azul escuro (linha tracejada); método de Heun, equações (48) e (47), em vermelho (linha traço-ponto); e método de RK4, equações (52) e (51), em azul claro (linha pontilhada). A ordem das equações são respectivamente dadas para a posição x1 e a velocidade v1. A Fig. 9(b) apresenta as soluções para a posição x2(t), figura de cima, e velocidade v2(t), figura de baixo, para o corpo 2 na seguinte forma: solução analítica, equações (16) e (21), em preto (linha contínua); método de Euler, equações. (46) e (45), em azul escuro (linha tracejada); método de Heun, equações (50) e (49), em vermelho (linha traço-ponto); e método de RK4, equações (54) e (53), em azul claro (linha pontilhada). A ordem das equações são respectivamente dadas para a posição x1 e a velocidade v1.

Figura 9
Soluções analíticas e numéricas para o Modelo 2.3. Na Fig. (a) temos as soluções para a posição x1(t) e velocidade v1(t) para o corpo 1, sendo a solução analítica, equações (16) e (20), em preto (linha contínua), método de Euler, equações (44) e (43) respectivamente, em azul escuro (linha tracejada), método de Heun, na ordem equações (48) e (47), em vermelho (linha traço-ponto) e método de RK4, respectivamente dadas por equações (52) e (51), em azul claro (linha pontilhada). A Fig (b) apresenta as soluções para a posição x2(t)e velocidade v2(t) para o corpo 2, sendo a solução analítica, equações (17) e (21) respectivamente, em preto (linha contínua), método de Euler, na ordem equações (46) e (45), em azul escuro (linha tracejada), método de Heun, equações (50) e (49), em vermelho (linha traço-ponto) e método de RK4, respectivamente dadas pelas equações (54) e (53), em azul claro (linha pontilhada). Em ambas figuras temos o passo δt = 0.05.

Perceba na Fig. 9 que visualmente os três métodos apresentam boas aproximações até t = 5, acima disso os resultados numéricos começam a divergir significativamente, isso é bem notável para passos de tempo maiores que δt = 0.05. Sendo assim, construímos uma tabela de dados correspondentes aos valores das posições x1 e x2 para analisarmos os comportamentos dos métodos numéricos para os passos δt = 0.2 e δt = 0.05, como mostrado na Tab. 4. Na discussão a seguir, escolhemos o instante de tempo t = 12 para a comparação dos três métodos numéricos nos três passos de tempo. Para os demais valores a discussão é similar e está também apresentada na Tab. 4.

Tabela 4
Comparação para as posições x1 e x2 do Modelo 2.3 obtidas analiticamente, equações (16) e (17), e pelos métodos de Euler, equação (37), Heun, equação (39), e RK4, equação (41), nos instantes de tempos t = 0, 2, 4, 6, 8 e 10. Na tabela temos, de cima para baixo, os passos de tempo δt = 0.2 e δt = 0.05 para as posições x1 e x2 respectivamente.

Em relação a posição x1 em t = 12, para o passo δt = 0.2, temos o resultado analítico dado por −0.628540, enquanto que para o método de Euler −1.307307, para o método de Heun é −2.829227 e para RK4 temos −1.169905. Note então que esses resultados não são boas aproximações e isso é comprovado pelo o erro percentual relativo calculado na equação erro1 o qual mostra os erros% para os métodos de Euler, Heun e RK4, respectivamente, dados por 107.991059%, 350.126802% e 86.130557%, como apresentado na sexta, sétima e oitava coluna da Tab. 4. Para um passo de tempo ainda menor, δt = 0.05, obtemos resultados mais próximos do analítico para os três métodos, são eles: −0.807988, −0.786556 e −0.739862, nessa ordem, para os métodos de Euler, Heun e RK4, enquando que os erros% relativo para os métodos de Euler, Heun e RK4 são dados respectivamente por 28.549973%, 25.140166% e 17.711204%.

Analisando agora a posição x2 em t = 12, para o passo δt = 0.2, obtemos o resultado analítico dado por −1.276971, para o método de Euler −1.799743 o que nos dá 40.938439% para o erro% relativo, no método de Heun temos que a posição é −0.302942 e para RK4 temos −1.340084 para posição e erro% relativo de 4.942399%. Por último temos que para δt = 0.05 obtemos os seguintes resultados numéricos: −1.399589, −1.252715 e −1.280279, respectivamente, para os métodos de Euler, Heun e RK4, enquando que os erros% relativo para o método de Euler foi de 9.602254%, método de Heun 1.899495%> e método RK4 0.259051%. Perceba que, nos resultados obtidos, temos o método RK4 como sendo o método numérico que mais nos fornece uma boa aproximação do resultado analítico como mostra a Tab. 4.

Vale ressaltar também, que como estamos diante de um sistema acoplado é natural obtermos resultados numéricos que divergem significativamente dos resultados analíticos, como ocorreu para x1, ver Tab. 4, no passo δt = 0.2, pois temos acúmulos de erros sucessivos na aplicação dos métodos numéricos de uma equação diferencial para outra. Diante disso, é preciso diminuir cada vez mais o passo de tempo δt para obtermos resultados numéricos mais aproximados dos resultaos analíticos. Outro ponto importante de mencionar, é que a escolha de apresentar os resultados numéricos para a posição nas Tabelas 2, 3 e 4 nos três modelos discutidos acima se dá pelo fato de que o comportamento oscilatorio da velocidade é similar ao da posição a menos de uma constante.

4.2. Construção e visualização dos osciladores

Na construção e visualização da animação dos osciladores, Modelos 2.1, 2.2 e 2.3, utilizamos linguagem de programação Python 3.12.4 e a biblioteca VPython 3.2 − 5.74, ambos instaladores disponíveis respectivamente nas Refs. [41, 42]. A biblioteca VPython é um ambiente poderoso e fácil de usar para criar animações 3D navegáveis em tempo real através de um sistema de coordenadas x, y, z. Um ponto interessante dos recursos que o VPython oferece é a utilização dos próprios objetos como variáveis, o qual nos proporciona a criar e utilizar uma infinidade de objetos e formas integrados, bem como recursos gráficos, adicionando propriedades físicas como tempo, posição e massa, o que torna o programa mais interativo [43, 44].

Em nosso estudo para os Modelos 2.1, 2.2 e 2.3, iniciamos primeiro o processo para tornar o programa interativo começando com a criação da cena, objetos e visualização dos gráficos. Para isso, é necessário importar o pacote visual que é responsável pelos recursos de programação para a visualização 3D, então inserimos o comando from visual import * (aparece com essas cores na tela do programa), onde, o símbolo * indica que deseja-se ter acesso a todos os recursos do pacote. Inserimos também os comandos from visual.graph import * e from math import * que são os pacotes de visualização dos gráficos e de acesso às funções matemática, respectivamente.

Para a criação da cena, dimensões da tela de visualização da animação, usamos as seguintes funções: scene.range (zoom em relação ao centro da tela), scene.center (localização do centro da tela), scene.background (cor de fundo da tela), scene.width (largura da cena) e scene.height (altura da cena). Em seguida, construímos os objetos para cada um dos modelos usando várias funções que dão as formas geométricas de cada objetos, essas funções serão apresentadas em cada um dos modelos nos parágrafos a seguir.

Em relação a visualização dos gráficos usamos a função gdots() o qual exibe na tela uma lista de pares (x, y) como pontos discretos plotando então a curva de interesse no estudo. Associamos uma cena com a função gdots() para apresentar os gráficos, para isso criamos uma cena separada com a função gdisplay() com os seguinte comandos: largura (width), altura (height), título na tela (title), nomes nas coordenadas x (xtitle) e y (ytitle) além de um itervalo de apresentação de dados para cada uma das coordenadas (xmax, xmin) e (ymax, ymin) e cor de fundo (background=color.white), nesse caso está uma cor branca. Por fim, combinamos as funções gdots() e gdisplay() na forma gdots(gdisplay=grafico). Por exemplo, podemos contruir uma cena da seguinte forma

Neste exemplo de cena, a janela do gráfico será localizado em (0,0), com um tamanho de 800 por 400 pixels, e na barra de título vai constar Posição vs. Tempo. O gráfico terá um título de t(s) no eixo horizontal e x(m) no eixo vertical, terá limites fixados de 0 até 10 no eixo horizontal se estenderá de −3 para 3 no eixo vertical. A cor de primeiro plano (branco por padrão) é preta, e a cor de fundo (preto por padrão) é branca. Na cena está presente um gráfico de cor azul, como mostrado na Fig. 10.

Figura 10
>Exemplo de cena construída utilizando algumas funções da biblioteca VPython.

A construção e tradução dos modelos físicos, Modelos 2.1, 2.2 e 2.3, para a linguagem computacional foi feita usando a segunda Lei de Newton a=F/m combinada com o método de Euler, equação (24), para as equações de velocidade e posição dadas respectivamente por vn+1 = vn + aδt e xn+1 = xn + vnδt, onde δt é o passo de tempo e a força resultante (F) que atua no sistema vai depender de cada um dos modelos estudados. Uma vantagem aqui na tradução do sistema físico para a linguagem computacional é o fato de que não precisamos nos preocupar com a notação de equação diferencial, isso facilita muito na escrita e no entendimneto dos programas para quem não é familiarizado com tal notação.

Para concluir a animação dos modelos, introduzimos a função while() que é uma instrução de fluxo de controle permitindo que o código seja executado repetidamente, dependendo se uma determinada condição é satisfeita ou não. Quando a condição se torna falsa, a linha imediatamente após o loop do programa é executada. Usamos também o comando rate() que é uma parte fundamental de qualquer loop de animação em um programa VPython, pois com ele controlamos a velocidade com que são feitas as iterações. O rate() permite que o VPython redesenhe a exibição, para que os objetos possam se mover, as animações possam ocorrer e os gráficos possam ser plotados. Sem esse comando rate() o programa seria executado mais rapidamente [45]. Por fim, incluimos a função condicional if que é uma das instruções condicionais mais usadas em linguagens de programação. Essa condição decide se certas instruções precisam ser executadas ou não. Sendo assim, é verificado em uma determinada condição, se a condição for verdadeira, então o conjunto de códigos presente dentro do bloco if será executado, caso contrário não.

4.2.1. Construção e visualização do Modelo 2.1

Uma vez apresentada as funções e como foi feita a tradução dos modelos físicos para a linguagem computacional vamos agora mostrar a construção para cada modelo separado. No sistema massa-mola com rotação, Modelo 2.1, construímos duas cenas: cena 1 - visualização da dinâmica do oscilador; e cena 2 - apresentação dos gráficos da posição x(t), velocidade v(t) aceleração a(t). Para a contrução da cena 1 definimos os objetos e a atribuição de variáveis a eles. Sendo assim, usamos a função box() para desenharmos uma parede vertical esquerda, um piso e um suporte. Para a função box() usamos os comandos pos=(), size=() e color=color.– que são responsáveis por definirem a posição, tamanho e cor dos objetos. Utilizamos a função cylinder() para desenharmos um disco e um eixo que passa pelo centro do cilindro, para essa função usamos os comandos pos=(), radius=()axis=() e color=color.– que definem a posição, o raio, o eixo e cor dos objetos. Para completar os objetos desse modelo, desenhamos também uma mola inserindo a função helix() em conjunto com os comandos pos=vector(-7,0,0), axis=vector(-1, 4, 0), radius=0.5, color=color.orange, thickness=0.1, coils=10) e a função arrow=() para desenharmos uma seta que indica o sentido da rotação do cilindro na animação.

Em relação ao sistema físico-computacional consideramos os seguintes parâmetros em unidades arbitrárias: massa m = 0.4,, constante da mola k = 4.0, raio do cilindro R = 0.1; condições iniciais x(0) = 2.0 e v(0) = 0.0; e passo de tempo δt = 0.01. Com esses parâmetros geramos a animação do Modelo 2.1 usando a função while() e escrevendo as equações de movimento para a aceleração a = .(2k/3m) . disco.pos.x, como mostrado na equação Eq02, velocidade v + = adt, posição x + = vdt e velocidade angular ω + = adt/R, onde o termo disco.pos.x é a posição x do disco e o operador + = é adicionada para somar o próximo valor a um valor já existente, ou seja, é um acumulador de dados, então x + = n é uma abreviação de x = x + n

A animação gerada para a mola se dá através de mola.axis = suporte3.posparedeE.pos + (0, 1, 0), essa expressão descreve o movimento da mola que está entre as consecutivas posições do suporte preso ao disco e a posição da parede fixa. Para a rotação do disco é obtida usando a expressão disco.rotate(axis = (0, 0, 0.5), angle = −wdt), onde descreve o rolamento do disco na superfície plana.

Algumas posições específicas para animação (conjunto: disco, mola, parede vertical esquerda, suporte e piso) podem ser vistas em x = 2, Fig. 11(a), x = 0, Fig. 11(b), e x = −2, Fig. 11(c). Para finalizar a construção desse modelo usamos a função condicional if para limitarmos a visualização da animação dos gráficos da posição x(t), velocidade v(t) e aceleração a(t), respectivamente nas cores vermelho, preto e zul, como mostrado na cena 2, Fig. 11(d) para t ˂ 10, onde a evolução do parâmentro de tempo foi calculada por t + = dt. O código completo utilizado na construção do Modelo 2.1 pode ser visto no Apêndice [codigo1]B.

Figura 11
Visualização da contrução do Modelo 2.1 para as posições x = 2, Fig. (a), x = 0, Fig. (b), e x = −2, Fig. (c), onde todas essas posições estão presentes na cena 1 nomeada de Sistema Massa-mola com Rotação. Temos também os gráficos do movimento para a posição x(t), velocidade v(t) e aceleração a(t), respectivamente nas cores vermelho, preto e zul, apresentado na Fig. (d) para a cena 2 nomeada de Gráficos para o movimento.
4.2.2. Construção e visualização do Modelo 2.2

A construção da animação para o pêndulo físico acoplado, Modelo 2.2, foi feita através de duas cenas: cena 1 – visualização da dinâmica do modelo, nomeada de Pêndulo físico acoplado; e cena 2 – apresentação dos gráficos da posição angular θ(t), velocidade angular ω(t)e aceleração angular α(t), nomeada de Gráficos para o movimento.

Na a contrução da cena 1, definimos os objetos a partir de funções já apresentadas no Modelo 2.1. Sendo assim, usamos a função box() para desenharmos a parede esquerda, o teto e a barra vertical do pêndulo físico junto ao comando material=materials.wood que é responsável por simular uma textura no objeto de interesse, aqui usamos uma textura de madeira como mostrado na Fig. 12. Adicionamos a função cylinder() e os comandos pos=(3.5,4.4,−1.5), radius=0.1, axis=(0,0,-2) e color = color.red, que indicam respectivamente a posição, o raio, eixo e a cor, para criarmos um pino de fixação de referência para o ponto de rotação. Também usamos a mesma função cylinder() para criarmos um disco fixado a outra extremidade da barra. Por fim, desenhamos uma mola inserindo a função helix() com o comando material=materials.rough no programa.

A animação na cena 1 foi contruída através da tradução do sistema físico-computacional. Para isso, consideramos os seguintes parâmetros em unidades arbitrárias: massas md = mb = 1.0,, raio do disco R = 6, comprimento da barra L = 4R, distância vertical da mola ao pivô d = L/3, constante elástica da mola k = 6 e aceleração da gravidade g = 9.8. Para as condições iniciais consideramos que a posição angular inicial theta(0) = π/18 e velocidade angular inicial omega(0) = 0.0, com o passo de tempo δt = 0.01. Usamos a função while() e escrevemos as equações de movimento, considerando pequenas oscilações, para a aceleração angular alpha = −(w0w0) ∗ theta, onde w0 = sqrt((mbgL + 2 ∗ mdg ∗ (L + R) + 2 ∗ kdd)/(2∗I)), velocidade angular omega + = alphadt e posição angular theta + = omegadt.

O movimento do pêndulo é gerado usando que x = 4.5 ∗ theta, barra.pos.x = disco.pos.x, mola.axis = barra.pos−paredeE.pos+(−3.5,−1, 0), disco.pos.x = x e pendulo.rotate(axis = (0, 0, 1), angle = omegadt) que descrevem, respectivamente, a posição angular, o movimento da barra, o movimento da mola, a oscilação do disco e a rotação de todo o pêndulo em torno do ponto de pivô. A Fig. 12 apresenta algumas posições específicas para animação do Modelo 2.2, onde temos a condição inicial θ = π/18, Fig. 12(a), temos a posição θ = −π/18, Fig. 12(b), e por fim a posição mais baixa da trajetória θ = Fig. 12(c).

Figura 12
Visualização da contrução do Modelo 2.2 para as posições angulares θ = π/18, Fig. (a), θ = −π/18, Fig. (b), e θ = 0, Fig. (c), onde todas essas posições estão presentes na cena 1 nomeada de Pêndulo físico acoplado. Temos também os gráficos do movimento para a posição angular θ(t), velocidade angular ω(t) e aceleração angular α(t), respectivamente nas cores vermelho, preto e zul, apresentado na Fig. (d) para a cena 2 nomeada de Gráficos para o movimento.

Para a contrução da cena 2, nomeada de Gráficos para o movimento, usamos a função gdots() e a condicional if com a limitação em t ˂ 10 à visualização da animação dos gráficos da posição θ(t), velocidade ω(t) e aceleração α(t), respectivamente nas cores vermelho, preto e zul, como mostrado na cena 2, Fig. 12(d). O código completo utilizado na construção do Modelo 2.2 pode ser visto no Apêndice [codigo2]C.

4.2.3. Construção e visualização do Modelo 2.3

No oscilador acoplado, Modelo 2.3, construímos a animação através de três cenas: cena 1 – visualização da dinâmica do oscilador; cena 2 – apresentação dos gráficos da posição x1(t), velocidade v1(t) e aceleração a1(t) para o objeto 1 (caixa 1); e cena 3 – apresentação dos gráficos da posição x2(t), velocidade v2(t) e aceleração a2(t) para o objeto 2 (caixa 2). A contrução da cena 1 para o oscilador acoplado é baseda na construção do Modelo 2.1, a diferença aqui é que temos duas molas e duas caixas. Para definirmos os objetos usamos as funções box() e helix(), as mesmas já foram discutidas no Modelo 2.1.

Consideramos os seguintes parâmetros em unidades arbitrárias para o modelo: massas m1 = m2 = m = 5.0, constantes elásticas das molas k1 = k2 = 1.0; condições iniciais x1(0) = 1.0, v1(0) = 0.0, x2(0) = -2.0 e v2(0) = 0.0; e passo de tempo δt = 0.01. Usamos a função while() em conjunto com as equações de movimento para os dois objetos, são elas: aceleração a1 = (k1/m) ∗(x2−2 ∗x1) e a2 = −(k2/m) ∗ (x2x1); velocidade v1 + = a1 ∗ dt e v2 + = a2dt; posição x1 + = v1dt e x2 + = v2dt. As equações para a1 e a2 foram obtidas com a aplicação da Segunda Lei de Newton dadas respectivamente pelas equações (14) e (15).

Ainda na cena 1 temos que a animação gerada para os blocos e as molas foram associadas às equaçãoes de posição. Sendo assim, temos para o movimento do bloco 1 a expressão bloco1.pos.x = x1 - 3, para o bloco 2 temos a expressão bloco2.pos.x = x2 + 3 e paras as molas 1 e 2 escrevemos respectivamente as expressões mola1.axis = bloco1.pos.xparede1.pos.x e mola2.axis = bloco2.pos.xbloco1.pos.x. Algumas posições específicas para os blocos 1 e 2 são mostradas na Fig. 13(a) para as condições iniciais x1 = 1 e x2 = −2, na Fig. 13(b) temos x1 = 0 e x2 = 0 que são as posições de equilíbrio do sistema, e na Fig. 13(c) temos x1 = −1 e x2 = 2.

Figura 13
Visualização da contrução do Modelo 2.3 para as posições x1 = 1 e x2 = −2, Fig. (a); x1 = 0 e x2 = 0, Fig. (b); e x1 = −1 e x2 = 2, Fig. (c), onde todas essas posições estão presentes na cena 1. Para as cenas 2 e 3, respectivimamente nomeadas de Gráficos para o movimento do bloco 1 e Gráficos para o movimento do bloco 2, temos os gráficos das posições x1(t) e x2(t) (curvas em vermelho), velocidades v1(t) e v2(t) (curvas em preto) e acelerações a1(t) e a2(t) (curvas em zul). A cena 2 é mostrada na Fig. (d) e a cena 3 na Fig. (e).

A construção do Modelo 2.3 é finalizada com as criações das cenas 2 e 3, respectivamente mostradas nas Figs. 13(d) e 13(e). Em ambas as cenas usamos a função condicional if para limitarmos a visualização da animação dos gráficos em t ˂ 40. A cena 2 apresenta os gráficos da posição x1(t) (curva em vermelho), velocidade v1(t) (curva em preto) e aceleração a1(t) (curva em zul) par ao bloco 1, essa cena foi nomeada de Gráficos para o movimento do bloco 1. A cena 3 apresenta os gráficos da posição x2(t) (curva em vermelho), velocidade v2(t) (curva em preto) e aceleração a2(t) (curva em zul) par ao bloco 2, essa cena foi nomeada de Gráficos para o movimento do bloco 2. O código completo utilizado na construção do Modelo 2.3 pode ser visto no Apêndice codigo3[].

5. Conclusão

Neste trabalho, apresentamos os resultados obtidos por meio da comparação entre soluções exatas e soluções aproximadas para problemas de três tipos de osciladores: sistema massa-mola com rotação, pêndulo físico acoplado a uma mola e um sistema de oscilador acoplado. Para o estudo numérico, usamos a linguagem de programação Python e suas bibliotecas NumPy, Pandas e Matplotlib. Mostramos também os resultados obtidos na construção e a visualização da animação dos osciladores, através da biblioteca VPython. Destacamos a importância de incorporar a linguagem de programação Python e suas bibliotecas para solucionarmos numericamente as equações diferenciais de segunda ordem dos três modelos de osciladores, além de visualizar graficamente as soluções analíticas e aproximadas. As soluções aproximadas foram obitidas com a implementação computacional dos métodos numéricos de Euler, de Heun e o método de Runge-Kutta de quarta ordem, onde foi considerando três passos de tempo, δt = tn+1tn, de 0.2 e 0.05 para cada um dos métodos. O comparativo entre soluções exatas e soluções aproximadas nos deu uma compreensão aprofundada e permitiu explorararmos de maneira significativa as soluções econtradas. Obtivemos então que o método de Runge-Kutta de quarta ordem nos forneceu uma melhor aproximação da solução exata nos valores de posição e velocidade dos osciladores. Acreditamos que esse trabalho tem o potencial de ajudar, através de uma abordagem mais interativa, na análise e o entedimento mais completo de problemas de osciladores para serem aplicados nas aulas de física nos cursos de graduação em física, exatas e engenharias como uma alternativa de experimento virtual.

Agradecimentos

Edinardo I. B. Rodrigues e M. L. da S. Dias agradecem ao Conselho Nacional de Desenvolvimento Científico e Tecnológico (CNPq) e ao Instituto Federal de Educação, Ciência e Tecnologia Baiano (IF Baiano) pelo suporte durante o desenvolvimento deste trabalho.

Apêndice A: Solução Para a Equação de Movimento do Oscilador Acoplado

Considere um sistema livre de atrito onde dois corpos, de massas iguais a m que estão presos por meio de duas molas de constantes elásticas k1 e k2, podem mover-se livremente, conforme mostrado na Fig. 3. A força resultante que o corpo 1 sente devido as ações das molas é

(A.1)F1F2=k1x1+k2(x2x1)

e para o corpo 2 temos que a força resultante é dada por

(A.2)F2=k2(x2x1).

Aplicando a segunda lei de Newton temos o par de equações diferenciais

(A.3)d2x1(t)dt2=k1+k2mx1(t)+k2mx2(t)

e

(A.4)d2x2(t)dt2=k2mx1(t)k2mx2(t).

É razoável assumir que o movimento resultante tem um comportamento oscilatório e como buscamos modos normais, onde todas as partes do sistema acoplado oscilam na mesma frequência, consideramos as seguintes funções de teste para x1(t) e x2(t)

(A.5)x1(t)=Aeiωt,
(A.6)x2(t)=Beiωt,

onde A e B são amplitudes a serem determinadas. Substituindo essas funções nas equações (A.1) e (A.4), obtemos que

(A.7)ω2+k1+k2mAk2mB=0,
(A.8)k2mA+ω2+k2mB=0.

Podemos reescrever esse sistema na forma matricial, então

(A.9)ω2+k1+k2mk2mk2mω2+k2mAB=00.

Este sistema tem apenas uma solução não trivial para o determinante da matriz dos coeficientes ser nulo, portanto

(A.10)m2ω4m(k1+2k2)ω2+k1k2=0.

Resolvendo essa equação obtemos as seguintes soluções

(A.11)ω1=±k1+2k22mk12+4k222m1/2,
(A.12)ω2=±k1+2k22m+k12+4k222m1/2.

A relação entre os coeficientes A e B pode ser obitida da equação (A.7), então

(A.13)B=mω2+k1+k2k2A.

Combinando essa relação com ω1, equação (A.11), temos que

(A.14)B1=A12k2k1+k12+4k22,

e combinando (A.13) com ω1, equação (A.12), obtemos

(A.15)B2=A22k2k1k12+4k22.

Uma vez obitidas as frequências ω e ω2 e os coeficientes B1 e B2, podemos escrever que a solução mais geral, x1(t) e x2(t), para as equações de movimento, equações (A.3) e (A.4), podem ser escritas nas formas abaixo:

(A.16)x1(t)=A1cos(ω1t)+A2cos(ω2t)

e

(A.17)x2(t)=B1cos(ω1t)+B2cos(ω2t).

Apêndice B: Código Para a Construção da Visualização da Animação do Modelo 2.1

Apêndice C: Código Para a Construção da Visualização da Animação do Modelo 2.2

Apêndice D: Código Para a Construção da Visualização da Animação do Modelo 2.3

Referencias

  • [1] F.A. Moura, P.H.P. Mandarino e S.C.P. Silva, Rev. Bras. Ens. Fis. 42, e20200044 (2020).
  • [2] V.A. Oliveira e A.C. da Silva, Ens. Pesqui. Educ. Ciênc. 22, e11969 (2020).
  • [3] M.A. Moreira, Rev. Bras. Ens. Fis. 43, e20200451 (2021).
  • [4] R.C. Barbosa, J.F. Junior e P.L. Junior, Rev. Bras. Ens. Fis. 45, e20230210 (2023).
  • [5] N.T.O. Reis, N.M.D. Garcia, P.N. Souza e P.S. Baldessar, Rev. Bras. Ens. Fis. 30, 1401 (2008).
  • [6] C.H.J. Davies, Computers & Education 39, 271 (2002).
  • [7] M.A. Cavalcante e C.R.C. Tavolaro, Rev. Bras. Ens. Fis. 22, 421 (2000).
  • [8] G. Camiletti e L.A. Ferracioli, Rev. Bras. Ens. Fis. 24, 110 (2002).
  • [9] G.R. Neves, J.C. Silva e V.D. Teodoro, arXiv:1006.4662v1 (2010).
  • [10] D.M. Jaime e A.A. Leonel, Rev. Bras. Ens. Fis. 46, 20230309 (2024).
  • [11] J.A. Macêdo, A.G. Dickman e I.S.F. Andrade, Cad. Bras. de Ens. de Fís. 29, 562 (2012).
  • [12] L.R. Petzold, L.O. Jay e J. Yen, Ada Numerica 6, 437 (1997).
  • [13] J. Bartos, em: In WDS’05 Proceedings of Contributed Papers, Part III (Praga, 2005).
  • [14]D. Schott., Glob. Jour. of Eng. Educ. 12, 17 (2010).
  • [15] L.J. Kwari, J. Sunday, J.N. Ndam e A.A. James, Science Forum (Jour. of Pure and Appl. Sc.) 21, 503 (2021).
  • [16] N.M. Janah, F. Falah, Ratnawati, Ishafit e W.S.B. Dwandaru, Ind. Rev. of Phys. 4, 46 (2021).
  • [17] E.I.B. Rodrigues, Rev. Velho Chico 2, 15 (2022).
  • [18] S.V. Kontomaris, G. Chliveros e A. Malamou, Mult. Scient. Jour. 6, 140 (2023).
  • [19] C.P.D. Conceição e T.D. Admiral, Braz. Jour. of Science 1, 64 (2022).
  • [20] L.E. Borges, Python para Desenvolvedores (Novatec, Rio de Janeiro, 2014), 3 ed.
  • [21] L. Euler, Institutionum calculi integralis volumen primum (Académie Impériale des Sciences, Saint-Petersbourg, 1768).
  • [22] A.L. Alves,S.S. Bento e C.H. Marchi, Rev. Bras. Ens. Fis. 45, e20230229 (2023).
  • [23] K. Heun e Z. Math. Phys. 45, 23 (1900).
  • [24] C. Runge, Mathematische Annalen 46, 167 (1895).
  • [25] Kutta, Zeitschrift für Mathematik und Physik 46, 435 (1901).
  • [26] R.L. Sterza e A.C. Brandi, Rev. Eletr. Paul. de Matem. 7, 12 (2016).
  • [27] K.A. Koroche, Int. Jour. of Syst. Sc. and Appl. Math. 6, 1 (2021).
  • [28] P.F.T. Dorneles, I.S. Araujo e E.A. Veit, Rev. Bras. Ens. Fis. 30, 3 (2008).
  • [29] R.L. Viana, Rev. Bras. Ens. Fís. 33, 3 (2011).
  • [30] A. Kandus, F.W. Gutmann e C.M.C. de Castilho, Rev. Bras. Ens. Fis. 28, 4 (2006).
  • [31] F.F. Pedrozo e T.C. de Freitas, Rev. Bras. Ens. Fis. 44, (2022).
  • [32] J. Jani, WSEAS Transactions on Advances in Engineering Education 20, 1 (2023).
  • [33] G. Akpojotor, L. Ehwerhemuepha, M. Echenim e F. Akpojotor, African Journal of Physics 3, 94 (2010).
  • [34] E. Tufino, S. Oss e L. Gratton, J. Phys.: Conf. Ser. 2490, 012003 (2023).
  • [35] P.D. Bhoyar, Modern trends in multidisciplinary subjects (Redshie Publication, Lunawada, 2023), v. 3.
  • [36] K. Shah, TechRxiv:10.36227/techrxiv.22581253.v1 (2023).
  • [37] S.R. de Oliveira, Rev. Bras. Ens. Fis. 46, (2024).
  • [38] NumPy user guide, disponível em:https://numpy.org, acessado em: 10/06/2024.
    » https://numpy.org
  • [39] User Guide, disponível em:https://pandas.pydata.org, acessado em: 10/06/2024.
    » https://pandas.pydata.org
  • [40] Using Matplotlib, disponível em:https://matplotlib.org/, acessado em: 10/06/2024.
    » https://matplotlib.org/
  • [41] Python, disponível em:https://www.python.org, acessado em: 15/06/2024.
    » https://www.python.org
  • [42] VPython 3D Programming for Ordinary Mortals, disponível em:https://www.vpython.org/index.html, acessado em: 15/06/2024.
    » https://www.vpython.org/index.html
  • [43] F.L.Q. Vidal e C.A.R.S. Fontoura, Open Science Research 1, 1108 (2022).
  • [44] C.S. Cruz, L.Q. Galvão, S. Rosa e W.S. Santana, Cad. Bras. de Ens. De Fís. 9, 204 (2022).
  • [45] VPython documentation, disponível em:https://www.glowscript.org/docs/VPythonDocs/index.html, acessado em: 16/06/2024.
    » https://www.glowscript.org/docs/VPythonDocs/index.html

Editado por

Datas de Publicação

  • Publicação nesta coleção
    31 Mar 2025
  • Data do Fascículo
    2025

Histórico

  • Recebido
    25 Nov 2024
  • Revisado
    12 Fev 2025
  • Aceito
    18 Fev 2025
location_on
Sociedade Brasileira de Física - SBF Rua do Matão, travessa R, 187 - Edifício Sede - Cidade Universitária, São Paulo, SP, Brasil, CEP 05508-090, Tel: +55 (11) 3034-0429 - São Paulo - SP - Brazil
E-mail: rbef@sbfisica.org.br, marcellof@unb.br
rss_feed Acompanhe os números deste periódico no seu leitor de RSS
Ir para o topo Reportar erro