SlideShare uma empresa Scribd logo
1 de 101
Baixar para ler offline
PEM/COPPE/UFRJ
Universidade Federal do Rio de Janeiro
ENGENHARIA MECÂNICA
COMPUTAÇÃO CIENTÍFICA PARA ENGENHEIROS
Preparado por: Prof. Gustavo Anjos
E-mail: gustavo.rabello@coppe.ufrj.br
Vers~
ao: 25 de Dezembro de 2020
Resumo. Este texto de nı́vel introdutório tem como objetivo familiarizar o estudante
de graduação e pós-graduação na criação de ferramentas e solução de problemas reais en-
contrados em engenharia e que são modelados através de equações diferenciais ordinárias
e parciais. A linguagem de programação é usada para processamento de dados e também
para visualização de resultados, mostrando-se versátil e uma ferramenta indispensável
para o futuro profissional.
Esta figura representa as linhas de corrente de um escoamento
irrotacional com partı́culas nas vizinhaças de um objeto circular.
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
Conteúdo
1 Introdução 3
1.1 Considerações iniciais . . . . . . . . . . . . . . 3
1.2 Importância da linguagem de programação na
Engenharia Mecânica . . . . . . . . . . . . . . . 3
1.3 Python . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Octave . . . . . . . . . . . . . . . . . . . . . . . 3
1.5 C/C++ . . . . . . . . . . . . . . . . . . . . . . 4
1.6 Orientação a objetos . . . . . . . . . . . . . . . 4
1.7 Equações diferenciais . . . . . . . . . . . . . . . 4
1.8 Aspectos numéricos . . . . . . . . . . . . . . . . 6
1.9 Como medir erros . . . . . . . . . . . . . . . . . 7
1.10 Integração numérica . . . . . . . . . . . . . . . 9
1.11 Sistema linear de equações . . . . . . . . . . . . 10
1.12 Análise de estabilidade de von Neumann . . . . 12
1.13 Importância da validação do código numérico . 12
1.14 Elaboração de relatório . . . . . . . . . . . . . 13
1.15 Controle de versões - GIT . . . . . . . . . . . . 13
1.16 Editores de texto . . . . . . . . . . . . . . . . . 14
1.17 Visualização de resultados . . . . . . . . . . . . 16
2 Mecânica de massas pontuais 17
2.1 Movimento Horizontal de um Carrinho . . . . . 17
2.2 Velocidade terminal de uma gota . . . . . . . . 18
2.3 Lançamento de projétil . . . . . . . . . . . . . . 20
2.4 Sistema massa-mola . . . . . . . . . . . . . . . 21
2.5 Sistema massa-mola vertical . . . . . . . . . . . 24
2.6 Sistema massa-mola-amortecedor . . . . . . . . 25
2.7 Oscilador de Van Der Pol . . . . . . . . . . . . 27
2.8 Pêndulo simples . . . . . . . . . . . . . . . . . . 29
2.9 Pêndulo amortecido forçado . . . . . . . . . . . 32
2.10 Borboleta de Lorenz . . . . . . . . . . . . . . . 33
2.11 Falkner-Skan . . . . . . . . . . . . . . . . . . . 36
2.12 Mapa logı́stico . . . . . . . . . . . . . . . . . . 38
3 Geração de Malha 39
3.1 Classificação . . . . . . . . . . . . . . . . . . . . 39
3.2 Geração de malha 1D com espaçamento variável 41
3.3 Geração de malha 2D . . . . . . . . . . . . . . 42
3.4 Lista de nós de contorno em malha 2d . . . . . 43
3.5 Curvatura 2D . . . . . . . . . . . . . . . . . . . 44
3.6 Curvatura 3D . . . . . . . . . . . . . . . . . . . 46
3.7 Qualidade de malha . . . . . . . . . . . . . . . 47
4 Probabilidade e Estatı́stica 48
4.1 Números aleatórios . . . . . . . . . . . . . . . . 48
4.2 Passeio aleatório . . . . . . . . . . . . . . . . . 48
4.3 Método de Monte-Carlo . . . . . . . . . . . . . 48
5 Mecânica do contı́nuo 48
5.1 Método de Diferenças Finitas . . . . . . . . . . 50
5.2 Método de Elementos Finitos . . . . . . . . . . 65
6 Escoamento Compressı́vel 82
6.1 Equação de Burgers 1D . . . . . . . . . . . . . 82
6.2 Tubo de Choque 1D . . . . . . . . . . . . . . . 85
6.3 Bocal Convergente-Divergente . . . . . . . . . . 86
7 Turbulência 87
7.1 Introdução . . . . . . . . . . . . . . . . . . . . . 87
7.2 Escoamento turbulento em um canal . . . . . . 89
7.3 Comprimento de mistura de Van Driest . . . . 90
8 Escoamento multifásico 91
8.1 Introdução . . . . . . . . . . . . . . . . . . . . . 91
8.2 Teoria de Colisões . . . . . . . . . . . . . . . . 92
8.3 Escoamento com partı́cula - solução numérica . 94
8.4 Flutuação de velocidade . . . . . . . . . . . . . 95
8.5 Escoamento com múltiplas partı́culas . . . . . . 96
Appendices 97
A Álgebra Linear 97
A.1 Transformaçao do problema generalizado para a
forma padrão . . . . . . . . . . . . . . . . . . . 97
B Acústica 99
2
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
1 Introdução
1.1 Considerações iniciais
Este texto foi elaborado para atender as necessidades de ensino de programação numérica a alunos de Trans-
missão de Calor II do 8o
¯ perı́odo de Engenharia Mecânica da Universidade do Estado do Rio de Janeiro. Nas
primeiras seções o estudante pode obter informações sobre ferramentas usadas em programação numérica, como
o editor de texto, controle de versões e o paradigma de orientação a objetos. Seguindo o conteúdo do texto,
diversos exercı́cios são propostos para solução de problemas encontrados em engenharia, como a mecânica de
massas pontuais, onde a segunda lei de Newton é utilizada para modelagem do problema do tipo massa-mola
ou ainda lançamento de um projétil. Outros exercı́cios são sugeridos para solução de problema térmico e a
criação de malhas sofisticadas para o uso no método de elementos finitos. Este texto é finalizado com proble-
mas envolvendo escoamentos multifásicos onde duas fases distintas (contı́nua e dispersa) coexistem no mesmo
problema.
O texto está em contı́nuo desenvolvimento e ainda carece de informações essenciais para o desenvolvimento
de todos os exemplos apresentados. Por isso, o autor pede a compreensão do estudante para falta de dados e
exemplos mais ilustrativos ao longo do texto. Este texto está baseado no livro Mecânica Clássica [24] e outros.
1.2 Importância da linguagem de programação na Engenharia Mecânica
Tipos:
• interpretada
• compilada
Conceitos:
• estruturada
• modular
• orientada a objetos
Algumas linguagens de programação disponı́veis:
• Java
• C C++
• C#
• Objective-C
• Python
• Perl
• R
• PHP
• JavaScript
• Visual Basic .NET
• Delphi / Object Pascal
• Ruby
• Assembly
• Visual Basic
• MATLAB
• PL/SQL
1.3 Python
O Python é uma linguagem de programação de alto nı́vel, de script, que pode ser orientada a objetos. Esta lin-
guagem foi lançada por Guido van Rossun em 1991 como uma linguagem acadêmica para ensino de programação
numérica a alunos de graduação.
www.python.org
1.4 Octave
Esta linguagem de programação é de alto nı́vel, de script e fortemente orientada para matemática cientı́fica.
Diferentemente da linguagem Python, o Octave é distribuı́do através de uma GUI, vindo acompanhada de um
editor de texto, gerenciador de arquivos, depurador e outras funcionalidades auxiliares.
3
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
É uma linguagem gratuita e que pode ser utilizada em nos principais sistemas operacionais. Pode ser encontrada
no seguinte endereço:
www.gnu.org/software/octave/
1.5 C/C++
1.6 Orientação a objetos
A programação orientada a objetos é um modelo de projeto para desenvolvimento de projetos numéricos,
baseado na integração dos diversos segmentos do programa chamados objetos. Diferentemente da programação
estruturada, a orientação a objetos é conceituada no campo da abstração de conceitos do mundo real (ver [2]).
Abaixo encontra-se alguns conceitos relacionados à programação orientada a objetos.
• classe: estrutura para abstração de um conjunto de objetos com caracterı́sticas em comum através da
utilização de métodos e atributos;
• objeto/instância: elemento computacional que representa uma entidade abstrata ou concreta;
• atributo: são elementos que definem as partes (ou estruturas) de uma classe. Os valores associados aos
atributos definem os objetos.
• método: é a função que é executada pelo objeto ao receber instrução;
• herança: é um princı́pio que permite que classes compartilham métodos e atributos de outra classe;
• encapsulamento: conceito de tornar o programa mais flexı́vel, fácil de modificar e de usar, escondendo
detalhes do programa desnecessários para o conhecimento do usuário final;
• polimorfismo: uso do mesmo nome para múltiplos métodos com lista de argumentos diferentes;
Descrever diagrama UML (Unified Modeling Language).
1.7 Equações diferenciais
As equações diferenciais são usadas para modelar problemas fı́sicos onde a incógnita é uma função que aparece
na equação através de derivadas. As equações diferenciais são importantes na engenharia e podem ainda ser
encontradas em diversas aplicações práticas em quı́mica, biologia, medicina e fı́sica. A ordem de uma equação
diferencial é dada pela ordem da derivada de maior grau que aparece na equação, ou seja, uma equação diferencial
de ordem 3 apresenta a derivada d3
/dx3
como de maior grau, assim como uma equação diferencial de ordem 1
apresenta apenas a derivada primeira em sua formulação.
1.7.1 Classificação
As equações diferenciais podem ser classificadas em dois tipos distintos:
• equação diferencial ordinária (EDO)
• equação diferencial parcial (EDP)
As EDOs contém apenas funções de uma variável e derivadas desta mesma variável.
Uma equação que é originalmente parcial, pode se transformar em uma equação diferencial ordinária se for
simplificada para um problema unidimensional permanente (com derivada temporal nula). Este é o caso da
equação de difusão de calor, que é escrita na forma vetorial compacta como:
dT
dt
= α∇2
T (1)
4
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
A equação pode ser reescrita expandindo os seus termos:
dT
dt
= α

d2
T
dx2
+
d2
T
dy2
+
d2
T
dz2

(2)
note que fizemos uma hipótese de difusividade térmica constante α = cte para fins ilustrativos. Como esta
equação tem 3 variáveis independentes espaciais (x, y e z) e a variável temporal t, ela é classificada como equação
diferencial parcial, entretanto para o caso da difusão de calor unidimensional permanente ela se escreve:
d2
T
dx2
= 0 (3)
Para este caso, a equação acima é classificada como EDO pois apresenta apenas uma variável independente x.
As equações diferencias parciais (EDP) de 2a. ordem podem ser classificadas em três tipos distintos:
• Equação hiperbólica: usadas para estudo de vibrações, oscilações elétricas, acústica etc. É comumente
conhecida como Equação da Onda. Esta equação tem soluções do tipo v(x + ct) e v(x − ct), ou seja, a
função é deslocada para frente ou para trás com velocidade c no tempo t sem perda de informação.
∂2
u
∂t2
= a2 ∂2
u
∂x2
(4)
• Equação parabólica: usada no estudo de problemas de difusão de calor ou massa e propagação de calor.
Estas equações descrevem um processo fı́sico dissipativo dependente do tempo e a solução destas equações
são combinações de funções exponenciais e senoidais.
∂u
∂t
= a
∂2
u
∂x2
(5)
• Equação elı́ptica: usada para modelar campos magnéticos, hidrodinâmica e problemas de transferência de
calor estacionários, ou seja, que já se encontram em regime permanente. Na matemática se f(x, y) = 0,
esta equação recebe o nome de Equação de Laplace, em referência à Pierre Simon Laplace. Se f(x, y) 6= 0
esta equação recebe o nome de Equação de Poisson, em referência à Siméon-Denis Poisson.
∂2
u
∂x2
+
∂2
u
∂y2
= f(x, y) (6)
Um método simples para identificação do tipo de EPD pode ser obtido da seguinte forma: Se uma função u(x, y)
pode ser definida no espaço R2
, qualquer EPD de 2a. ordem pode ser escrita da seguinte forma:
a
d2
u(x, y)
dx2
+ 2b
d2
u(x, y)
dxdy
+ c
d2
u
dy2
+ d
du
dx
+ e
du
dy
+ fu = g (7)
Considerando que os coeficientes a, b e c são constantes e tais que:
a2
+ b2
+ c2
6= 0 (8)
Podemos classificar as EPDs através da seguinte relação:
• hiperbólicas: b2
− 4ac  0, raı́zes reais e distintas;
• parabólicas: b2
− 4ac = 0, raı́zes reais e idênticas;
• elı́pticas: b2
− 4ac  0, raı́zes conjugadas e complexas;
1.7.2 Solução
Uma vez que as equações diferenciais apresentam derivadas em sua formulação, sua solução depende fortemente
de condições auxiliares. Ou seja, sem condições auxiliares a equação diferencial apresenta múltiplas soluções.
Uma vez conhecidas as condições auxiliares, uma solução particular caracterı́stica do problema proposto pode
ser encontrada. Podemos então classificar as soluções das equações diferenciais da seguinte forma:
5
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
• Solução geral: solução que apresenta n constantes independentes entre si, onde n é a ordem da equação
diferencial. Essas constantes, de acordo com a conveniência, podem ser escritas como c, 2c, c2
, lnc. Se a
equação diferencial apresenta derivada de ordem máxima 2, como é o caso da equação de difusão de calor,
duas constantes estarão presentes na solução: c1 e c2:
• Solução Particular: solução obtida a partir da solução geral do problema, mediante a imposição das
condições dadas (chamadas condições iniciais ou condições de contorno), e consequente substituição das
constantes c da solução geral.
Exemplificamos nossa classificação da soluções através da equação diferencial de ordem 2 abaixo:
d2
T
dx2
= Q (9)
onde T representa a temperatura, Q uma fonte de calor e x a variável independente. Esta é a equação de difusão
de calor com fonte térmica. Para encontramos a solução desta equação diferencial ordinária, basta integrar a
equação duas vezes em x:
T(x) =
Q
2
x2
+ c1x + c2 (10)
Note que a solução T(x) apresenta as constantes de integração c1 e c2, classificando-se assim como a solução
geral do problema de difusão de calor com fonte térmica. Para encontramos a solução particular, precisamos
caracterizar o problema fı́sico através das condições auxiliares (ou condições de contorno). Como exemplo,
consideraremos o caso onde as temperaturas nas extremidades (x = 0 e x = L, onde L é o comprimento total)
sejam conhecidas: T(x = 0) = T1 e T(x = L) = T2. A solução particular do problema de difusão de calor
com fonte térmica é obtido através da substituição das condições auxiliares na solução geral:
T(x = 0) = T1 =
Q
2
02
+ c10 + c2 −→ c2 = T1 (11)
T(x = L) = T2 =
Q
2
L2
+ c1L + T1 −→ c1 =
T2 − T1
L
−
Q
2
L (12)
Uma vez encontradas as constantes c1 e c2 através da substituição das condições de contorno na solução geral,
encontramos a solução particular do problema:
T(x) =
Q
2
x2
+

T2 − T1
L
−
QL
2

x + T1 (13)
1.7.3 Linear/não-linear
Uma equação diferencial ordinária ou parcial pode ser ainda classificada como linear ou não-linear. Quando
uma equação é linear, diversas propriedades podem ser utilizadas, como é o caso da combinação de soluções que
também são soluções da mesma equação. (REFERENCIA)
As equações não-lineares não possuem tais propriedades e são, como consequência, mais interessantes e ricas
em fenômenos fı́sicos. Além disto, as equações não-lineares são mais difı́ceis de solucionar e pode levar ao caos.
(REFERENCIA)
1.8 Aspectos numéricos
No desenvolvimento de metodologias numéricas para solução de problemas, rotineiramente nos deparamos com
a dúvida da solução calculada em representar corretamente o problema que estamos interessados. Com isso,
definimos aqui algumas etapas para solucionar problemas diferenciais através de técnicas computacionais.
O modelo matemático é a equação que descreve o fenômeno fı́sico.
O modelo geometrı́co é a forma representativa do problema, que pode ser feita, por exemplo, em um programa
do tipo CAD.
6
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
O método de discretização é maneira que traduzimos o modelo matemática de modo que possamos repetir
um procedimento consistentemente para encontrar a solução aproximada. O computador é ótimo instrumento
para fazer procedimentos repetitivos.
O pós-processamento é toda manipulação de dados que é feta depois de encontrar a solução numérica das
equações. Nesta etapa, o processamento de dados é feito para obtenção de outros parâmetros importantes do
problema que não são calculados diretamente através da solução das equações.
A visualização dos resultados é a última etapa do desenvolvimento e mostra a solução numérica de uma
forma clara para o cientista.
No entanto, o algoritmo de solução numérica do problema deve ser avaliado através de quatro importantes
aspectos: precisão, consistência, convergência e estabilidade. Abaixo descrevemos detalhadamente o que cada
aspecto significa.
• Precisão: medida quantitativa da distância entre a solução numérica obtida através da discretização das
equações do problema e sua solução exata, caso exista;
• Consistência: fidelidade de representação da solução numérica com a equação diferencial do problema;
• Convergência: propriedade na qual a solução numérica converge para uma mesma solução quando a
distribuição espacial de pontos e o passo de tempo são reduzidos para valores arbitrariamente pequenos;
• Estabilidade: ausência de instabilidades temporais de natureza não fı́sica que prejudicam a solução
numérica.
1.9 Como medir erros
Toda vez que não conseguimos representar um valor exato, adicionamos um erro no sistema. Dependendo do
algoritmo, este erro pode ser propagado até o final do processo, correndo o risco de acumular e fazer com que
não haja convergência para a solução do problema proposto. Em outras palavras, a distância entre a solução
numérica e a solução exata cresce até um ponto onde o resultado não condiz mais com o problema. Os erros
podem ser classificados com a seguir:
• erro de trucamento: é a diferença entre o resultado real e o resultado que deveria ser produzido por
um algoritmo dado usando aritmética exata. Este erro é devido a aproximações de truncamento de séries
infinitas, como por exemplo substituindo uma derivada por uma diferença finita, ou substituindo um
dı́zima periódica por um número com 3 casas decimais, ou pela substituição de uma função arbitrária por
um polinômio, ou ainda pela parada de um processo iterativo antes da convergência.
• erro de arredondamento: é a diferença entre o resultado produzido por um algoritmo dado usando
aritmética exata e o resultado do mesmo algoritmo usando precisão finita, aritmética de arredondamento.
É devido ao falta de exatidão na representação de um número real e operações aritméticas em cima destes
números.
Muitas vezes desejamos calcular a distância que uma aproximação se encontra do valor exato da quantidade que
estamos medindo. Esta aproximação muitas vezes está associada ao tipo de metodologia que estamos empre-
gando ou simplesmente pelo fato de aproximarmos o valor de uma constante em uma equação. O significado de
um erro cometido está estritamente relacionado à magnitude da quantidade medida ou calculada. Para ilustrar
este problema, considere o peso de uma mala de viagens 32kg exatamente, porém ao medir o peso desta mala
em uma balança analógica verificamos que a leitura do valor é de 31.8kg. Como poderı́amos saber se este erro
está dentro da tolerância apresentada pelo fabricante da balança?
Para responder a esta pergunta, devemos definir uma métrica associada ao erro de medição. Esta métrica é
chamada de norma e o erro pode ser classificado de acordo com a seguinte definição:
Erro absoluto = valor aproximado - valor exato
Erro relativo = erro absoluto / valor exato
As normas (ou métricas) de um vetor de dados é dada a seguir:
||x||p =
 n
X
i=1
|xi|p
1/p
(14)
7
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
Em computação cientı́fica, três normas destacam-se:
• norma 1:
||x||1 =
n
X
i=1
|xi| (15)
• norma 2:
||x||2 =
 n
X
i=1
|xi|2
1/2
(16)
• norma ∞ ou norma inf :
||x||∞ = max|xi| (17)
Para ilustrar o exemplo, considere os seguintes vetores:
x =












1
100
15
7












x̂ =












1.1
98
14
5.8












(18)
Onde x representa o vetor de valores exatos e x̂ o vetor de valores aproximados. O erro absoluto pode ser
calculado nas três normas apresentadas da seguinte forma:
||x − x̂||1 =
4
X
i=1
|xi − x̂i| (19)
||x − x̂||2 =
 4
X
i=1
|xi − x̂i|2
1/2
(20)
||x − x̂||∞ = max4
i=1|xi − x̂i| (21)
O erro relativo pode ser calculado também através das normas apresentadas:
x − x̂
x 1
=
4
X
i=1
xi − x̂i
xi
(22)
x − x̂
x 2
=
 4
X
i=1
xi − x̂i
xi
21/2
(23)
x − x̂
x ∞
= max4
i=1
xi − x̂i
xi
(24)
8
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
1.10 Integração numérica
Método de Euler explı́cito é o método mais tradicional de aproximação de derivadas. O método busca aproximar
a derivada através da reta tangente ao ponto considerando dois pontos consecutivos dividos pela distância entre
eles. Considere a seguinte equação diferencial ordinária:
du
dt
= f(t, u) u(t0) = u0 (25)
onde f(t, u) é uma função qualquer e u(t0) = u0 representa a condição inicial do problema em t0. Um exemplo
de equação diferencial ordinária pode ser apresentado a seguir:
du
dt
= −2tu2
u(t0) = 1 (26)
para este caso, a função f(t, u) = −2tu2
e a condição inicial do problema é u(t0) = 1. O método de Euler
explı́cito procura calcular a inclinação da reta tangente utilizando a diferença do valor da variável u no tempo
atual, ou seja, un
e o valor da variável no tempo seguinte un+1
divididos pela distância entre eles, que para o
presente caso, é o passo de tempo ∆t, ou seja:
un+1
− un
∆t
= −2t(un
)2
(27)
Como a variável do tempo seguinte un+1
é desconhecida, podemos calculá-la através das variáveis conhecidas
no tempo n, portanto:
un+1
= un
+ ∆t[−2t(un
)2
] (28)
Realizando este procedimento sucessivamente encontramos o valor da variável u para os tempos n + 1, n + 2,
n + 3, ..., até um tempo que seja suficientemente longo para montarmos a solução discreta da função u no
domı́nio de interesse. Com isso, realizamos uma integração numérica que substitui a integração analı́tica:
u(t) =
Z
f(t, u)du ≈
X
f(t, u)du (29)
Como introdução aos métodos de alta ordem de Runge-Kutta, podemos ainda escrever o método de Euler
explı́cito, também conhecido como método de Runge-Kutta de 1a. ordem (RK1) com o suporte de uma constante
k1, ou seja:
k1 = f t, un

(30)
un+1
= un
+ ∆tk1 (31)
Método de Runge-Kutta de 2a. ordem
k1 = f t, un

k2 = f

t +
∆t
2
, un
+
∆t
2
k1

(32)
un+1
= un
+
∆t
2
k1 + k2

(33)
Método de Runge-Kutta de 3a. ordem
9
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
k1 = f t, un

k2 = f

t +
∆t
2
, un
+
∆t
2
k1

k3 = f

t +
∆t
2
, un
+
∆t
2
k2

(34)
un+1
= un
+
∆t
6
k1 + 4k2 + k3

(35)
Método de Runge-Kutta de 4a. ordem
k1 = f(t, un
)
k2 = f

t +
∆t
2
, u +
∆t
2
k1

k3 = f

t +
∆t
2
, u +
∆t
2
k2

k4 = f t + ∆t, u + ∆tk3

(36)
un+1
= un
+
∆t
6
k1 + 2k2 + 2k3 + k4

(37)
1.11 Sistema linear de equações
Um sistema linear de equações algébricas é um conjunto de equações que devem ser resolvidas ao mesmo tempo.
Usualmente, as equações são acopladas umas às outras, ou seja, termos de uma equação aparecem nas outras e
vice-versa. Um exemplo de sistema linear de equações é dado abaixo, onde cada equação representa uma reta
no espaço bidimensional:
A =




4 0
−3 2








x1
x2



 =




2
1




Este sistema linear do tipo Ax = b representa um conjunto de duas equações lineares algébricas:
4x1 + 0x2 = 2 (38)
−3x1 + 2x2 = 1 (39)
A soluções deste sistema de equações é o ponto comum de interseção entre as duas retas. Esta solução pode ser
obtida através de operações de adição, subtração, multiplicação e/ou divisão entre as equações com o objetivo
de isolar os valores de x1 e x2 e, com isso, encontrar a solução do sistema. Podemos também resolver o problema
na forma matricial:
Ax = b (40)
A−1
Ax = A−1
b (41)
Ix = A−1
b (42)
x = A−1
b (43)
Ou seja, ao encontramos a inversa da matriz A, podemos fazer uma operação de multiplicação entre matriz e
vetor A−1
b e encontra a solução do problema x.
10
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
A solução de problemas numéricos através da discretização de equações diferenciais resulta em sistemas lineares
que normalmente tem dimensão maior que 2, ou seja, o número de equações é suficientemente grande para
dificultar a solução através de eliminações (soma, subtração, multiplicação e/ou divisão) como foi sugerido para
o problema inicial com 2 equações. Neste caso, a solução através do sistema linear deve ser feita na forma
matricial com auxı́lio do computador.
1.11.1 Existência e Unicidade
Uma matriz A é considerada não-singular se satisfaz qualquer uma das condições abaixo:
1. A matriz A possui inversa A−1
, tal que AA−1
= A−1
A = I;
2. det(A) 6= 0;
3. posto(A) = n, onde n é o número máximo de colunas ou linhas linearmente independentes da matriz;
4. para qualquer vetor z 6= 0, Az 6= 0.
Caso contrário, a matriz A é dita singular. Dependendo da singularidade da matriz e do tipo de sistema linear,
o resultado pode ser único, múltiplo ou não existir. Com isso, a solução de um sistema linear com matriz
quadrada pode ser resumido da seguinte forma:
• solução única: A é não-singular, o vetor b arbitrário, inclusive vetor de zeros;
• infinitas soluções: A é singular, b ∈ span(A);
• sem solução: A é singular, b /
∈ span(A).
1.11.2 Tipos de sistemas lineares
Abaixo encontra-se uma lista de alguns tipos importantes de sistemas lineares que devem ser notados na hora
da discretização de equações diferenciais. Dependendo da escolha do método de discretização, a estrutura da
matriz favorece a solução do sistema linear resultante.
• simétrica: A = AT
, ou seja, aij = aji para todo i, j;
• positiva definida: xT
Ax  0 para todo x 6= 0;
• em banda: aij = 0 para todo |i − j|  β, onde β é a largura de banda de A. Exemplo é o caso da matriz
tridiagonal onde β = 1;
• densa: a maioria dos elementos de A é diferente de zero.
• esparsa: a maioria dos elementos de A é igual a zero.
Conhecer a estrutura da matriz é sempre importante para decidirmos como e quando vamos armazená-la na
memória do computador. Por exemplo, no caso da matriz esparsa, devemos armazenar no computador apenas
os valores diferentes de zero, pois sabemos com antecedência qualquer operaçao matemática de um elemento
zero da matriz. Um outro exemplo é conhecer se a matriz é do tipo positiva definida, neste caso podemos usar
rotinas computacionais especiais para atingirmos a solução sem gastar recursos computacionais demasiados.
1.11.3 Solução exata e solução aproximada
Dizemos que a solução exata de um sistema linear foi encontrada quando resolvemos o sistema linear Ax = b
através de algum método direto (assumindo aritmética exata), como por exemplo na inversão da matriz A e a
posterior multiplicação pelo vetor b. No entanto, veremos que encontrar a inversa da matriz A−1
normalmente
não é um procedimento computacionalmente vantajoso. Neste caso, utilizaremos técnicas de álgebra linear para
obtermos uma solução aproximada do sistema linear x̂ sem que haja necessidade da inversão da matriz A.
Deve-se notar que, computacionalmente, nem os métodos diretos produzem soluções exatas na maior parte dos
problemas. Neses, as divisões e multiplicações inerentes do método podem introduzir erros de arredondamento.
11
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
1.11.4 Resı́duo
O resı́duo r de um sistema linear é a diferença entre a solução exata do sistema linear x e a solução aproximada
x̂. É interessante garantir que o resı́duo seja sempre pequeno, pois ele representa a distância entre a solução
exata x e àquela calculada x̂. O resı́duo pode ser calculado como:
r = b − Ax̂ (44)
1.11.5 Método direto x método iterativo
A partir de operações elementares é possı́vel implementar uma série de métodos distintos para encontrar a
soluçãoo de um sistema de equações lineares. Os métodos que utilizam uma sequência com um número finito
de operações elementares para construir a solução são denominados métodos diretos. Para um problema de n
incógnitas, n3
operações são necessárias para solução do sistema linear. Com isso, grandes sistemas lineares são
extremamente custosos para solução. Exemplos de métodos diretos são: eliminação de Gauss-Jordan, eliminação
de Gauss e eliminação de Gauss com pivotiamento.
Por outro lado, os métodos iterativos não procuram encontrar o valor exato de x, e sim um valor aproximado x̂
que seja seja suficientemente próximo ao valor exato sem a necessidade de excessivas operações aritméticas. Estes
métodos começam com um chute inicial da solução e através de sucessı́vas iterações, convergem iterativamente
até a uma solução aceitável próxima da solução exata. A solução aceitável é escolhida baseada em métricas,
por exemplo a norma do resı́duo ||b|| atingir um valor pequeno. Exemplos de métodos iterativos são: método
de Jacobi, método de Gauss-Seidel e método dos gradientes conjugados.
1.12 Análise de estabilidade de von Neumann
Em análise numérica, a análise de estabilidade de von Neumann é um método para avaliar a estabilidade de
uma discretização pelo método de diferenças finitas em equações diferencias. Esta análise também é conhecida
como análise de Fourier, uma vez que utilizada espansões em séries de Fourier para a análise de estabilidade.
Escolhemos assim o método de diferenças finitas centradas e o método explı́cito no tempo aplicados à uma
equação hiperbólica unidimensional como modelo exemplo para a análise de estabilidade aqui proposta. Nota-
se que esta análise pode ser feita em diversas equações diferenciais para compreensão de limites de estabilidade
numérica.
∂φ
∂t
+ c
∂φ
∂x
= 0 (45)
φn+1
i − φn
i
∆t
+ c
φn
i+1 − 2φn
i + φn
i
∆x2
= 0 (46)
Considere, por tanto, as seguintes expansões em série de Fourier para os termos φ da equação:
φn+1
i = Φn+1
eIQxi
(47)
φn
i+1 = Φn
eIQxi+1
= Φn
eIQx+∆x
= Φn
eIQx
Φn
eIQ∆x
(48)
φn
i−1 = Φn
eIQxi−1
= Φn
eIQx−∆x
= Φn
eIQx
Φn
e−IQ∆x
(49)
O próximo passo para efetuarmos a análise de von Neumann é substituir as expressões das expansões em série
de Fourier na Eq. (46).
1.13 Importância da validação do código numérico
Validação de código é importante para se testar os limites de aplicação do código numérico bem como se certificar
de o código está respondendo como planejado. Um código numérico deverá sempre ser validado e testado. Para
o caso da engenharia, as validações devem cobrir de três campos importantes:
• modelo matemático
12
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
• fı́sica do problema
• lógica numérica
O modelo matemático adotado para reproduzir o fenômeno fı́sico deve estar condizente com a realidade do
problema, ou seja com a fı́sica do problema. Por exemplo, ao se tratar problemas de condução unidimensional
de calor em sólidos sem fonte de calor, usa-se a equação de Laplace para encontrar a distribuição de temperatura.
Através desta escolha, modela-se o problema fı́sico através de uma equação matemática.
A lógica numérica trata das sequências lógicas que são criadas no código numérico para automatização de
processos repetitivos. Esta lógica deve ser questionada durante todo o desenvolvimento do código para que o
cientista/programador não acredite que um erro pode estar vindo daquele procedimento. Note que esta lógica
pode abranger o código como um todo, bem como trechos envolvendo funções, loops, classes etc. É importante
validar e verificar que o procedimento leva a resultados esperados.
Além destes campos, é importante verificar a abrangência da solução obtida, conhecendo o erro inserido nas
discretizações e sua propagação através dos diversos procedimentos (ver [9]).
1.14 Elaboração de relatório
Um relatório técnico é um documento que descreve resultados parciais ou totais de um determinado experimento,
seja ele de natureza numérica, experimental ou puramente analı́tico. No presente texto, estamos interessados na
elaboração de relatórios técnicos cientı́ficos para a área de Engenharia e ciências afins. No relatório técnico, o
pesquisador deve considerar que o texto a ser produzido poderá ser usado por outros estudantes com intuito de
prosseguir o estudo previamente realizado. Com isto, fica claro que o texto deverá conter todas as informações
necessárias para que outro estudante consiga reproduzir integralmente os resultados encontrados no relatório
técnico.
Dependendo da quantidade de trabalho realizada, o relatório técnico pode também receber nomes caracterı́sticos
em diferentes perı́odos de estudo universitário e de pós-graduação. O trabalho de conclusão de curso (TCC)
ou monografia é um relatório técnico das atividades de um estudante que é apresentado ao final de um curso
de graduação. Este representa a sı́ntese da formação adquirida ao longo da formação universitária. A dis-
sertação é também um relatório técnico sobre um tema de pesquisa ao qual o pesquisador dedicou seu estudo
no perı́odo do mestrado acadêmico. Tanto a monografia de graduação quanto a dissertação de mestrado não
devem obrigatoriamente ser temas inovadores, jamais feitos anteriormente. No entanto, a tese de doutorado
deve obrigatoriamente ter conteúdo inédito para o conhecimento, visando a obtenção de um tı́tulo de doutor.
A tese de doutorado é um relatório com um nı́vel de aprofundamento técnico muito maior que os outros textos,
normalmente realizado num perı́odo de 4 anos.
Sugere-se um modelo básico de relatório técnico cientı́fico que poderá conter total ou parcialmente as seguintes
seções (ou capı́tulos):
• capa
• ı́ndice
• resumo
• abstract
• introdução
• revisão bibliográfica
• metodologia
• resultados
• conclusão
• agradecimentos
• referências bibliográficas
• apêndices
1.15 Controle de versões - GIT
O controle de versões é necessário no desenvolvimento de softwares para que o programador tenha um histórico
de cada etapa relacionada a sua construção. Este controle digital se assemelha a um caderno de anotações,
onde o estudante anota o desenvolvimento de suas atividades em cada dia de trabalho quando executa uma
tarefa qualquer. A qualquer momento o estudante pode voltar nas anotações e saber o que foi modificado ou
realizado na data em questão. Analisando mais profundamente esta mesma situação, poderı́amos envolver mais
um estudante para realizar o mesmo trabalho, onde cada pessoa ficaria encarregada de um turno no dia. Se as
anotações são feitas rigorosamente, o estudante seguinte toma conhecimento das ações e decisões tomadas pelo
13
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
anterior. Existem diversos controladores de versão que ainda são bastante utilizados pela comunidade: SVN,
CVS, Git, Mercurial, Monotone, SVK, Rational ClearCase, Borland StarTeam etc.
1
2
3
4
5
6
7
8
9
10
T1
T2
tag 1
tag 2
branch
descontinuado
merge
merge
trunk branch
branches
Figura 1: Exemplo da visualização do
histórico de um projeto usando
um sistema de controle de versões.
As palavras em inglês são os
termos usados como referência nas
operações sobre as diversas versões
de um projeto.
A ferramenta Git é um sistema de controle de versão distribuı́do e
também um sistema de gerenciamento de código fonte. O Git foi
projetado pelo criador do sistema Linux (Linus Torvalds) e é ado-
tado por diversas empresas que desenvolvem softwares comerciais
de pequeno e grande porte (VLC, Reddit, rsync, Samba, VTK). O
Git é um software livre e pode ser instalado em todos os sistemas
operacionais através de download na página (https://git-scm.com).
Abaixo encontra-se alguns comandos do git bastante utilizados:
• git add ”nome-do-arquivo”adiciona um arquivo no git
• git commit submete as modificações marcadas por add para
o git
• git commit -a submete todas as modificações para o git
• git log mostra descrição do desenvolvimento do projeto
• git shortlog mostra descrição curta do desenvolvimento do
projeto
• git status verifica modificações no diretório do projeto
• git branch lista branches do projeto
• git init inicializa um diretório git
• git push enviar modificações para o servidor
• git pull atualiza versão local pela versão do servidor
É importante notar que o Git não é um sistema dedicado à lin-
guagem de programação, podendo ser usando em qualquer tipo de
código fonte, como por exemplo em documentos Word ou Notepad
e de LaTeX.
1.16 Editores de texto
Existem diversos editores de texto são aplicativos essenciais em qualquer ambiente de trabalho e estão disponı́veis
para instalação nos diversos sistemas operacionais existentes. Alguns deles já são pré-instalados pelo sistema,
enquanto que alguns outros devem ser comprados ou transferidos gratuitamente de páginas na internet. Alguns
exemplos de editores de texto conhecidos no sistema Windows são Microsoft Office e Notepad, no sistema
Mac OS X pode-se citar o TextEdit e o Notes. Alguns editores estão disponı́veis para os diversos sistemas
operacionais, como é o caso do Microsoft Word, encontrado nos sistemas Windows e Mac OS X e o OpenOffice
que pode ser instalados nos sistemas Windows, Mac OS X e Linux. Um editor de texto pode ser projetado para
criar/editar diversos tipos de texto, entretanto também pode ser especializado em uma determinada função,
como por exemplo em textos de programação numérica. A seguir serão apresentados alguns editores de texto
flexı́veis voltados para programação numérica e distribuı́dos livremente.
1.16.1 Nano
O Nano é um editor de texto desenvolvido para sistemas do tipo Unix que também
utiliza baixo recurso gráfico. Este editor é livre e pode ser baixado gratuitamente
em:
www.nano-editor.org
O Nano é um editor de texto desenvolvido em ambiente de texto, consumindo assim
menos recursos computacionais. Exige pouca dedicação do estudante na fase inicial
de utilização, uma vez que apresenta comandos de fácil execução mostrados em
14
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
uma barra na parte inferior do editor e ambiente intuitivo. Este editor é altamente
configurável, podendo acrescentar e modificar as cores que são usadas para identificar
funções em linguagens de programação.
1.16.2 Vim
O VIM é um editor de texto poderoso que utiliza baixo recurso gráfico, tornando-o
flexı́vel, versátil e de baixı́ssimo consumo computacional. Apesar de ser um edi-
tor que opera em modo texto, é possı́vel encontrar versões deste editor em modo
gráfico (gvim), acompanhado de botões para abrir arquivo, gravar, editar, impri-
mir etc. É interessante notar que a curva de aprendizagem deste editor necessita
do programador um esforço inicial para que ele consiga dominar as funções básicas
de edição, entretanto o próprio vim oferece uma ferramenta de tutorial que vem
acompanhada do editor: vimtutor. Abaixo encontra-se alguns comandos de edição
bastante utilizados:
• :w gravar documento
• :q sair do editor
• :qa sair do editor caso esteja editando mais de um documento
• :wq gravar o documento e sair do editor
• :wqa gravar todos os documentos e sair do editor
• :saveas gravar como novo documento
• :e . abrir gerenciador de arquivos no VIM
• :args lista de arquivos abertos no editor
• :e nome-do-arquivo editar outro arquivo
• :split nome-do-arquivo separar janelas horizontalmente e carregar outro arquivo
• :vsplit nome-do-arquivo separar janelas verticalmente e carregar outro arquivo
• :sview nome-do-arquivo abrir arquivo em modo de leitura
• :set backup criar arquivo de backup
• :ggVG selecionar todo documento
• :make rodar script Makefile no editor
• :32 ir para a linha 32
O editor de texto VIM suporta a instalações de aditivos para facilitar o desenvolvimento de projetos. Alguns
exemplos são:
• taglist.vim - gerenciador de arquivos fonte
• The Nerd Commenter - plugin para facilitar comentários em diversos tipos de arquivos
• Align - alinhamento de textos automáticos
• BlockComment.vim - automatização de comentários de blocos de código
• DirDiff.vim - plugin para manipulação de diretórios
Os aditivos devem ser instalados na pasta de instalação do editor VIM. Estes aditivos estão centralizados no
seguinte endereço eletrônico:
www.vim.org/scripts/
Este editor de texto é compatı́vel com os mais importantes sistemas operacionais.
1.16.3 Atom
15
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
O Atom é um editor de textos de código aberto que está atualmente disponı́vel
para os mais usuais sistemas operacionais: macOS, Microsoft Windows e Linux.
Este editor foi desenvolvido pela equipe que criou o GitHub e, por isso, tem suporte
direto para controle de versões Git. Este editor possui suporte para diversos tipos de
linguagem de programação como Python, C/C++, Markdown, Java e outros tantos.
Neste sentido, o ambiente de programação se torna mais prazeroso visualmente e
oferece funcionalidades que podem ser usadas no dia do desenvolvedor. Na janela do
editor, além da caixa para escrever o texto, uma coluna com a árvore de diretórios
do programa pode ser visualizada, agilizando a mudança de arquivos e posterior edição.
O editor de texto Atom pode ser encontrado no seguinte endereço eletrônico:
https://atom.io
1.16.4 Sublime Text
O editor de texto Sublime Text é um poderoso ambiente de programação que reúne
funcionalidades necessárias para o desenvolvedor de códigos numéricos agilizar sua
produção. Na janela do programa observa-se a acessibilidade de arquivos do com-
putador em uma coluna e o editor de texto em si. Algumas vantagens deste editor
podem ser relacionadas a seguir:
• Goto Anything: função para abrir arquivos com uso mı́nimo de teclas, além
de encontrar facilmente sı́mbolos, linhas e palavras;
• Multiple selections: faça a mesma modificação no texto para diversas partes
ao mesmo tempo;
• Split editing: compartilhar a tela do editor com 2 ou mais arquivos ao mesmo
tempo.
Este editor está disponı́vel para diversos sistemas operacionais nas versões de 32bits e 64bits.
1.17 Visualização de resultados
A visualização do resultado é de extrema importância no cálculo numérico. Ela permite uma análise qualita-
tiva dos resultados, mostrando tendências e permitindo sua compreensão global, ao invés de analisármos uma
sequência de números em uma tabela. A visualização pode ser gráfica ou através de texto, dependendo do
problema a ser estudado. A plotagem de resultados em eixos bidimensionais também é fundamental para se
conhecer os resultados e seu comportamento. Existem diversas ferramentas de visualização disponı́veis e cabe
ao estudante decidir qual ferramenta é mais apropriada para seu problema.
O matplotlib é uma biblioteca gráfica disponı́vel para a linguagem Python que apresenta diversos recursos
para visualização de dados. Por ser uma biblioteca, o estudante poderá aproveitar parte de sua programação
numérica como entrada para os gráficos. Esta biblioteca possibilita a visualização de gráficos em diversos tipos
de formato, como gráfico de barras, funções, gráficos tipo pizza, distribuições, visualização de superfı́cies, além de
prover algumas funcionalidades relacionadas ao processamento gráfico, como um gerador de malhas triangulares
usando algoritmo de Delaunay. A biblioteca pode ser encontrada no seguinte link:
https://matplotlib.org
O gnuplot é um programa gratuito para visualização de resultados através da plotagem de gráficos de um
arquivo texto. Ele está disponı́vel para diversos sistemas operacionais, incluindo Linux, Microsoft Windows e
Mac OSX. O gnuplot é interativo e baseado em linha de comando e scripts (arquivos textos com instruções), nele
é possı́vel executar loops como se estives em um ambiente de programação. Este programa por se encontrado
no seguinte endereço:
http://www.gnuplot.info
O Paraview é uma ferramenta de código aberto e gratuita para visualização cientı́fica e análise de dados,
compatı́veis com diversos formatos de entrada de resultados. Diversos recursos estão disponı́veis para proces-
samento de dados e geração de gráficos auxiliares, possibilitando uma análise mais detalhada dos resultados
obtidos. Gráficos bidimensionais e tridimensionais são facilmente processados pelo Paraview através de botões
16
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
e comandos simples. Além disso, diversos recursos mais sofisticados estão disponı́veis ao usuário para que se
possa realizar um pós-processamento detalhado dos resultados obtidos em simulações numéricas. Módulos de
Python também estão disponı́veis para acessar os conteúdos do Paraview através de instruções em linguagem
de programação. Esta ferramenta está disponı́vel nos principais sistemas operacionais e pode ser encontrada no
seguinte endereço:
http://www.paraview.org
2 Mecânica de massas pontuais
2.1 Movimento Horizontal de um Carrinho
Neste exemplo deseja-se calcular como a força de atrito linear Fdrag = −bv atua em um carrinho com massa
m a fim de desacelerá-lo até sua completa parada na direcao x. Desconsidere o atrito dos mancais no eixo de
rodas do carrinho em Fig. (2).
v0
Fdrag
x
Figura 2: Desaceleração de carrinho por atrito do ar linear Fdrag = −bvx.
m
dvx
dt
= −bv (50)
Para encontramos a solução numérica deste problema, usaremos diferenças finitas progressiva para a discre-
tização da derivada da velocidade em relação ao tempo:
m
vn+1
x − vn
x
∆t
= −bvx (51)
Note que o método de discretização acima recebe também o nome de Método de Euler para solução de equação
diferencial ordinária. Este método é o tipo de método explı́cito mais básico para integração numérica. Como
todo método numérico, o Método de Euler é uma aproximação da solução exata, por isso, a solução numérica
pode se afastar da solução exata dependendo da escolha do tamanho do passo de tempo ∆t. No limite onde
∆t tende a zero, a solução numérica coincide com a solução exata. Em problemas simples, pode-se escolher um
passo de tempo extremamente pequeno, de modo que o erro gerado pela solução numérica seja praticamente
desprezı́vel. Entretanto, para problemas de grande porte, o uso de passos de tempo pequenos inviabilizam a
solução devido à duração total de simulação, que pode levar dias, meses ou até mesmo anos para que se chegue
na solução desejada. Outros métodos de aproximação podem ser usados para obtenção de resultados mais
precisos e mais rápidos. No caso de equações ordinárias, pode-se usar o Método de Runge-Kutta.
Uma vez encontrada a equação discreta da equação ordinária, pode-se determinar o valor da velocidade no
próximo passo de tempo n + 1 fazendo:
vn+1
x = vn
x − ∆t
bvn
x
m
(52)
Este procedimento pode então ser repetido sucessivamente para que se obtenha a velocidade em diversos tempos,
ou seja, n+1, n+2, n+3, n+4 . . . e com isso determine a distribuição da velocidade em função do tempo. Para
o problema em questão, observa-se que a velocidade diminuirá exponencialmente até um valor próximo a zero,
concluindo-se que a velocidade do carrinho foi reduzida até sua parada completa. Note que à priori não se sabe
quantas repetições devem ser realizadas no cálculo de vn+1
para que se obtenha o valor zero para a velocidade.
Este cálculo dependerá dos dados do problema e do tamanho escolhido para o passo de tempo ∆t.
Para efeitos de validação do método de cálculo numérico apresentado, pode-se usar a solução analı́tica da Eq. (50)
para v(t). Note que nem sempre é possı́vel obter solução analı́tica de problemas para validação, entretanto busca-
se, sempre que possı́vel, o uso desta ferramenta para comprovação do código numérico elaborado. A solução
17
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
analı́tica toma a seguinte forma:
v(t) = v0e−bt/m
(53)
onde v0 é a velocidade inicial do carrinho, t é o tempo medido em segundos e b é o coeficiente de atrito linear.
Ao integrarmos novamente a equação de v(t) obtemos a solução da posição, já que dx/dt = vx:
x(t) =
Z t
0
v(t)dt = x∞(1 − e−bt/m
) (54)
onde x∞ = vx0m/b.
A solução numérica do problema pode ser encontrada na Fig. (3) onde a comparação com a solução exata (ou
analı́tica) é feita para validação dos cálculos de discretização. Como esperada, a solução do problema em t = 0s
é a própria velocidade inicial. Com o tempo se aproximando de t = 60s, a velocidade se reduz assintoticamente
ao valor v = 0. Note que o tempo de simulação numérica poderia ter ultrapassado o valor de t = 60s, entretanto
o resultado não mudaria, com isso assume-se que depois deste valor de tempo, a variação da velocidade é
desprezı́vel e a simulação finalizada.
0
1
2
3
4
5
6
7
8
9
10
0 10 20 30 40 50 60
velocidade
[m/s]
tempo [s]
numérico
analítico
Figura 3: Resultado da simulação numérica para o cálculo da velocidade com o tempo de um carrinho em desaceleração. No
gráfico pode ser observada a comparação da solução numérica representadas por cı́rculos e a solução exata, ou analı́tica,
representada pela linha cheia.
Dados da simulação:
Tabela 1: Dados da simulação do carrinho submetido à força de atrito linear do ar.
massa da particula coeficiente de atrito passo de tempo
[kg] [kg]/[s] [s]
m = 1.0 b = 0.1 ∆t = 0.1
Condições iniciais:
2.2 Velocidade terminal de uma gota
Neste problema deseja-se calcular como a força de atrito linear Fdrag = bv atua em uma partı́cula com massa
m sob uma força de gravidade Fgrav = mg a fim de desacelerá-la até o equilı́brio de forças, onde a aceleração
da massa pontual seja igual a 0 na direcao y.
18
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
Tabela 2: Continuação de dados da simulação do carrinho submetido à força de atrito linear do ar.
massa da partı́cula viscosidade dinâmica do ar coeficiente de atrito linear passo de tempo
[kg] [kg]/[m][s] [kg]/[s] [s]
m = ρV β = 1.6e − 04 b = βD ∆t = 1e − 7
Tabela 3: Condições iniciais da simulação do carrinho submetido à força de atrito linear do ar.
tempo inicial velocidade inicial posição inicial
[s] [m]/[s] [m]
t = 0.0 vx0 = 10.0 x = 0.0
Figura 4: Balanço de forças atuando em uma gota caı́ndo sob efeito gravitacional Fg = mg e atrito do ar linear Fdrag = bv.
Através da 2a. Lei de Newton, a equação matemática para modelar este problema é escrita como:
m
dv
dt
= Fdrag + Fg (55)
onde v(t) é a incógnita que queremos resolver. A equação discreta obtida através do método de Euler de 1a
ordem é representado por uma equação algébrica:
m

vn+1
y − vn
y
∆t

= −bvn
y + mg (56)
Isolando-se a incógnita discreta da velocidade vy no tempo n + 1, obtem-se a seguinte equação algébrica na sua
forma final:
vn+1
y = vn
y − ∆t
bvn
y
m
+ ∆tg (57)
Os dados para execução deste problema encontram-se na Tab. (4). Este procedimento deverá ser repetido
sucessivamente para que se obtenha a velocidade nos diversos tempos, ou seja, n + 1, n + 2, n + 3, n + 4 . . . e
com isso determine a distribuição da velocidade em função do tempo. Para o problema em questão, observa-se
que a velocidade aumentará até que a gota esteja em equilı́brio dinâmica, ou seja, a força de atrito fique igual
à força de gravidade. Novamente, não se sabe quantas repetições devem ser realizadas no cálculo de vn+1
para
que se obtenha o valor de velocidade terminal para a gota. Este cálculo dependerá dos dados do problema e do
tamanho escolhido para o passo de tempo ∆t.
A Eq. (55) pode ser resolvida analiticamente para v(t) e sua solução analı́tica toma a seguinte forma:
v(t) = vy0e−bt/m
− vlim(1 − e−bt/m
) (58)
onde vy0 é a velocidade inicial da gota, ou seja v = 0, t é o tempo medido em segundos e b é o coeficiente de
19
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
atrito. Ao integrarmos novamente a equação de v(t) obtemos a solução da posição, já que dy/dt = vy:
y(t) =
Z t
0
v(t)dt (59)
A solução numérica deste problema usando a Tab. (4) como valores de referência pode ser encontrada na Fig. (5)
onde a comparação com a solução exata (ou analı́tica) é feita para validação dos cálculos de discretização.
Espera-se desta solução um comportamento de aumento da velocidade até um valor de tempo. Em seguida, a
força de atrito se igualará ao valor da força de gravidade e a gota não aumentará de velocidade. A solução do
problema para valor de t = 0s é a velocidade. Com o tempo se aproximando de t = 3.0 × 10−6
s, a velocidade se
estabiliza com o valor de aproximadamente v = 6.0 × 10−5
m/s. Para conhecer o valor analı́tico da velocidade
de estabilização, ou velocidade limite vlim, basta calculá-la através da 2a. Lei de Newton onde o termo de
aceleração é nulo, pois não há mais variação de velocidade. Com isso, vlim = −mg/b.
0.0
1.0
2.0
3.0
4.0
5.0
6.0
7.0
0.0 5.0 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
velocidade
[m/s]
x
10
−5
tempo [s] x 10
−6
numérico
analítico
Figura 5: Resultado da simulação numérica para o cálculo da velocidade com o tempo de uma gota em queda. No gráfico pode
ser observada a comparação da solução numérica representadas por cı́rculos e a solução exata, ou analı́tica, representada
pela linha cheia.
Tabela 4: Dados da simulação da gota submetida à força de atrito linear do ar.
diâmetro da gota óleo densidade do lı́quido aceleração da gravidade volume da gota
[m] [kg]/[m3
] [m]/[s2
] [m3
]
D = 1.5e − 06 ρ = 840.0 g = 9.81 V = πD3
/6.0
2.3 Lançamento de projétil
Neste exemplo deseja-se calcular como a força de atrito linear F = −bv, ou a força de atrito quadrática F = −cv2
atuam em uma partı́cula ao ser lançada como um projétil de massa m sob efeito da força de gravidade F = mg.
Como condição de contorno para este problema, adota-se condição de parede elástica em y = 0, ou seja, o
projétil é rebatido com velocidade contrária igual à de choque, sem absorsão de energia cinétida pela parede.
Dados Iniciais
t 0.0 [s]
|v| 30 [m]/[s]
θ 50 ◦
x 0.0 [m]
y 40 [cm]
A Fig. (6) mostra esquematicamente a trajetória do projétil ao ser lançado de uma
altura y = h com velocidade vx e vy definidas. Ao tocar na parede inferior, o projétil
é rebatido e continua sua trajetória. A condição de contorno pode ser incorporada ao
problema através de uma condição de monitoramento altura do projétil, ou seja, quando
a altura do projétil h for menor que 0, a velocidade vertical vy deverá mudar de sentido.
Este esquema é um modelo matemático para impor condição de parede e rebatimento
do projétil.
20
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
Para o caso de atrito linear onde F = bv, as equações de movimento em x e y são desaco-
pladas, ou seja, as equações podem ser resolvidas separadamente pois uma não depende
da outra. Entretanto, para o caso de atrito quadrático F = cv2
, as equações estão aco-
pladas, pois v2
= v|v| = v
q
v2
x + v2
y. Este acoplamento impede que as equações sejam
resolvidas separadamente, logo tornando o problema mais sofisticado. Analiticamente é
possı́vel encontrar a solução deste problema para o caso de atrito linear. Por outro lado,
a equação de movimento com atrito quadrático não tem solução analı́tica, fazendo com que o procedimento
numérico seja a única maneira de se resolver o problema. A equação vetorial (em x e y) toma a seguinte forma:
vy=v0sen(a)
Fdrag
Fg
g=9.81m/s2
Fdrag
Fg
Fdrag
Fg
t0
t1
t2
Fdrag
Fg
t3
y=h
x
y
parede
a
vx=v0cos(a)
Figura 6: Desaceleração de um projetil por atrito do ar Fdrag = −bv sob efeito de gravidade. Note também que o projétil é rebatido
quando em contato com a parade em y = 0.
m
dv
dt
= Fdrag + Fg









m
dvx
dt
= Fdragx
m
dvy
dt
= Fdragy + Fgy
(60)
Na Fig. (7) observa-se o resultado da trajetória do projétil em três meios distintos: (a) vácuo, (b) ar com
atrito linear e (c) ar com atrito quadrático. É esperado que no vácuo o projétil não desacelere, mantendo sua
trajetória indefinidamente. Nos casos com atrito, verifica-se que a força de atrito linear é menor que a força
de atrito quadrática. Note que a condição de contorno de parede em y = 0 faz com que o projétil mude sua
trajetória. Esta condição deve estar explicitamente definida no código numérico através da verificação da altura
da partı́cula, ou seja, quando y  0 a velocidade da partı́cula na direção y muda de direção vy = −vy.
Tabela 5: Dados da simulação de lançamento de projétil com atrito linear.
diâmetro volume massa viscosidade coeficiente gravidade passo de tempo
[m] [m3
] [m] [N][s]/[m2
] [N][s]/[m] [m]/[s2
] [s]
D = 7e − 2 V = πD3
/6.0 m = 0.15 β = 0.16 b = βD g = 9.81 ∆t = 0.01
Tabela 6: Dados da simulação de lançamento de projétil com atrito quadrático.
diâmetro volume massa coeficiente coeficiente gravidade passo de tempo
[m] [m3
] [m] [N][s2
]/[m4
] [N][s2
]/[m2
] [m]/[s2
] [s]
D = 7e − 2 V = πD3
/6.0 m = 0.15 γ = 0.25 c = γD2
g = 9.81 ∆t = 0.01
2.4 Sistema massa-mola
Neste exemplo deseja-se calcular como a força de mola Fspring = −kx atua em um carrinho com massa m
sem dissipação. A Fig. (8) mostra um desenho esquemático do problema a ser tratado. Nele, pode-se verificar
21
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
0
5
10
15
20
25
30
35
0 20 40 60 80 100 120 140 160 180 200
y
[m]
x [m]
vácuo
atrito linear
atrito quadrático
Figura 7: Resultado da simulação numérica para o cálculo da posição da partı́cula (projétil) lançada em três meios distintos: (a)
vácuo, (b) ar com atrito linear e (c) ar com atrito quadrático. Note a condição de contorno de parede para y = 0, onde
o projétil é rebatido elasticamente.
que o carrinho pode deslizar livremente na direção x, além de estar diretamente conectado a uma mola com
coeficiente k. Uma velocidade inicial v0 é utilizada para iniciar a movimentação do carrinho. Para este problema,
considera-se o carrinho com uma massa pontual com mesma massa m, tendo este sistema modelado através da
segunda lei de Newton:
m
dv
dt
= −kx (61)
onde v é a velocidade do carrinho, t é o tempo e x é a coordenada espacial. Para discretização da equação
diferencial ordinária, utiliza-se o método de Euler para transformar a derivada dv/dt em termo algébrico da
diferença de velocidades em tempos consecutivos vn+1
− vn
dividido pelo passo de tempo ∆t = tn+1
− tn
:
m
vn+1
− vn
∆t
= −kx (62)
note que para os problemas apresentados nesta seção o passo de tempo ∆t é um valor conhecido e constante,
sendo ajustado conforme o método de discretização escolhido. Portanto, a única variável desconhecida para o
problema discreto é a velocidade no tempo n+1. Este procedimento deve então ser repetido através de um loop
até que se encontre a evolução da velocidade ao longo do tempo desejada. Com isso a velocidade vn+1
calculada
deverá ser utilizada no próximo passo de tempo como vn
, ou seja vn
= vn+1
, e então repetido o procedimento.
Ao final de várias iterações, pode-se plotar o resultado de todas as velocidades calculadas no tempo total de
simulação como mostrado na Fig. (9).
v0
coeficiente
mola k
x
m
Figura 8: Sistema massa-mola sem dissipação Fspring = −kx
O problema de massa-mola apresentado neste seção admite solução analı́tica através de integração da equação
diferencial. A solução analı́tica pode então ser comparada com a solução numérica realizada através da discre-
tização da equação. Com isto, pode-se verificar se o método numérico convergiu para a solução desejada. Neste
22
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
caso não há grandes vantagens em realizar um procedimento numérico, entretanto a mesma metodologia poderá
ser usada em problemas mais complicados, onde muitos deles não apresentam solução analı́tica.
v(t) = −wAcos(wt + j) (63)
x(t) =
Z t
0
v(t)dt −→ x(t) = wAsen(wt + j) (64)
onde v(t) é o valor da velocidade em função do tempo, w é a frequência angular, t é o tempo e j é a constante
de fase. A Fig (9) mostra a solução numérica do modelo matemático que representa a oscilação no sistema
massa-mola do problema proposto, comparada com sua solução analı́tica dada pela Eq. (63).
−10
−5
0
5
10
0 10 20 30 40 50 60 70 80 90 100
velocidade
[m/s]
tempo [s]
numérico
analítico
Figura 9: Resultado da simulação numérica para o cálculo da velocidade com o tempo de um sistema massa-mola sem dissipação.
A comparação com a solução analı́tica dada pela Eq. (63) é observada no gráfico.
Na Fig. (10), pode-se observar o espaço de fases do problema massa-mola sem dissipação. O espaço de fases é a
representação das variáveis dinâmicas relevantes de um sistema, que para o presente problema é a relação entre
a velocidade da partı́cula v e sua posição x.
Dados da simulação:
Tabela 7: Dados da simulação do sistema massa-mola sem dissipação.
massa coeficiente frequência passo de tempo
[m] [kg]/[s2
] [Hz] [s]
m = 1.0 k = 0.1 ω =
p
k/m ∆t = 0.01
Condições iniciais:
Tabela 8: Condições iniciais da simulação do sistema massa-mola sem dissipação.
tempo inicial velocidade posição
[s] [m]/[s] [m]
t = 0.0 vx = 10.0 x = 0.0
23
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
−10
−5
0
5
10
−30 −20 −10 0 10 20 30
velocidade
[m/s]
x [m]
Figura 10: Espaço de fases para o problema massa-mola sem dissipação.
2.5 Sistema massa-mola vertical
Neste exemplo deseja-se calcular como a força de gravidade F = −mg atua em um bloco com massa m e que
pode ser modelado como uma massa pontual, sob uma forca elástica (de mola) F = −ky a fim de mantê-la
oscilando indefinitivamente, já que não há dissipação no sistema.
v0
coeficiente
mola k
y
m
Figura 11: Sistema massa-mola sem dissipação e com a força da gravidade atuando Fspring + Fgrav = −ky + mg
A equação em y:
m
dvy
dt
= Fspring + Fgrav (65)
onde Fspring = Fspringy = −ky e Fgrav = Fgravy = mgy, m representa a massa do objeto, gy representa a
aceleração da gravidade na direção y e k a constante de mola.
Dados da simulação:
• k = 0.1 coeficiente da mola
• y = 0.0 posição inicial da partı́cula
• v0 = 10.0 velocidade inicial da partı́cula
• g = 9.81 [m/s2
] aceleração da gravidade
• D = 7.0e − 02 [m] diâmetro da partı́cula
• dt = 0.1 [s] passo de tempo
• t = 0.0 tempo total da simulação
• m = 0.15 [kg] massa da partı́cula
24
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
−15
−10
−5
0
5
10
15
0 5 10 15 20 25 30
velocidade
[m/s]
tempo [s]
numérico
Figura 12: Resultado da simulação numérica para o cálculo da velocidade com o tempo de um sistema massa-mola sem dissipação
e com força de gravidade.
−20
−15
−10
−5
0
5
10
15
20
−35 −30 −25 −20 −15 −10 −5 0 5
velocidade
[m/s]
x [m]
Figura 13: Espaço de fases para o problema massa-mola sem dissipação.
2.6 Sistema massa-mola-amortecedor
Neste exemplo deseja-se calcular como a força de atrito linear Ffriction = −bv causada pelo contato do carrinho
com a superfı́cie atua em um carrinho com massa m sob uma força elástica (de mola) linear Fspring = −kx a
fim de desacelerá-la até o equilı́brio de forças, onde a aceleração e velocidade seja igual a 0 na direcao x. A
Fig. (14 mostra um desenho esquemático do problema a ser tratado. Nele, pode-se verificar que o carrinho pode
deslizar livremente na direção x, além de estar diretamente conectado a uma mola com coeficiente k. Observe
ainda que o contato do carrinho com a superfı́cie provoca uma força contrária ao sentido de movimentação do
carrinho.
Pela segunda lei de Newton, a equação da velocidade em função do tempo se escreve:
m
dv
dt
= Fspring + Fdump (66)
25
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
v0
coeficiente
mola k
x
m
amortecedor
Figura 14: Sistema massa-mola-amortecedor onde a força de mola Fspring = −kx e a força de amortecimento (ou atrito) Ffriction =
−bv atuam no sistema
onde m é a massa, v é o vetor velocidade, que para o problema atual atua apenas na direção x, ou seja, v = vx,
b é o coeficiente de amortecimento e k é o coeficiente de mola. Como só há movimento na direção x a equação
vetorial acima se transforma em uma equação escalar que deve é escrita da seguinte forma:
m
dvx
dt
= −kx − bvx (67)
Vamos agora introduzir duas constantes para caracterização dos problemas a se modelar:
b
m
= 2β (68)
o parâmetro β pode ser chamado de constante de amortecimento, é simplesmente uma maneira conveniente
para caracterizar a magnitude da força de amortecimento que atua no sistema massa-mola-amortecedor. Um
valor grande de β representa um fator de amortecimento grande. Introduzimos aqui a segunda constante:
ω0 =
r
k
m
(69)
Onde ω0 é agora definido como frequência natural de oscilação, uma vez que o atrito está presente no sistema.
Em outras palavras, pode-se interpretar ω0 como a frequência na qual o sistema oscilaria se não houvessem
forças de atrito presente. Com isso, reescreve-se a equação como:
dvx
dt
= −2βvx − ω2
0x (70)
• Amortecimento ausente: β = 0
• Amortecimento fraco: β  ω0
• Amortecimento forte: β  ω0
• Amortecimento crı́tico: β = ω0
Dados da simulação:
Tabela 9: Dados da simulação do sistema massa-mola-amortecedor.
caso massa frequência amortecimento passo de tempo
[m] [Hz] 1/[s] [s]
ausente m = 1.0 ω = 0.5 β = 0.00 ∆t = 0.1
fraco m = 1.0 ω = 0.5 β = 0.10 ∆t = 0.1
forte m = 1.0 ω = 0.5 β = 0.75 ∆t = 0.1
critico m = 1.0 ω = 0.5 β = 0.50 ∆t = 0.1
Condições iniciais:
26
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
−20
−10
0
10
20
0 5 10 15 20 25 30
posição
[m]
tempo [s]
β = 0
(a)
−20
−10
0
10
20
0 5 10 15 20 25 30
posição
[m]
tempo [s]
β  ω
(b)
−20
−10
0
10
20
0 5 10 15 20 25 30
posição
[m]
tempo [s]
β  ω
(c)
−20
−10
0
10
20
0 5 10 15 20 25 30
posição
[m]
tempo [s]
β = ω
(d)
Figura 15: Resultado da simulação numérica do sistema massa-mola-amortecedor para diversas confirgurações dos parâmetros β e
frequência fixada em ω = 0.5: (a) amortecimento ausente β = 0, (b) amortecimento fraco β  ω0, (c) amortecimento
forte β  ω0 e (d) amortecimento crı́tico β = ω0.
Tabela 10: Condições iniciais da simulação do sistema massa-mola-amortecedor.
tempo inicial velocidade posição
[s] [m]/[s] [m]
t = 0.0 vx = 10.0 x = 0.0
2.7 Oscilador de Van Der Pol
No estudo de sistemas dinâmicos, o oscilador de Van der Pol é um oscilador não-conservativo com fator de
amortecimento nao-linear µ(1 − x2
). Esta equação assemelha-se com o sistema massa-mola-amortecedor, com
massa do sistema m = 1, coeficiente de mola k = 1 e o coeficiente de amortecimento não-linear b = µ(1 − x2
).
Dependendo do valor da posição x, o amortecimento pode ter sinal positivo ou negativo. Se o sinal é negativo
(x  1), o efeito do sistema é semelhante ao sistema já apresentado para o sistema massa-mola-amortecedor,
entretanto quando o valor de x  1, o amotercimento tem sinal positivo, o sistema reage como um amortecedor
ao contrario, ou seja, impulsionando o sistema ao invés de amortecê-lo. Esta equação pode ser usada para
modelar um sistema biologico como do batimento do coraçãoo. Use métodos de aproximação de primeira ordem
e de alta ordem (maior que de primeira ordem) para solucionar a equação diferencial de Van der Pol. Plote o
tempo vs. velocidade e plote também o diagrama de fases distância vs. velocidade, obtendo o circulo limite
27
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
para diversos valores de µ.
dv
dt
− µ 1 − x2

v + x = 0 (71)
Dados da simulação:
• µ = 0.1, 0.5, 1, 1.5 coeficientes
• dt = 0.05 passo de tempo
Condições iniciais:
• nIter = 2000 no
de iterações sugerido
• x = 0.2 posição inicial da partı́cula
• v0 = 0.1 velocidade inicial da partı́cula
Esta equação diferencial ordinária pode ser resolvida através do qualquer método numérico de solução, como os
métodos ilustrados nos problemas anteriores. Podemos fazer uma aproximação linear de primeira ordem usando
o método de Euler. Note que esta equação é de primeira ordem para a velocidade v e de segunda ordem para
a variável espacial x. Esta equação também pode ser reescrita da seguinta forma:
d2
x
dt2
− µ 1 − x2
dx
dt
+ x = 0 (72)
Podemos diminuir a ordem da equação escrevendo duas equações de primeira ordem para x:
dx
dt
= v (73)
dv
dt
− µ 1 − x2

v + x = 0 (74)
Resultado na mesma equação incialmente apresentada. Usando o método de Euler de primeira ordem, podemos
discretizar as equações da seguinte forma:
xn+1
− xn
∆t
= v (75)
vn+1
− vn
∆t
− µ 1 − x2

vn
+ x = 0 (76)
Note que na Eq. (76) estamos avaliando o termo da velocidade v presente na parcela de amortecimento µ(1−x2
)v
no tempo n. Neste caso, este termo está explı́cito no tempo, pois conhecemos o valor de vn
. Uma outra forma
de avaliar o mesmo termo seria na forma implı́cita no tempo, ou seja, no tempo n + 1. Na forma explı́cita,
passamos o termo para o lado direito. Na forma implı́cita, deixamos o termo no lado esquerdo. Com isso, as
variáveis xn+1
e vn+1
são escritas na forma:
xn+1
= xn
+ ∆tv (77)
vn+1
= vn
+ ∆tµ 1 − x2

vn
− ∆tx (78)
Uma aproximação melhor para as derivadas da equação de Van Der Pol podem ser usadas aumentando-se a
ordem do método. Podemos então usar o método de Runge-Kutta de segunda ordem. A primeira equação fica
igual ao método de Euler:
xn+1
= xn
+ ∆tv (79)
28
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
A segunda equação toma a seguinte forma:
k1 = ∆tµ 1 − x2

vn
− ∆tx (80)
k2 = ∆tµ 1 − x2

vn
+
k1
2

− ∆tx (81)
vn+1
= vn
+
1
2
k1 + k2

(82)
Note que o valor de k1 é igual ao método de Euler. A solução do problema pode então ser plotada. A Fig. (16)
mostra a solução do tempo t pela velocidade v do problema para quatro configurações do parâmetro µ que
antecede o termo de amortecimento, enquanto que a Fig. (17) mostra o espaço de fases.
−2
−1
0
1
2
0 10 20 30 40 50 60 70 80
velocidade
[m/s]
tempo [s]
µ=0.1
(a)
−2
−1
0
1
2
0 10 20 30 40 50 60 70 80
velocidade
[m/s]
tempo [s]
µ=0.5
(b)
−3
−2
−1
0
1
2
3
0 10 20 30 40 50 60 70 80
velocidade
[m/s]
tempo [s]
µ=1.0
(c)
−4
−3
−2
−1
0
1
2
3
4
0 10 20 30 40 50 60 70 80
velocidade
[m/s]
tempo [s]
µ=1.5
(d)
Figura 16: Resultado da simulação numérica do oscilador de Van Der Pol para diversas confirgurações do parâmetro µ que antecede
o termo de amortecimento: (a) µ = 0.1, (b) µ = 0.5, (c) µ = 1.0 e (d) µ = 1.5.
2.8 Pêndulo simples
Deseja-se resolver o problema do pêndulo simples, onde uma massa se encontra sob efeito de força gravitacional
Fg = mg e suspensa através de um cabo com comprimento l. Neste exercı́cio, é conveniente usarmos um sistema
de coordenadas cilı́ndricas, com isso tornando mais fácil nossa análise:
m
dvθ
dt
= −
mg
l
sin θ −→ m
d2
θ
dt2
+
mg
l
sin θ = 0 (83)
Esta equação pode ser resolvida de diferentes formas. A mais simples é tornar esta equação diferencial de
29
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
−4
−3
−2
−1
0
1
2
3
4
−4 −3 −2 −1 0 1 2 3 4
µ=1.5
µ=1.0
µ=0.5
µ=0.1
velocidade
[m/s]
x [m]
Figura 17: Espaço de fases para o problema do oscilador de Van Der Pol para as quatro diferentes configurações do parâmetro µ.
Fg
g=9.81m/s2
l
T
x
y T
Figura 18: Pêndulo simples sob efeito de força gravitacional Fg = mg.
segunda ordem em duas equações de ordem mais baixa:
dθ
dt
= vθ (84)
e
m
dvθ
dt
+
mg
l
sin θ = 0 (85)
Com isso, resolve-se a equação para encontrar θ no tempo n + 1:
θn+1
− θn
∆t
= vn
−→ θn+1
= θn
+ ∆tvn
(86)
E depois a Eq. (85) para encontrar v no tempo n + 1:
vn+1
− vn
∆t
= −
g
l
sin θ −→ vn+1
= vn
− ∆t
g
l
sin θn+1
(87)
Este processo deve ser repetido sucessivamente em um loop para encontrar a evolução de v e θ no tempo t.
Como não há adição ou perda de energia no sistema, espera-se um comportamento de movimento repetitivo
com o tempo.
30
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
Para pequenas perturbações esta equação tem solução analı́tica, com isso aproxima-se sin θ = θ, chegando à
seguinte equação:
m
d2
θ
dt2
+
mg
l
θ = 0 (88)
A solução analı́tica é então escrita da seguinte forma para pequenos angulos ( 10◦
):
θ(t) = θ0 cos(
p
g/lt) (89)
−0.2
−0.1
0
0.1
0.2
0 1 2 3 4 5 6 7 8 9 10
θ
[rad]
tempo [s]
numérico
analítico
Figura 19: Resultado da simulação numérica para o cálculo da posição da massa do pêndulo e comparação com a solução analı́tica
para ângulos pequenos θ = 10◦.
−0.6
−0.4
−0.2
0
0.2
0.4
0.6
−0.2 −0.15 −0.1 −0.05 0 0.05 0.1 0.15 0.2
velocidade
[rad/s]
θ [rad]
Figura 20: Espaço de fases para o problema do pêndulo sem dissipação.
Dados da simulação:
Condições iniciais:
31
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
Tabela 11: Dados da simulação do pêndulo submetido à força de gravidade.
massa da particula aceleração da gravidade passo de tempo comprimento da haste
[kg] [m]/[s2
] [s] [m]
m = 1.0 g = 9.81 ∆t = 0.01 l = 1.0
Tabela 12: Condições iniciais da simulação do pêndulo simples.
tempo inicial velocidade inicial ângulo inicial posição inicial
[s] [m]/[s] ◦
[rad]
t = 0.0 v0 = 0.0 10 θ0 = 2gradπ
360
2.9 Pêndulo amortecido forçado
Nesta seção deseja-se resolver o problema do pêndulo amortecido forçado (PAF), onde uma massa se encontra
sob efeito de força gravitacional Fg = mg e suspensa através de um cabo com comprimento l submetida a uma
força de atrito Fat = bv contrária ao movimento e sob forçagem externa do tipo F = F0cos(ωt) onde ω é a
frequência de oscilação da forçagem e t é tempo. Como feito no problema do pêndulo simples, o PAF pode ser
modelado por uma equação escrita em função do ângulo θ, ou seja, em coordenadas cilı́ndricas. Esta equação
pode ser escrita da seguinte forma:
m
d2
θ
dt2
= −
mg
l
sin θ − b
dθ
dt
+
F0
l
cos(ωt) (90)
Uma representação ilustrativa pode ser verificada na Fig. (21) onde distribuição de forças é realizada para um
pêndulo qualquer sob atuação de uma força F e da força de gravidade Fg.
Fg
g=9.81m/s2
l
T
x
y T
F
bv
Figura 21: Pêndulo simples sob efeito de força gravitacional Fg = mg, da força de atrito Fat = bv e da forçagem externa F =
F0cos(ωt).
A análise do sistema proposto pode ser simplificada com a introdução de parâmetros da seguinte forma:
2β =
b
m
e ω2
0 =
g
l
(91)
Podemos ainda definir o parâmetro γ da seguinte forma:
γ =
F
mlω2
0
=
F
mg
(92)
Através do uso destes parâmetros, podemos reescrever a Eq. (90) da forma a seguir:
d2
θ
dt2
= −ω2
0 sin θ − 2β
dθ
dt
+ γω2
0cos(ωt) (93)
32
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
Tanto a Eq.(93) quanto a Eq. (90) podem ser resolvidas numericamente da mesma forma. Escolhemos então
resolver a equação parametrizada. Esta equação pode ser resolvida de diferentes formas. Uma solução é
transformar esta equação diferencial de segunda ordem em duas equações de ordem mais baixa através da
seguinte definição:
dθ
dt
= vθ (94)
e
dvθ
dt
= −ω2
0 sin θ − 2βvθ + γω2
0cos(ωt) (95)
Com isso, resolve-se a equação para encontrar θ no tempo n + 1:
θn+1
− θn
∆t
= vn
θ −→ θn+1
= θn
+ ∆tvn
θ (96)
E depois a Eq. (95) para encontrar v no tempo n + 1:
vn+1
− vn
∆t
= −ω2
0 sin θ − 2β
dθ
dt
+ γω2
0cos(ωt) −→ vn+1
= vn
− ∆t ω2
0 sin θn+1
− 2βvθ + γω2
0cos(ωt)

(97)
Este processo deve ser repetido sucessivamente em um loop para encontrar a evolução de v e θ no tempo t. A
Fig. (22) apresenta 4 simulações realizadas para o probelma do PAF usando valores de γ = 0.2, 0.9, 1.06, 1.073.
Como é possı́vel notar, as Figs. (22a-b) descrevem comportamento altamente previsı́vel, com oscilações de
amplitude constante para t  3. No entanto, as Figs. (22c-d), com parâmetro γ elevado, o comportamento das
oscilações apresenta padrôes mais complexos. Quando γ = 1.073, é possı́vel notar que a amplitude do pêndulo
a partir de t  15 não é constante. Outros valores de γ tornam o sistema ainda mais complexo, ou em outras
palavras, caótico.
A Fig. (23) apresenta o espaço de fases para valores do parâmetro γ = 0.2, 0.9, 1.06, 1.073. Este tipo de
representação permite entendermos a resposta do sistema e a sensibilidade do parâmetro γ para o PAF. É
possı́vel notar a presença de um cı́rculo limite como um atrator para um estado que está representado por
curvas fechadas nos gráficos. Como visto em problemas anteriores, se a trajetória converge para um único
ponto, este atrator é chamado de ponto fixo. No caso do PAF, o cı́rculo limite é o atrator, ou seja, é a região
estável para onde o pêndulo oscilará.
Dados da simulação:
Tabela 13: Dados do parâmetro γ usados na simulação do PAF.
parâmetro passo de tempo número de iterações
[−] [s] [−]
γ = 0.2 ∆t = 1e − 2 nIt = 6 × 102
γ = 0.9 ∆t = 1e − 3 nIt = 6 × 103
γ = 1.06 ∆t = 1e − 4 nIt = 1.6 × 105
γ = 1.073 ∆t = 1e − 5 nIt = 3 × 106
Condições iniciais:
2.10 Borboleta de Lorenz
O Sistema de Lorenz é um sistema de três equacões diferenciais ordinárias estudadas por Edward Lorenz para
observação de trajetórias caóticas. Usando o método de Euler para discretização das derivadas temporais dx/dt,
33
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
−0.4
−0.3
−0.2
−0.1
0
0.1
0.2
0.3
0.4
0 1 2 3 4 5 6
θ
[rad]
tempo [s]
numérico
(a)
−3
−2
−1
0
1
2
3
0 1 2 3 4 5 6
θ
[rad]
tempo [s]
numérico
(b)
−4
−2
0
2
4
6
8
10
12
14
16
0 2 4 6 8 10 12 14 16
θ
[rad]
tempo [s]
numérico
(c)
−10
−5
0
5
10
15
0 5 10 15 20 25 30
θ
[rad]
tempo [s]
numérico
(d)
Figura 22: Resultado da simulação numérica do pêndulo amortecido forçado apresentado pelo modelo da Eq. (93) e com valores do
parâmetro (a) γ = 0.02, (b) γ = 0.9, (c) γ = 1.06 e (d) γ = 1.073.
Tabela 14: Condições iniciais da simulação do PAF.
tempo inicial velocidade inicial ângulo inicial frequência motriz frequência natural β
[s] [m]/[s] ◦
[Hz] [Hz] [Hz]
t = 0.0 v0 = 0.0 θ0 = 0.0 ω = 2π ω0 = (3/2)ω β = ω0/4.0
dy/dt e dz/dt, resolva o sistema de EDOs e encontre a trajetória da partı́cula. Plote a trajetória nos planos
x − y, x − z e y − z.
dx
dt
= σ(y − x) (98)
dy
dt
= x(ρ − z) − y (99)
dz
dt
= xy − βz
Na Fig. (24) observa-se a trajetória formada pela solução das equações. No gráfico tridimensional pode ser
observada a solução numérica obtida pelo método de Euler para discretização das derivadas temporais.
O passo de tempo utilizado nesta simulação é ∆t = 1e − 4, enquanto que o número de iterações realizadas foi
de 1e6. As condições iniciais são:
34
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
−2.5
−2
−1.5
−1
−0.5
0
0.5
1
1.5
2
2.5
−0.4 −0.3 −0.2 −0.1 0 0.1 0.2 0.3 0.4
inicial
x0=v0=0
velocidade
[rad/s]
θ [rad]
(a)
−20
−15
−10
−5
0
5
10
15
20
−3 −2 −1 0 1 2 3
inicial
x0=v0=0
velocidade
[rad/s]
θ [rad]
(b)
−25
−20
−15
−10
−5
0
5
10
15
20
25
−4 −2 0 2 4 6 8 10 12 14 16
inicial
x0=v0=0
velocidade
[rad/s]
θ [rad]
(c)
−25
−20
−15
−10
−5
0
5
10
15
20
25
−10 −5 0 5 10 15
inicial
x0=v0=0
velocidade
[rad/s]
θ [rad]
(d)
Figura 23: Espaço de fases para o problema do pêndulo amortecido forçado apresentado pelo modelo da Eq. (93) e com valores do
parâmetro (a) γ = 0.02, (b) γ = 0.9, (c) γ = 1.06 e (d) γ = 1.073.
−20−15−10−5 0 5 10 15 20 25
−30
−20
−10
0
10
20
30
0
10
20
30
40
50
60
x
y
z
Figura 24: Resultado da simulação numérica para o cálculo da trajetória em x, y e z obteda pelas equações de Lorenz. No gráfico
tridimensional pode ser observada a solução numérica obtida pelo método de Euler para discretização das derivadas
temporais.
Note que outras condições iniciais podem ser testadas. É recomendando usar 2 condições iniciais e simular,
mostrando os resultados em um Parâmetros:
Discretize as equações usando o método de Runge-Kutta de 4a
ordem para solucionar o sistema de EDOs
apresentado acima, tendo como exemplo a solução da equação diferencial da velocidade:
dx
dt
= f(t, x) (100)
35
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
Tabela 15: Condições iniciais da simulação de trajetória do sistema de Lorenz.
tempo inicial posição x posição y posição z
[s] [m] [m] [m]
t = 0.0 15.0 −25.0 −20.0
Tabela 16: Parâmetros para o sistema de Lorenz.
ρ σ β
28 10 8/3
e calculado o valor de xn+1
usando valores de k1, k2, k3 e k4:
k1 = f(t, x)
k2 = f(t + ∆t/2, x +
∆t
2
k1)
k3 = f(t + ∆t/2, x +
∆t
2
k2)
k4 = f(t + ∆t, x + ∆tk3)
xn+1
= xn
+
∆t
6
(k1 + 2k2 + 2k3 + k4) (101)
2.11 Falkner-Skan
Deseja-se encontrar a solução numérica da equação de Falkner-Skan através da transformação da equação
original de terceira ordem para outras 3 de ordem mais baixa. Este procedimento já foi realizado para os
problemas envolvendo a 2a
Lei de Newton e aqui será repetido. Note que a equação de Falkner-Skan é uma
equação diferencial ordinária de 3a
ordem e não-linear. A não-linearidade está no derivada primeira df/dη que
está elevada ao quadrado. A variável independente é o η.
d3
f
dη3
+ f
d2
f
dη2
+ β

1 −
df
dη
2
= 0 (102)
com três condições de contorno:
f = 0 em η = 0 (103)
df
dη
= 0 em η = 0 (104)
df
dη
= 1 em η → ∞ (105)
Estas condições de contorno exigem que o valor da função f seja 0 no inı́cio do problema, ou seja, em η = 0.
Além desta, a outra condição de contorno exige que o valor da derivada da função f também seja 0 no inı́cio do
problema. No entanto, a terceira e última condição de contorno exige que a derivada primeira tenha o valor de
1 quando η → ∞. A implementação computacional desta condição de contorno deve ser feita no final do cálculo
computacional, garantindo o valor de 1 para a derivda de f, ou seja, o valor da função longe de η = 0 deve
convergir no valor de 1. Na discretização, o valor de inf é substituı́do por algum valor suficientemente longe
de η = 0, no entanto deverá ser finito pois a computação é incapaz de prolongar os cálculos infinitamente. No
cálculo proposto deste problema, a condição de contorno para η → ∞ será satisfeita usando valores conhecidos
36
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
para derivada segunda. Caso não se conheça o valor da derivada segunda, é necessário desenvolver um método
do tipo ”shooting”para garantir o cumprimento da condição de contorno.
Para redução de ordem, deve-se primeiramente introduzir variáveis até ordem n − 1, onde n é a ordem da
equação diferencial original, que para este caso é 3.
f = f1 (106)
df
dη
= f2 (107)
d2
f
dη2
= f3 (108)
Esta equação pode ser então transformada em três outras equações diferenciais acopladas como combinação de
f1, f2 e f3:
df1
dη
= f2 (109)
df2
dη
= f3 (110)
df3
dη
= −f1f3 − β(1 − f2
2 ) (111)
Para discretização das equações acima, pode-se utilizar qualquer esquema de discretização de equação diferencial
ordinária como já apresentado nos exercı́cios anteriores. Utilizaremos aqui o esquema mais simples que é o
método de Euler, com isso as equações são reescritas da seguinte forma:
fn+1
1 − fn
1
∆η
= f2 (112)
fn+1
2 − fn
2
∆η
= f3 (113)
fn+1
3 − fn
3
∆η
= −f1f3 − β(1 − f2
2 ) (114)
Note que para o caso de β = 0, a equação de Falkner-Skan se transforma na equação de Blasius para camada
limite. Considere ∆η da mesma forma que ∆t nos exercı́cios anteriores.
A Tab. (17) apresenta os valores iniciais de cada uma das equações diferenciais oriundas da redução de ordem
da equação de Falkner-Skan. Além disso, o passo de integração ∆η, o coeficiente β e o limite de integração η
são apresentados para este exercı́cio.
Tabela 17: Dados inicias do problema de Falkner-Skan usados na simulação através do método de Euler e do método de Runge-Kutta
de 2a ordem.
inicial inicial inicial passo coeficiente limite de integração
[−] [−] [−] [−] [−] [−]
f1 = 0.0 f2 = 0.0 f3 = 0.005218 ∆η = 1e − 3 β = −0.1988 η = 6.20
f1 = 0.0 f2 = 0.0 f3 = 0.469600 ∆η = 1e − 3 β = 0.0000 η = 5.00
f1 = 0.0 f2 = 0.0 f3 = 1.232588 ∆η = 1e − 4 β = 1.0000 η = 8.40
f1 = 0.0 f2 = 0.0 f3 = 1.687218 ∆η = 1e − 5 β = 2.0000 η = 4.73
Como pode ser observado, o passo ∆η deve ser extremamente pequeno para que a solução numérica apresente
convergência. Métodos de mais alta ordem podem ser usados para aumentar o passo de tempo mantendo
37
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
0
0.2
0.4
0.6
0.8
1
0 1 2 3 4 5
f
2
η
β = −0.1988
β = 0.0000
β = 1.0000
β = 2.0000
Figura 25: Resultado da simulação numérica para o cálculo do perfil de velocidades para três valores do parâmetro β usando o
método de Euler. Para o caso particular onde β = 0.0, a equação de Blasius de camada-limite é resolvida.
a precisão do cálculo. O método de Runge-Kutta pode ser usado para obtenção de alta precisão na solução
numérica de equações diferenciais ordinárias através da escolha da ordem de convergência do método. O método
de Runge-Kutta de primeira ordem é equivalente ao método de Euler, entretanto os métodos de segunda, terceira
e quarta ordem tem precisão superior ao método de Euler, que é de primeira ordem.
Agora, discretize as equações usando o método de Runge-Kutta de 2a
ordem para solucionar o sistema de EDOs
apresentado acima. Note que apenas a equação de f3 dever ser discretizada pelo método Runge-Kutta, pois nas
outras equações a discretização por alta ordem não melhora o resultado. Neste método, o valor de f3 pode ser
então estimado através do cálculo dos coeficientes k1 e k2:
k1 =

− f1f3 − β(1 − f2
2 )

k2 =

− f1

f3 + ∆η
k1
2

− β(1 − f2
2 )

(115)
Com isso, o valor de f3 pode ser obtido através de uma ponderação dos valores de k acima calculados:
fn+1
3 = fn
3 +
∆η
2
(k1 + k2) (116)
Note que, devido à ordem mais alta deste algorı́timo, a convergência para valores mais próximos da função
resposta é mais rápida. Outros valores de passo η poderão ser utilizados, diminuindo a quantidade de interações
necessárias e aumentando a velocidade de cálculo no computador. Faça um teste aumentando o passo ∆η até
que a simulação seja interropida por divergência dos resultados, ou seja, valores do tipo inf ou nan apareçam
nos resultados. Verifique qual é o maior passo de tempo possı́vel para simulações usando o método de Euler
e o método de Runge-Kutta. Note que, apesar da ordem mais elevada do método de Runge-Kutta, ambos os
métodos discretizam as derividas explicitamente e podem gerar divergência se o passo η atingir um valor limite.
Este limite de passo é caracterı́stico de métodos explı́citos de discretização. Para retirar a restrição de passo,
métodos implı́citos de discretização são indicados.
2.12 Mapa logı́stico
O mapa logı́stico é um modelo matemático proposto por Robert May em 1976 e capaz de descrever a evolução
populacional de uma espécie. Este simples modelo é o ponto inicial para a compreensão de problemas caóticos,
38
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
onde um modelo determinı́stico perde completamente o poder de previsão para determinadas condições. Neste
problema, obteremos a evolução populacional da espécie e notaremos diversas situações interessantes. Além
disto, construiremos um diagrama de bifurcações para visualizar o inı́cio do caos através de um gráfico bidi-
mensional. Matematicamente, esta equação se apresenta na forma de mapa da seguinte forma:
xn+1
= µxn
(1 − xn) (117)
onde o valor de x representa a razão entre a população existente e a máxima possı́vel população da espécie. Os
valores do parâmetro µ de interesse variam no intervalo de [0, 4]. O valor de xn+1
é simplesmente calculado
conhecendo o valor do parâmetro µ, que é definido pelo programador e o valor de x no tempo anterior n, ou
seja, xn. Como a variável de interesse x aparece multiplicada por ela mesma, esta equação é do tipo não-linear.
Fisicamente, dois efeitos são capturados neste modelo:
• reprodução: onde a população irá crescer em uma taxa proporcional à população atual quando esta
população é pequena;
• morte por fome: a taxa de crescimento diminuirá conforme uma dinâmica especı́fica.
Resolvendo-se a Eq. (117) numericalmente, podemos observar comportamentos bem diferentes ao variar o valor
do parâmetro µ. Algumas faixas de valores importantes são:
• 0 ≤ µ ≤ 1: a população irá morrer, independente do valor inicial da população xn;
• 1 ≤ µ ≤ 2: a população irá se aproximar rapidamente do valor de (µ − 1)/µ, independente do valor inicial
da população xn;
• 2 ≤ µ ≤ 3: neste ponto, a população também chegará ao valor de (µ − 1)/µ, no entanto a solução irá
lentamente para este valor;
• 3 ≤ µ ≤ 1 +
p
(6) ≈ 3.44949: a população irá flutuar permanentemente entre dois valores fixos, depen-
dentes do parâmetro µ;
• 3.44949 ≤ µ ≤ 3.54409: a população irá flutuar permanentemente entre quatro valores fixos;
• µ ≥ 3.56995: a população apresenta comportamento caótico. Este ponto é conhecido como o inı́cio do
caos.
Para visualizarmos estes efeitos, podemos plotar um gráfico de itereções e a razão de população x para diversos
parâmetros µ. Escolhemos os seguintes valores para µ = 0.8, 1.7, 2.8, 3.2, 3.5, 2.59, razão de população inicial
x0 = 0.45 e número de iterações it = 65. Note que o valor de x0 não é fator influenciador do comportamento
que desejamos compreender.
Além dos gráficos apresentados, que permitem a visualização da evolução temporal (através das sucessivas
iterações, podemos ainda apresetar um gráfico bidimensional chamado de diagrama de bifurcações que pode ser
elaborado tomando-se os diversos valores da razão de população x no estado permanente, ou seja, próximo às
últimas iterações it  40 usando diversos valores do parâmetro µ entre a faixa de [0, 4]. Note que valores de
µ  4 a solução diverge e não pode ser utilizada. Para construção do diagrama de bifurcações, capture os pontos
fixos de todas as simulações realizadas variando o parâmetro µ de 1 a 4. Para o gráfico apresentado, realizou-se
ao todo 3000 simulações, variando o parâmetro µ com incremento de ∆µ = 1e − 3. Depois foi capturado os
valores repetidos para iterações it  40 e então o gráfico foi produzido.
3 Geração de Malha
3.1 Classificação
Malhas são estruturas geométricas usadas na discretização de equações matemáticas que serão resolvidas nu-
mericamente pelo computador. Malhas unidimensionais são definidas ao longo do eixo x com coordenadas que
podem ou não variar linearmente. Para o caso de malhas bidimensionais, as coordenadas são definidas no plano
x − y através de pares de valores que informam a localização geométrica de cada ponto no plano. Em malhas
tridimensionais, as coordenadas dos pontos são definidas no volume, ou seja, são defindas através de coordendas
x, y e z. Frequentemente em métodos numéricos a informação da interconectividade de pontos em malhas
39
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
−0.3
−0.2
−0.1
0
0.1
0.2
0.3
0.4
0.5
0 10 20 30 40 50 60
razão
população
[x]
iteração [i]
razão
(µ−1)/µ
(a)
0.4
0.41
0.42
0.43
0.44
0.45
0.46
0 10 20 30 40 50 60
razão
população
[x]
iteração [i]
razão
(µ−1)/µ
(b)
0.4
0.45
0.5
0.55
0.6
0.65
0.7
0.75
0 10 20 30 40 50 60
razão
população
[x]
iteração [i]
razão
(µ−1)/µ
(c)
0.4
0.5
0.6
0.7
0.8
0.9
0 10 20 30 40 50 60
razão
população
[x]
iteração [i]
razão
(µ−1)/µ
(d)
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
0 10 20 30 40 50 60
razão
população
[x]
iteração [i]
razão
(µ−1)/µ
(e)
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
1.1
0 10 20 30 40 50 60
razão
população
[x]
iteração [i]
razão
(µ−1)/µ
(f)
Figura 26: Resultado da simulação numérica do mapa logı́stico apresentado pelo modelo da Eq. (117) para o máximo de iterações
it = 64 e valores do parâmetro (a) µ = 0.80, (b) µ = 1.70, (c) µ = 2.80, (d) µ = 3.20, (e) µ = 3.50 e (f) µ = 3.59.
computacionais é essencial, não bastando somente a localização geométrica de cada ponto. Com isso, além
das coordenadas dos pontos, uma estrutura numérica adicional se faz necessária para representação da malha
computacional.
Quando se resolve uma equação através de uma aproximação numérica, o resultado é obtido nos pontos da
malha computacional. (falta completar)
Quando se discretiza uma equação diferencial, uma equação é definida para cada ponto da malha. Com isso,
quanto mais pontos de malha, maior é o número de equações defindas, resultando em um consumo maior de
40
INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
2.4 2.6 2.8 3 3.2 3.4 3.6 3.8 4
razão
população
[x]
µ
Figura 27: Diagrama de bifurcação para o mapa logistı́co para faixa de valores do parâmetro µ = [2.4, 4].
processamento computacional, já que o número de operações lógicas será proporcional ao número de pontos
discretos.
• malha estruturada:
• malha não estruturada:
A geração de malhas é um problema matemático que pode ser de difı́cil solução. A seguir são apresentados
problemas simples de geração de malha em espaços unidimensionais e bidimensionais.
3.2 Geração de malha 1D com espaçamento variável
Criação de malha 1D para o método de elementos finitos com dx variando conforme as seguintes equações:
• constante: dx = cte
• quadrática: x2
• cúbica: x3
• exponencial: exp(x)
Observe cada caso ilustriado na Fig. (28), onde a função escolhida fornece o espaçamento entre nós da malha.
Para o caso linear Fig. (28a), o espaçamento dx é constante. Para os outros casos, o espaçamento varia conforme
a função adotada.
Parâmetros da malha:
• L = 1.0 comprimento total da malha
• nx = 10 número total de nós
• ne = nx − 1 número total de elementos
Dica: para criação de malha computacional, 2 estruturas são necessárias: um vetor de coordenadas dos nós da
malha onde cada elemento do vetor é a posição do nó, e uma matriz de conectividade de nós onde a linha da
matriz representa o elemento e as colunas representam os nós daquele elemento.
41
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica
Introdução à Programação Numérica

Mais conteúdo relacionado

Semelhante a Introdução à Programação Numérica

Livro analise de dados amostrais complexos
Livro analise de dados amostrais complexosLivro analise de dados amostrais complexos
Livro analise de dados amostrais complexosDiogo Freire
 
REfacTool - Uma ferramenta de refactoring para disciplinar anotações em linha...
REfacTool - Uma ferramenta de refactoring para disciplinar anotações em linha...REfacTool - Uma ferramenta de refactoring para disciplinar anotações em linha...
REfacTool - Uma ferramenta de refactoring para disciplinar anotações em linha...Antonio Correia
 
Simulador Numérico Bidimensional para Escoamento Monofásico em Meios Porosos
Simulador Numérico Bidimensional para Escoamento Monofásico em Meios PorososSimulador Numérico Bidimensional para Escoamento Monofásico em Meios Porosos
Simulador Numérico Bidimensional para Escoamento Monofásico em Meios PorososBismarck Gomes
 
A cadeia de Markov na análise de convergência do algoritmo genético quando...
A cadeia de Markov na análise de convergência do algoritmo genético quando...A cadeia de Markov na análise de convergência do algoritmo genético quando...
A cadeia de Markov na análise de convergência do algoritmo genético quando...vcsouza
 
Tese modelo-icmc (1)
Tese modelo-icmc (1)Tese modelo-icmc (1)
Tese modelo-icmc (1)SEED PR
 
Análise Numérica
Análise NuméricaAnálise Numérica
Análise Numéricaomonda
 
Tutorial Octave Matlab
Tutorial Octave MatlabTutorial Octave Matlab
Tutorial Octave Matlabblogmaxima
 
Desenvolvimento de um software para análise de escoamentos internos em dutos ...
Desenvolvimento de um software para análise de escoamentos internos em dutos ...Desenvolvimento de um software para análise de escoamentos internos em dutos ...
Desenvolvimento de um software para análise de escoamentos internos em dutos ...Marco Túlio Pereira Silveira
 
Apostila de demonstração
Apostila de demonstraçãoApostila de demonstração
Apostila de demonstraçãoRODRIGO SOBRADO
 
Algebra linear um_livro_colaborativo_ufrgs_reamat_2018_210pag
Algebra linear um_livro_colaborativo_ufrgs_reamat_2018_210pagAlgebra linear um_livro_colaborativo_ufrgs_reamat_2018_210pag
Algebra linear um_livro_colaborativo_ufrgs_reamat_2018_210pagOnariClaudeGrossl
 

Semelhante a Introdução à Programação Numérica (20)

Aa booklet
Aa bookletAa booklet
Aa booklet
 
Livro seagro
Livro seagroLivro seagro
Livro seagro
 
Livro analise de dados amostrais complexos
Livro analise de dados amostrais complexosLivro analise de dados amostrais complexos
Livro analise de dados amostrais complexos
 
REfacTool - Uma ferramenta de refactoring para disciplinar anotações em linha...
REfacTool - Uma ferramenta de refactoring para disciplinar anotações em linha...REfacTool - Uma ferramenta de refactoring para disciplinar anotações em linha...
REfacTool - Uma ferramenta de refactoring para disciplinar anotações em linha...
 
Pesquisa Operacional
Pesquisa OperacionalPesquisa Operacional
Pesquisa Operacional
 
monografia_andre_paro
monografia_andre_paromonografia_andre_paro
monografia_andre_paro
 
Estruturas dados
Estruturas dadosEstruturas dados
Estruturas dados
 
Estruturas dados
Estruturas dadosEstruturas dados
Estruturas dados
 
Simulador Numérico Bidimensional para Escoamento Monofásico em Meios Porosos
Simulador Numérico Bidimensional para Escoamento Monofásico em Meios PorososSimulador Numérico Bidimensional para Escoamento Monofásico em Meios Porosos
Simulador Numérico Bidimensional para Escoamento Monofásico em Meios Porosos
 
A cadeia de Markov na análise de convergência do algoritmo genético quando...
A cadeia de Markov na análise de convergência do algoritmo genético quando...A cadeia de Markov na análise de convergência do algoritmo genético quando...
A cadeia de Markov na análise de convergência do algoritmo genético quando...
 
Tese modelo-icmc (1)
Tese modelo-icmc (1)Tese modelo-icmc (1)
Tese modelo-icmc (1)
 
Espaços metricos
Espaços metricosEspaços metricos
Espaços metricos
 
Análise Numérica
Análise NuméricaAnálise Numérica
Análise Numérica
 
Tutorial Octave Matlab
Tutorial Octave MatlabTutorial Octave Matlab
Tutorial Octave Matlab
 
Desenvolvimento de um software para análise de escoamentos internos em dutos ...
Desenvolvimento de um software para análise de escoamentos internos em dutos ...Desenvolvimento de um software para análise de escoamentos internos em dutos ...
Desenvolvimento de um software para análise de escoamentos internos em dutos ...
 
Apostila de demonstração
Apostila de demonstraçãoApostila de demonstração
Apostila de demonstração
 
Algebra linear um_livro_colaborativo_ufrgs_reamat_2018_210pag
Algebra linear um_livro_colaborativo_ufrgs_reamat_2018_210pagAlgebra linear um_livro_colaborativo_ufrgs_reamat_2018_210pag
Algebra linear um_livro_colaborativo_ufrgs_reamat_2018_210pag
 
Fismat apostila
Fismat apostilaFismat apostila
Fismat apostila
 
Residuos
ResiduosResiduos
Residuos
 
1540
15401540
1540
 

Último

Calculo vetorial - eletromagnetismo, calculo 3
Calculo vetorial - eletromagnetismo, calculo 3Calculo vetorial - eletromagnetismo, calculo 3
Calculo vetorial - eletromagnetismo, calculo 3filiperigueira1
 
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdf
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdfPROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdf
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdfdanielemarques481
 
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docxTRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docxFlvioDadinhoNNhamizi
 
Apresentação Manutenção Total Produtiva - TPM
Apresentação Manutenção Total Produtiva - TPMApresentação Manutenção Total Produtiva - TPM
Apresentação Manutenção Total Produtiva - TPMdiminutcasamentos
 
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptxVagner Soares da Costa
 
Tipos de Cargas - Conhecendo suas Características e Classificações.pdf
Tipos de Cargas - Conhecendo suas Características e Classificações.pdfTipos de Cargas - Conhecendo suas Características e Classificações.pdf
Tipos de Cargas - Conhecendo suas Características e Classificações.pdfMarcos Boaventura
 
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptxVagner Soares da Costa
 

Último (7)

Calculo vetorial - eletromagnetismo, calculo 3
Calculo vetorial - eletromagnetismo, calculo 3Calculo vetorial - eletromagnetismo, calculo 3
Calculo vetorial - eletromagnetismo, calculo 3
 
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdf
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdfPROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdf
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdf
 
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docxTRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
 
Apresentação Manutenção Total Produtiva - TPM
Apresentação Manutenção Total Produtiva - TPMApresentação Manutenção Total Produtiva - TPM
Apresentação Manutenção Total Produtiva - TPM
 
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
 
Tipos de Cargas - Conhecendo suas Características e Classificações.pdf
Tipos de Cargas - Conhecendo suas Características e Classificações.pdfTipos de Cargas - Conhecendo suas Características e Classificações.pdf
Tipos de Cargas - Conhecendo suas Características e Classificações.pdf
 
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
 

Introdução à Programação Numérica

  • 1. PEM/COPPE/UFRJ Universidade Federal do Rio de Janeiro ENGENHARIA MECÂNICA COMPUTAÇÃO CIENTÍFICA PARA ENGENHEIROS Preparado por: Prof. Gustavo Anjos E-mail: gustavo.rabello@coppe.ufrj.br Vers~ ao: 25 de Dezembro de 2020 Resumo. Este texto de nı́vel introdutório tem como objetivo familiarizar o estudante de graduação e pós-graduação na criação de ferramentas e solução de problemas reais en- contrados em engenharia e que são modelados através de equações diferenciais ordinárias e parciais. A linguagem de programação é usada para processamento de dados e também para visualização de resultados, mostrando-se versátil e uma ferramenta indispensável para o futuro profissional. Esta figura representa as linhas de corrente de um escoamento irrotacional com partı́culas nas vizinhaças de um objeto circular.
  • 2. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS Conteúdo 1 Introdução 3 1.1 Considerações iniciais . . . . . . . . . . . . . . 3 1.2 Importância da linguagem de programação na Engenharia Mecânica . . . . . . . . . . . . . . . 3 1.3 Python . . . . . . . . . . . . . . . . . . . . . . 3 1.4 Octave . . . . . . . . . . . . . . . . . . . . . . . 3 1.5 C/C++ . . . . . . . . . . . . . . . . . . . . . . 4 1.6 Orientação a objetos . . . . . . . . . . . . . . . 4 1.7 Equações diferenciais . . . . . . . . . . . . . . . 4 1.8 Aspectos numéricos . . . . . . . . . . . . . . . . 6 1.9 Como medir erros . . . . . . . . . . . . . . . . . 7 1.10 Integração numérica . . . . . . . . . . . . . . . 9 1.11 Sistema linear de equações . . . . . . . . . . . . 10 1.12 Análise de estabilidade de von Neumann . . . . 12 1.13 Importância da validação do código numérico . 12 1.14 Elaboração de relatório . . . . . . . . . . . . . 13 1.15 Controle de versões - GIT . . . . . . . . . . . . 13 1.16 Editores de texto . . . . . . . . . . . . . . . . . 14 1.17 Visualização de resultados . . . . . . . . . . . . 16 2 Mecânica de massas pontuais 17 2.1 Movimento Horizontal de um Carrinho . . . . . 17 2.2 Velocidade terminal de uma gota . . . . . . . . 18 2.3 Lançamento de projétil . . . . . . . . . . . . . . 20 2.4 Sistema massa-mola . . . . . . . . . . . . . . . 21 2.5 Sistema massa-mola vertical . . . . . . . . . . . 24 2.6 Sistema massa-mola-amortecedor . . . . . . . . 25 2.7 Oscilador de Van Der Pol . . . . . . . . . . . . 27 2.8 Pêndulo simples . . . . . . . . . . . . . . . . . . 29 2.9 Pêndulo amortecido forçado . . . . . . . . . . . 32 2.10 Borboleta de Lorenz . . . . . . . . . . . . . . . 33 2.11 Falkner-Skan . . . . . . . . . . . . . . . . . . . 36 2.12 Mapa logı́stico . . . . . . . . . . . . . . . . . . 38 3 Geração de Malha 39 3.1 Classificação . . . . . . . . . . . . . . . . . . . . 39 3.2 Geração de malha 1D com espaçamento variável 41 3.3 Geração de malha 2D . . . . . . . . . . . . . . 42 3.4 Lista de nós de contorno em malha 2d . . . . . 43 3.5 Curvatura 2D . . . . . . . . . . . . . . . . . . . 44 3.6 Curvatura 3D . . . . . . . . . . . . . . . . . . . 46 3.7 Qualidade de malha . . . . . . . . . . . . . . . 47 4 Probabilidade e Estatı́stica 48 4.1 Números aleatórios . . . . . . . . . . . . . . . . 48 4.2 Passeio aleatório . . . . . . . . . . . . . . . . . 48 4.3 Método de Monte-Carlo . . . . . . . . . . . . . 48 5 Mecânica do contı́nuo 48 5.1 Método de Diferenças Finitas . . . . . . . . . . 50 5.2 Método de Elementos Finitos . . . . . . . . . . 65 6 Escoamento Compressı́vel 82 6.1 Equação de Burgers 1D . . . . . . . . . . . . . 82 6.2 Tubo de Choque 1D . . . . . . . . . . . . . . . 85 6.3 Bocal Convergente-Divergente . . . . . . . . . . 86 7 Turbulência 87 7.1 Introdução . . . . . . . . . . . . . . . . . . . . . 87 7.2 Escoamento turbulento em um canal . . . . . . 89 7.3 Comprimento de mistura de Van Driest . . . . 90 8 Escoamento multifásico 91 8.1 Introdução . . . . . . . . . . . . . . . . . . . . . 91 8.2 Teoria de Colisões . . . . . . . . . . . . . . . . 92 8.3 Escoamento com partı́cula - solução numérica . 94 8.4 Flutuação de velocidade . . . . . . . . . . . . . 95 8.5 Escoamento com múltiplas partı́culas . . . . . . 96 Appendices 97 A Álgebra Linear 97 A.1 Transformaçao do problema generalizado para a forma padrão . . . . . . . . . . . . . . . . . . . 97 B Acústica 99 2
  • 3. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS 1 Introdução 1.1 Considerações iniciais Este texto foi elaborado para atender as necessidades de ensino de programação numérica a alunos de Trans- missão de Calor II do 8o ¯ perı́odo de Engenharia Mecânica da Universidade do Estado do Rio de Janeiro. Nas primeiras seções o estudante pode obter informações sobre ferramentas usadas em programação numérica, como o editor de texto, controle de versões e o paradigma de orientação a objetos. Seguindo o conteúdo do texto, diversos exercı́cios são propostos para solução de problemas encontrados em engenharia, como a mecânica de massas pontuais, onde a segunda lei de Newton é utilizada para modelagem do problema do tipo massa-mola ou ainda lançamento de um projétil. Outros exercı́cios são sugeridos para solução de problema térmico e a criação de malhas sofisticadas para o uso no método de elementos finitos. Este texto é finalizado com proble- mas envolvendo escoamentos multifásicos onde duas fases distintas (contı́nua e dispersa) coexistem no mesmo problema. O texto está em contı́nuo desenvolvimento e ainda carece de informações essenciais para o desenvolvimento de todos os exemplos apresentados. Por isso, o autor pede a compreensão do estudante para falta de dados e exemplos mais ilustrativos ao longo do texto. Este texto está baseado no livro Mecânica Clássica [24] e outros. 1.2 Importância da linguagem de programação na Engenharia Mecânica Tipos: • interpretada • compilada Conceitos: • estruturada • modular • orientada a objetos Algumas linguagens de programação disponı́veis: • Java • C C++ • C# • Objective-C • Python • Perl • R • PHP • JavaScript • Visual Basic .NET • Delphi / Object Pascal • Ruby • Assembly • Visual Basic • MATLAB • PL/SQL 1.3 Python O Python é uma linguagem de programação de alto nı́vel, de script, que pode ser orientada a objetos. Esta lin- guagem foi lançada por Guido van Rossun em 1991 como uma linguagem acadêmica para ensino de programação numérica a alunos de graduação. www.python.org 1.4 Octave Esta linguagem de programação é de alto nı́vel, de script e fortemente orientada para matemática cientı́fica. Diferentemente da linguagem Python, o Octave é distribuı́do através de uma GUI, vindo acompanhada de um editor de texto, gerenciador de arquivos, depurador e outras funcionalidades auxiliares. 3
  • 4. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS É uma linguagem gratuita e que pode ser utilizada em nos principais sistemas operacionais. Pode ser encontrada no seguinte endereço: www.gnu.org/software/octave/ 1.5 C/C++ 1.6 Orientação a objetos A programação orientada a objetos é um modelo de projeto para desenvolvimento de projetos numéricos, baseado na integração dos diversos segmentos do programa chamados objetos. Diferentemente da programação estruturada, a orientação a objetos é conceituada no campo da abstração de conceitos do mundo real (ver [2]). Abaixo encontra-se alguns conceitos relacionados à programação orientada a objetos. • classe: estrutura para abstração de um conjunto de objetos com caracterı́sticas em comum através da utilização de métodos e atributos; • objeto/instância: elemento computacional que representa uma entidade abstrata ou concreta; • atributo: são elementos que definem as partes (ou estruturas) de uma classe. Os valores associados aos atributos definem os objetos. • método: é a função que é executada pelo objeto ao receber instrução; • herança: é um princı́pio que permite que classes compartilham métodos e atributos de outra classe; • encapsulamento: conceito de tornar o programa mais flexı́vel, fácil de modificar e de usar, escondendo detalhes do programa desnecessários para o conhecimento do usuário final; • polimorfismo: uso do mesmo nome para múltiplos métodos com lista de argumentos diferentes; Descrever diagrama UML (Unified Modeling Language). 1.7 Equações diferenciais As equações diferenciais são usadas para modelar problemas fı́sicos onde a incógnita é uma função que aparece na equação através de derivadas. As equações diferenciais são importantes na engenharia e podem ainda ser encontradas em diversas aplicações práticas em quı́mica, biologia, medicina e fı́sica. A ordem de uma equação diferencial é dada pela ordem da derivada de maior grau que aparece na equação, ou seja, uma equação diferencial de ordem 3 apresenta a derivada d3 /dx3 como de maior grau, assim como uma equação diferencial de ordem 1 apresenta apenas a derivada primeira em sua formulação. 1.7.1 Classificação As equações diferenciais podem ser classificadas em dois tipos distintos: • equação diferencial ordinária (EDO) • equação diferencial parcial (EDP) As EDOs contém apenas funções de uma variável e derivadas desta mesma variável. Uma equação que é originalmente parcial, pode se transformar em uma equação diferencial ordinária se for simplificada para um problema unidimensional permanente (com derivada temporal nula). Este é o caso da equação de difusão de calor, que é escrita na forma vetorial compacta como: dT dt = α∇2 T (1) 4
  • 5. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS A equação pode ser reescrita expandindo os seus termos: dT dt = α d2 T dx2 + d2 T dy2 + d2 T dz2 (2) note que fizemos uma hipótese de difusividade térmica constante α = cte para fins ilustrativos. Como esta equação tem 3 variáveis independentes espaciais (x, y e z) e a variável temporal t, ela é classificada como equação diferencial parcial, entretanto para o caso da difusão de calor unidimensional permanente ela se escreve: d2 T dx2 = 0 (3) Para este caso, a equação acima é classificada como EDO pois apresenta apenas uma variável independente x. As equações diferencias parciais (EDP) de 2a. ordem podem ser classificadas em três tipos distintos: • Equação hiperbólica: usadas para estudo de vibrações, oscilações elétricas, acústica etc. É comumente conhecida como Equação da Onda. Esta equação tem soluções do tipo v(x + ct) e v(x − ct), ou seja, a função é deslocada para frente ou para trás com velocidade c no tempo t sem perda de informação. ∂2 u ∂t2 = a2 ∂2 u ∂x2 (4) • Equação parabólica: usada no estudo de problemas de difusão de calor ou massa e propagação de calor. Estas equações descrevem um processo fı́sico dissipativo dependente do tempo e a solução destas equações são combinações de funções exponenciais e senoidais. ∂u ∂t = a ∂2 u ∂x2 (5) • Equação elı́ptica: usada para modelar campos magnéticos, hidrodinâmica e problemas de transferência de calor estacionários, ou seja, que já se encontram em regime permanente. Na matemática se f(x, y) = 0, esta equação recebe o nome de Equação de Laplace, em referência à Pierre Simon Laplace. Se f(x, y) 6= 0 esta equação recebe o nome de Equação de Poisson, em referência à Siméon-Denis Poisson. ∂2 u ∂x2 + ∂2 u ∂y2 = f(x, y) (6) Um método simples para identificação do tipo de EPD pode ser obtido da seguinte forma: Se uma função u(x, y) pode ser definida no espaço R2 , qualquer EPD de 2a. ordem pode ser escrita da seguinte forma: a d2 u(x, y) dx2 + 2b d2 u(x, y) dxdy + c d2 u dy2 + d du dx + e du dy + fu = g (7) Considerando que os coeficientes a, b e c são constantes e tais que: a2 + b2 + c2 6= 0 (8) Podemos classificar as EPDs através da seguinte relação: • hiperbólicas: b2 − 4ac 0, raı́zes reais e distintas; • parabólicas: b2 − 4ac = 0, raı́zes reais e idênticas; • elı́pticas: b2 − 4ac 0, raı́zes conjugadas e complexas; 1.7.2 Solução Uma vez que as equações diferenciais apresentam derivadas em sua formulação, sua solução depende fortemente de condições auxiliares. Ou seja, sem condições auxiliares a equação diferencial apresenta múltiplas soluções. Uma vez conhecidas as condições auxiliares, uma solução particular caracterı́stica do problema proposto pode ser encontrada. Podemos então classificar as soluções das equações diferenciais da seguinte forma: 5
  • 6. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS • Solução geral: solução que apresenta n constantes independentes entre si, onde n é a ordem da equação diferencial. Essas constantes, de acordo com a conveniência, podem ser escritas como c, 2c, c2 , lnc. Se a equação diferencial apresenta derivada de ordem máxima 2, como é o caso da equação de difusão de calor, duas constantes estarão presentes na solução: c1 e c2: • Solução Particular: solução obtida a partir da solução geral do problema, mediante a imposição das condições dadas (chamadas condições iniciais ou condições de contorno), e consequente substituição das constantes c da solução geral. Exemplificamos nossa classificação da soluções através da equação diferencial de ordem 2 abaixo: d2 T dx2 = Q (9) onde T representa a temperatura, Q uma fonte de calor e x a variável independente. Esta é a equação de difusão de calor com fonte térmica. Para encontramos a solução desta equação diferencial ordinária, basta integrar a equação duas vezes em x: T(x) = Q 2 x2 + c1x + c2 (10) Note que a solução T(x) apresenta as constantes de integração c1 e c2, classificando-se assim como a solução geral do problema de difusão de calor com fonte térmica. Para encontramos a solução particular, precisamos caracterizar o problema fı́sico através das condições auxiliares (ou condições de contorno). Como exemplo, consideraremos o caso onde as temperaturas nas extremidades (x = 0 e x = L, onde L é o comprimento total) sejam conhecidas: T(x = 0) = T1 e T(x = L) = T2. A solução particular do problema de difusão de calor com fonte térmica é obtido através da substituição das condições auxiliares na solução geral: T(x = 0) = T1 = Q 2 02 + c10 + c2 −→ c2 = T1 (11) T(x = L) = T2 = Q 2 L2 + c1L + T1 −→ c1 = T2 − T1 L − Q 2 L (12) Uma vez encontradas as constantes c1 e c2 através da substituição das condições de contorno na solução geral, encontramos a solução particular do problema: T(x) = Q 2 x2 + T2 − T1 L − QL 2 x + T1 (13) 1.7.3 Linear/não-linear Uma equação diferencial ordinária ou parcial pode ser ainda classificada como linear ou não-linear. Quando uma equação é linear, diversas propriedades podem ser utilizadas, como é o caso da combinação de soluções que também são soluções da mesma equação. (REFERENCIA) As equações não-lineares não possuem tais propriedades e são, como consequência, mais interessantes e ricas em fenômenos fı́sicos. Além disto, as equações não-lineares são mais difı́ceis de solucionar e pode levar ao caos. (REFERENCIA) 1.8 Aspectos numéricos No desenvolvimento de metodologias numéricas para solução de problemas, rotineiramente nos deparamos com a dúvida da solução calculada em representar corretamente o problema que estamos interessados. Com isso, definimos aqui algumas etapas para solucionar problemas diferenciais através de técnicas computacionais. O modelo matemático é a equação que descreve o fenômeno fı́sico. O modelo geometrı́co é a forma representativa do problema, que pode ser feita, por exemplo, em um programa do tipo CAD. 6
  • 7. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS O método de discretização é maneira que traduzimos o modelo matemática de modo que possamos repetir um procedimento consistentemente para encontrar a solução aproximada. O computador é ótimo instrumento para fazer procedimentos repetitivos. O pós-processamento é toda manipulação de dados que é feta depois de encontrar a solução numérica das equações. Nesta etapa, o processamento de dados é feito para obtenção de outros parâmetros importantes do problema que não são calculados diretamente através da solução das equações. A visualização dos resultados é a última etapa do desenvolvimento e mostra a solução numérica de uma forma clara para o cientista. No entanto, o algoritmo de solução numérica do problema deve ser avaliado através de quatro importantes aspectos: precisão, consistência, convergência e estabilidade. Abaixo descrevemos detalhadamente o que cada aspecto significa. • Precisão: medida quantitativa da distância entre a solução numérica obtida através da discretização das equações do problema e sua solução exata, caso exista; • Consistência: fidelidade de representação da solução numérica com a equação diferencial do problema; • Convergência: propriedade na qual a solução numérica converge para uma mesma solução quando a distribuição espacial de pontos e o passo de tempo são reduzidos para valores arbitrariamente pequenos; • Estabilidade: ausência de instabilidades temporais de natureza não fı́sica que prejudicam a solução numérica. 1.9 Como medir erros Toda vez que não conseguimos representar um valor exato, adicionamos um erro no sistema. Dependendo do algoritmo, este erro pode ser propagado até o final do processo, correndo o risco de acumular e fazer com que não haja convergência para a solução do problema proposto. Em outras palavras, a distância entre a solução numérica e a solução exata cresce até um ponto onde o resultado não condiz mais com o problema. Os erros podem ser classificados com a seguir: • erro de trucamento: é a diferença entre o resultado real e o resultado que deveria ser produzido por um algoritmo dado usando aritmética exata. Este erro é devido a aproximações de truncamento de séries infinitas, como por exemplo substituindo uma derivada por uma diferença finita, ou substituindo um dı́zima periódica por um número com 3 casas decimais, ou pela substituição de uma função arbitrária por um polinômio, ou ainda pela parada de um processo iterativo antes da convergência. • erro de arredondamento: é a diferença entre o resultado produzido por um algoritmo dado usando aritmética exata e o resultado do mesmo algoritmo usando precisão finita, aritmética de arredondamento. É devido ao falta de exatidão na representação de um número real e operações aritméticas em cima destes números. Muitas vezes desejamos calcular a distância que uma aproximação se encontra do valor exato da quantidade que estamos medindo. Esta aproximação muitas vezes está associada ao tipo de metodologia que estamos empre- gando ou simplesmente pelo fato de aproximarmos o valor de uma constante em uma equação. O significado de um erro cometido está estritamente relacionado à magnitude da quantidade medida ou calculada. Para ilustrar este problema, considere o peso de uma mala de viagens 32kg exatamente, porém ao medir o peso desta mala em uma balança analógica verificamos que a leitura do valor é de 31.8kg. Como poderı́amos saber se este erro está dentro da tolerância apresentada pelo fabricante da balança? Para responder a esta pergunta, devemos definir uma métrica associada ao erro de medição. Esta métrica é chamada de norma e o erro pode ser classificado de acordo com a seguinte definição: Erro absoluto = valor aproximado - valor exato Erro relativo = erro absoluto / valor exato As normas (ou métricas) de um vetor de dados é dada a seguir: ||x||p = n X i=1 |xi|p 1/p (14) 7
  • 8. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS Em computação cientı́fica, três normas destacam-se: • norma 1: ||x||1 = n X i=1 |xi| (15) • norma 2: ||x||2 = n X i=1 |xi|2 1/2 (16) • norma ∞ ou norma inf : ||x||∞ = max|xi| (17) Para ilustrar o exemplo, considere os seguintes vetores: x =             1 100 15 7             x̂ =             1.1 98 14 5.8             (18) Onde x representa o vetor de valores exatos e x̂ o vetor de valores aproximados. O erro absoluto pode ser calculado nas três normas apresentadas da seguinte forma: ||x − x̂||1 = 4 X i=1 |xi − x̂i| (19) ||x − x̂||2 = 4 X i=1 |xi − x̂i|2 1/2 (20) ||x − x̂||∞ = max4 i=1|xi − x̂i| (21) O erro relativo pode ser calculado também através das normas apresentadas: x − x̂ x 1 = 4 X i=1 xi − x̂i xi (22) x − x̂ x 2 = 4 X i=1 xi − x̂i xi 21/2 (23) x − x̂ x ∞ = max4 i=1 xi − x̂i xi (24) 8
  • 9. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS 1.10 Integração numérica Método de Euler explı́cito é o método mais tradicional de aproximação de derivadas. O método busca aproximar a derivada através da reta tangente ao ponto considerando dois pontos consecutivos dividos pela distância entre eles. Considere a seguinte equação diferencial ordinária: du dt = f(t, u) u(t0) = u0 (25) onde f(t, u) é uma função qualquer e u(t0) = u0 representa a condição inicial do problema em t0. Um exemplo de equação diferencial ordinária pode ser apresentado a seguir: du dt = −2tu2 u(t0) = 1 (26) para este caso, a função f(t, u) = −2tu2 e a condição inicial do problema é u(t0) = 1. O método de Euler explı́cito procura calcular a inclinação da reta tangente utilizando a diferença do valor da variável u no tempo atual, ou seja, un e o valor da variável no tempo seguinte un+1 divididos pela distância entre eles, que para o presente caso, é o passo de tempo ∆t, ou seja: un+1 − un ∆t = −2t(un )2 (27) Como a variável do tempo seguinte un+1 é desconhecida, podemos calculá-la através das variáveis conhecidas no tempo n, portanto: un+1 = un + ∆t[−2t(un )2 ] (28) Realizando este procedimento sucessivamente encontramos o valor da variável u para os tempos n + 1, n + 2, n + 3, ..., até um tempo que seja suficientemente longo para montarmos a solução discreta da função u no domı́nio de interesse. Com isso, realizamos uma integração numérica que substitui a integração analı́tica: u(t) = Z f(t, u)du ≈ X f(t, u)du (29) Como introdução aos métodos de alta ordem de Runge-Kutta, podemos ainda escrever o método de Euler explı́cito, também conhecido como método de Runge-Kutta de 1a. ordem (RK1) com o suporte de uma constante k1, ou seja: k1 = f t, un (30) un+1 = un + ∆tk1 (31) Método de Runge-Kutta de 2a. ordem k1 = f t, un k2 = f t + ∆t 2 , un + ∆t 2 k1 (32) un+1 = un + ∆t 2 k1 + k2 (33) Método de Runge-Kutta de 3a. ordem 9
  • 10. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS k1 = f t, un k2 = f t + ∆t 2 , un + ∆t 2 k1 k3 = f t + ∆t 2 , un + ∆t 2 k2 (34) un+1 = un + ∆t 6 k1 + 4k2 + k3 (35) Método de Runge-Kutta de 4a. ordem k1 = f(t, un ) k2 = f t + ∆t 2 , u + ∆t 2 k1 k3 = f t + ∆t 2 , u + ∆t 2 k2 k4 = f t + ∆t, u + ∆tk3 (36) un+1 = un + ∆t 6 k1 + 2k2 + 2k3 + k4 (37) 1.11 Sistema linear de equações Um sistema linear de equações algébricas é um conjunto de equações que devem ser resolvidas ao mesmo tempo. Usualmente, as equações são acopladas umas às outras, ou seja, termos de uma equação aparecem nas outras e vice-versa. Um exemplo de sistema linear de equações é dado abaixo, onde cada equação representa uma reta no espaço bidimensional: A =     4 0 −3 2         x1 x2     =     2 1     Este sistema linear do tipo Ax = b representa um conjunto de duas equações lineares algébricas: 4x1 + 0x2 = 2 (38) −3x1 + 2x2 = 1 (39) A soluções deste sistema de equações é o ponto comum de interseção entre as duas retas. Esta solução pode ser obtida através de operações de adição, subtração, multiplicação e/ou divisão entre as equações com o objetivo de isolar os valores de x1 e x2 e, com isso, encontrar a solução do sistema. Podemos também resolver o problema na forma matricial: Ax = b (40) A−1 Ax = A−1 b (41) Ix = A−1 b (42) x = A−1 b (43) Ou seja, ao encontramos a inversa da matriz A, podemos fazer uma operação de multiplicação entre matriz e vetor A−1 b e encontra a solução do problema x. 10
  • 11. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS A solução de problemas numéricos através da discretização de equações diferenciais resulta em sistemas lineares que normalmente tem dimensão maior que 2, ou seja, o número de equações é suficientemente grande para dificultar a solução através de eliminações (soma, subtração, multiplicação e/ou divisão) como foi sugerido para o problema inicial com 2 equações. Neste caso, a solução através do sistema linear deve ser feita na forma matricial com auxı́lio do computador. 1.11.1 Existência e Unicidade Uma matriz A é considerada não-singular se satisfaz qualquer uma das condições abaixo: 1. A matriz A possui inversa A−1 , tal que AA−1 = A−1 A = I; 2. det(A) 6= 0; 3. posto(A) = n, onde n é o número máximo de colunas ou linhas linearmente independentes da matriz; 4. para qualquer vetor z 6= 0, Az 6= 0. Caso contrário, a matriz A é dita singular. Dependendo da singularidade da matriz e do tipo de sistema linear, o resultado pode ser único, múltiplo ou não existir. Com isso, a solução de um sistema linear com matriz quadrada pode ser resumido da seguinte forma: • solução única: A é não-singular, o vetor b arbitrário, inclusive vetor de zeros; • infinitas soluções: A é singular, b ∈ span(A); • sem solução: A é singular, b / ∈ span(A). 1.11.2 Tipos de sistemas lineares Abaixo encontra-se uma lista de alguns tipos importantes de sistemas lineares que devem ser notados na hora da discretização de equações diferenciais. Dependendo da escolha do método de discretização, a estrutura da matriz favorece a solução do sistema linear resultante. • simétrica: A = AT , ou seja, aij = aji para todo i, j; • positiva definida: xT Ax 0 para todo x 6= 0; • em banda: aij = 0 para todo |i − j| β, onde β é a largura de banda de A. Exemplo é o caso da matriz tridiagonal onde β = 1; • densa: a maioria dos elementos de A é diferente de zero. • esparsa: a maioria dos elementos de A é igual a zero. Conhecer a estrutura da matriz é sempre importante para decidirmos como e quando vamos armazená-la na memória do computador. Por exemplo, no caso da matriz esparsa, devemos armazenar no computador apenas os valores diferentes de zero, pois sabemos com antecedência qualquer operaçao matemática de um elemento zero da matriz. Um outro exemplo é conhecer se a matriz é do tipo positiva definida, neste caso podemos usar rotinas computacionais especiais para atingirmos a solução sem gastar recursos computacionais demasiados. 1.11.3 Solução exata e solução aproximada Dizemos que a solução exata de um sistema linear foi encontrada quando resolvemos o sistema linear Ax = b através de algum método direto (assumindo aritmética exata), como por exemplo na inversão da matriz A e a posterior multiplicação pelo vetor b. No entanto, veremos que encontrar a inversa da matriz A−1 normalmente não é um procedimento computacionalmente vantajoso. Neste caso, utilizaremos técnicas de álgebra linear para obtermos uma solução aproximada do sistema linear x̂ sem que haja necessidade da inversão da matriz A. Deve-se notar que, computacionalmente, nem os métodos diretos produzem soluções exatas na maior parte dos problemas. Neses, as divisões e multiplicações inerentes do método podem introduzir erros de arredondamento. 11
  • 12. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS 1.11.4 Resı́duo O resı́duo r de um sistema linear é a diferença entre a solução exata do sistema linear x e a solução aproximada x̂. É interessante garantir que o resı́duo seja sempre pequeno, pois ele representa a distância entre a solução exata x e àquela calculada x̂. O resı́duo pode ser calculado como: r = b − Ax̂ (44) 1.11.5 Método direto x método iterativo A partir de operações elementares é possı́vel implementar uma série de métodos distintos para encontrar a soluçãoo de um sistema de equações lineares. Os métodos que utilizam uma sequência com um número finito de operações elementares para construir a solução são denominados métodos diretos. Para um problema de n incógnitas, n3 operações são necessárias para solução do sistema linear. Com isso, grandes sistemas lineares são extremamente custosos para solução. Exemplos de métodos diretos são: eliminação de Gauss-Jordan, eliminação de Gauss e eliminação de Gauss com pivotiamento. Por outro lado, os métodos iterativos não procuram encontrar o valor exato de x, e sim um valor aproximado x̂ que seja seja suficientemente próximo ao valor exato sem a necessidade de excessivas operações aritméticas. Estes métodos começam com um chute inicial da solução e através de sucessı́vas iterações, convergem iterativamente até a uma solução aceitável próxima da solução exata. A solução aceitável é escolhida baseada em métricas, por exemplo a norma do resı́duo ||b|| atingir um valor pequeno. Exemplos de métodos iterativos são: método de Jacobi, método de Gauss-Seidel e método dos gradientes conjugados. 1.12 Análise de estabilidade de von Neumann Em análise numérica, a análise de estabilidade de von Neumann é um método para avaliar a estabilidade de uma discretização pelo método de diferenças finitas em equações diferencias. Esta análise também é conhecida como análise de Fourier, uma vez que utilizada espansões em séries de Fourier para a análise de estabilidade. Escolhemos assim o método de diferenças finitas centradas e o método explı́cito no tempo aplicados à uma equação hiperbólica unidimensional como modelo exemplo para a análise de estabilidade aqui proposta. Nota- se que esta análise pode ser feita em diversas equações diferenciais para compreensão de limites de estabilidade numérica. ∂φ ∂t + c ∂φ ∂x = 0 (45) φn+1 i − φn i ∆t + c φn i+1 − 2φn i + φn i ∆x2 = 0 (46) Considere, por tanto, as seguintes expansões em série de Fourier para os termos φ da equação: φn+1 i = Φn+1 eIQxi (47) φn i+1 = Φn eIQxi+1 = Φn eIQx+∆x = Φn eIQx Φn eIQ∆x (48) φn i−1 = Φn eIQxi−1 = Φn eIQx−∆x = Φn eIQx Φn e−IQ∆x (49) O próximo passo para efetuarmos a análise de von Neumann é substituir as expressões das expansões em série de Fourier na Eq. (46). 1.13 Importância da validação do código numérico Validação de código é importante para se testar os limites de aplicação do código numérico bem como se certificar de o código está respondendo como planejado. Um código numérico deverá sempre ser validado e testado. Para o caso da engenharia, as validações devem cobrir de três campos importantes: • modelo matemático 12
  • 13. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS • fı́sica do problema • lógica numérica O modelo matemático adotado para reproduzir o fenômeno fı́sico deve estar condizente com a realidade do problema, ou seja com a fı́sica do problema. Por exemplo, ao se tratar problemas de condução unidimensional de calor em sólidos sem fonte de calor, usa-se a equação de Laplace para encontrar a distribuição de temperatura. Através desta escolha, modela-se o problema fı́sico através de uma equação matemática. A lógica numérica trata das sequências lógicas que são criadas no código numérico para automatização de processos repetitivos. Esta lógica deve ser questionada durante todo o desenvolvimento do código para que o cientista/programador não acredite que um erro pode estar vindo daquele procedimento. Note que esta lógica pode abranger o código como um todo, bem como trechos envolvendo funções, loops, classes etc. É importante validar e verificar que o procedimento leva a resultados esperados. Além destes campos, é importante verificar a abrangência da solução obtida, conhecendo o erro inserido nas discretizações e sua propagação através dos diversos procedimentos (ver [9]). 1.14 Elaboração de relatório Um relatório técnico é um documento que descreve resultados parciais ou totais de um determinado experimento, seja ele de natureza numérica, experimental ou puramente analı́tico. No presente texto, estamos interessados na elaboração de relatórios técnicos cientı́ficos para a área de Engenharia e ciências afins. No relatório técnico, o pesquisador deve considerar que o texto a ser produzido poderá ser usado por outros estudantes com intuito de prosseguir o estudo previamente realizado. Com isto, fica claro que o texto deverá conter todas as informações necessárias para que outro estudante consiga reproduzir integralmente os resultados encontrados no relatório técnico. Dependendo da quantidade de trabalho realizada, o relatório técnico pode também receber nomes caracterı́sticos em diferentes perı́odos de estudo universitário e de pós-graduação. O trabalho de conclusão de curso (TCC) ou monografia é um relatório técnico das atividades de um estudante que é apresentado ao final de um curso de graduação. Este representa a sı́ntese da formação adquirida ao longo da formação universitária. A dis- sertação é também um relatório técnico sobre um tema de pesquisa ao qual o pesquisador dedicou seu estudo no perı́odo do mestrado acadêmico. Tanto a monografia de graduação quanto a dissertação de mestrado não devem obrigatoriamente ser temas inovadores, jamais feitos anteriormente. No entanto, a tese de doutorado deve obrigatoriamente ter conteúdo inédito para o conhecimento, visando a obtenção de um tı́tulo de doutor. A tese de doutorado é um relatório com um nı́vel de aprofundamento técnico muito maior que os outros textos, normalmente realizado num perı́odo de 4 anos. Sugere-se um modelo básico de relatório técnico cientı́fico que poderá conter total ou parcialmente as seguintes seções (ou capı́tulos): • capa • ı́ndice • resumo • abstract • introdução • revisão bibliográfica • metodologia • resultados • conclusão • agradecimentos • referências bibliográficas • apêndices 1.15 Controle de versões - GIT O controle de versões é necessário no desenvolvimento de softwares para que o programador tenha um histórico de cada etapa relacionada a sua construção. Este controle digital se assemelha a um caderno de anotações, onde o estudante anota o desenvolvimento de suas atividades em cada dia de trabalho quando executa uma tarefa qualquer. A qualquer momento o estudante pode voltar nas anotações e saber o que foi modificado ou realizado na data em questão. Analisando mais profundamente esta mesma situação, poderı́amos envolver mais um estudante para realizar o mesmo trabalho, onde cada pessoa ficaria encarregada de um turno no dia. Se as anotações são feitas rigorosamente, o estudante seguinte toma conhecimento das ações e decisões tomadas pelo 13
  • 14. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS anterior. Existem diversos controladores de versão que ainda são bastante utilizados pela comunidade: SVN, CVS, Git, Mercurial, Monotone, SVK, Rational ClearCase, Borland StarTeam etc. 1 2 3 4 5 6 7 8 9 10 T1 T2 tag 1 tag 2 branch descontinuado merge merge trunk branch branches Figura 1: Exemplo da visualização do histórico de um projeto usando um sistema de controle de versões. As palavras em inglês são os termos usados como referência nas operações sobre as diversas versões de um projeto. A ferramenta Git é um sistema de controle de versão distribuı́do e também um sistema de gerenciamento de código fonte. O Git foi projetado pelo criador do sistema Linux (Linus Torvalds) e é ado- tado por diversas empresas que desenvolvem softwares comerciais de pequeno e grande porte (VLC, Reddit, rsync, Samba, VTK). O Git é um software livre e pode ser instalado em todos os sistemas operacionais através de download na página (https://git-scm.com). Abaixo encontra-se alguns comandos do git bastante utilizados: • git add ”nome-do-arquivo”adiciona um arquivo no git • git commit submete as modificações marcadas por add para o git • git commit -a submete todas as modificações para o git • git log mostra descrição do desenvolvimento do projeto • git shortlog mostra descrição curta do desenvolvimento do projeto • git status verifica modificações no diretório do projeto • git branch lista branches do projeto • git init inicializa um diretório git • git push enviar modificações para o servidor • git pull atualiza versão local pela versão do servidor É importante notar que o Git não é um sistema dedicado à lin- guagem de programação, podendo ser usando em qualquer tipo de código fonte, como por exemplo em documentos Word ou Notepad e de LaTeX. 1.16 Editores de texto Existem diversos editores de texto são aplicativos essenciais em qualquer ambiente de trabalho e estão disponı́veis para instalação nos diversos sistemas operacionais existentes. Alguns deles já são pré-instalados pelo sistema, enquanto que alguns outros devem ser comprados ou transferidos gratuitamente de páginas na internet. Alguns exemplos de editores de texto conhecidos no sistema Windows são Microsoft Office e Notepad, no sistema Mac OS X pode-se citar o TextEdit e o Notes. Alguns editores estão disponı́veis para os diversos sistemas operacionais, como é o caso do Microsoft Word, encontrado nos sistemas Windows e Mac OS X e o OpenOffice que pode ser instalados nos sistemas Windows, Mac OS X e Linux. Um editor de texto pode ser projetado para criar/editar diversos tipos de texto, entretanto também pode ser especializado em uma determinada função, como por exemplo em textos de programação numérica. A seguir serão apresentados alguns editores de texto flexı́veis voltados para programação numérica e distribuı́dos livremente. 1.16.1 Nano O Nano é um editor de texto desenvolvido para sistemas do tipo Unix que também utiliza baixo recurso gráfico. Este editor é livre e pode ser baixado gratuitamente em: www.nano-editor.org O Nano é um editor de texto desenvolvido em ambiente de texto, consumindo assim menos recursos computacionais. Exige pouca dedicação do estudante na fase inicial de utilização, uma vez que apresenta comandos de fácil execução mostrados em 14
  • 15. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS uma barra na parte inferior do editor e ambiente intuitivo. Este editor é altamente configurável, podendo acrescentar e modificar as cores que são usadas para identificar funções em linguagens de programação. 1.16.2 Vim O VIM é um editor de texto poderoso que utiliza baixo recurso gráfico, tornando-o flexı́vel, versátil e de baixı́ssimo consumo computacional. Apesar de ser um edi- tor que opera em modo texto, é possı́vel encontrar versões deste editor em modo gráfico (gvim), acompanhado de botões para abrir arquivo, gravar, editar, impri- mir etc. É interessante notar que a curva de aprendizagem deste editor necessita do programador um esforço inicial para que ele consiga dominar as funções básicas de edição, entretanto o próprio vim oferece uma ferramenta de tutorial que vem acompanhada do editor: vimtutor. Abaixo encontra-se alguns comandos de edição bastante utilizados: • :w gravar documento • :q sair do editor • :qa sair do editor caso esteja editando mais de um documento • :wq gravar o documento e sair do editor • :wqa gravar todos os documentos e sair do editor • :saveas gravar como novo documento • :e . abrir gerenciador de arquivos no VIM • :args lista de arquivos abertos no editor • :e nome-do-arquivo editar outro arquivo • :split nome-do-arquivo separar janelas horizontalmente e carregar outro arquivo • :vsplit nome-do-arquivo separar janelas verticalmente e carregar outro arquivo • :sview nome-do-arquivo abrir arquivo em modo de leitura • :set backup criar arquivo de backup • :ggVG selecionar todo documento • :make rodar script Makefile no editor • :32 ir para a linha 32 O editor de texto VIM suporta a instalações de aditivos para facilitar o desenvolvimento de projetos. Alguns exemplos são: • taglist.vim - gerenciador de arquivos fonte • The Nerd Commenter - plugin para facilitar comentários em diversos tipos de arquivos • Align - alinhamento de textos automáticos • BlockComment.vim - automatização de comentários de blocos de código • DirDiff.vim - plugin para manipulação de diretórios Os aditivos devem ser instalados na pasta de instalação do editor VIM. Estes aditivos estão centralizados no seguinte endereço eletrônico: www.vim.org/scripts/ Este editor de texto é compatı́vel com os mais importantes sistemas operacionais. 1.16.3 Atom 15
  • 16. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS O Atom é um editor de textos de código aberto que está atualmente disponı́vel para os mais usuais sistemas operacionais: macOS, Microsoft Windows e Linux. Este editor foi desenvolvido pela equipe que criou o GitHub e, por isso, tem suporte direto para controle de versões Git. Este editor possui suporte para diversos tipos de linguagem de programação como Python, C/C++, Markdown, Java e outros tantos. Neste sentido, o ambiente de programação se torna mais prazeroso visualmente e oferece funcionalidades que podem ser usadas no dia do desenvolvedor. Na janela do editor, além da caixa para escrever o texto, uma coluna com a árvore de diretórios do programa pode ser visualizada, agilizando a mudança de arquivos e posterior edição. O editor de texto Atom pode ser encontrado no seguinte endereço eletrônico: https://atom.io 1.16.4 Sublime Text O editor de texto Sublime Text é um poderoso ambiente de programação que reúne funcionalidades necessárias para o desenvolvedor de códigos numéricos agilizar sua produção. Na janela do programa observa-se a acessibilidade de arquivos do com- putador em uma coluna e o editor de texto em si. Algumas vantagens deste editor podem ser relacionadas a seguir: • Goto Anything: função para abrir arquivos com uso mı́nimo de teclas, além de encontrar facilmente sı́mbolos, linhas e palavras; • Multiple selections: faça a mesma modificação no texto para diversas partes ao mesmo tempo; • Split editing: compartilhar a tela do editor com 2 ou mais arquivos ao mesmo tempo. Este editor está disponı́vel para diversos sistemas operacionais nas versões de 32bits e 64bits. 1.17 Visualização de resultados A visualização do resultado é de extrema importância no cálculo numérico. Ela permite uma análise qualita- tiva dos resultados, mostrando tendências e permitindo sua compreensão global, ao invés de analisármos uma sequência de números em uma tabela. A visualização pode ser gráfica ou através de texto, dependendo do problema a ser estudado. A plotagem de resultados em eixos bidimensionais também é fundamental para se conhecer os resultados e seu comportamento. Existem diversas ferramentas de visualização disponı́veis e cabe ao estudante decidir qual ferramenta é mais apropriada para seu problema. O matplotlib é uma biblioteca gráfica disponı́vel para a linguagem Python que apresenta diversos recursos para visualização de dados. Por ser uma biblioteca, o estudante poderá aproveitar parte de sua programação numérica como entrada para os gráficos. Esta biblioteca possibilita a visualização de gráficos em diversos tipos de formato, como gráfico de barras, funções, gráficos tipo pizza, distribuições, visualização de superfı́cies, além de prover algumas funcionalidades relacionadas ao processamento gráfico, como um gerador de malhas triangulares usando algoritmo de Delaunay. A biblioteca pode ser encontrada no seguinte link: https://matplotlib.org O gnuplot é um programa gratuito para visualização de resultados através da plotagem de gráficos de um arquivo texto. Ele está disponı́vel para diversos sistemas operacionais, incluindo Linux, Microsoft Windows e Mac OSX. O gnuplot é interativo e baseado em linha de comando e scripts (arquivos textos com instruções), nele é possı́vel executar loops como se estives em um ambiente de programação. Este programa por se encontrado no seguinte endereço: http://www.gnuplot.info O Paraview é uma ferramenta de código aberto e gratuita para visualização cientı́fica e análise de dados, compatı́veis com diversos formatos de entrada de resultados. Diversos recursos estão disponı́veis para proces- samento de dados e geração de gráficos auxiliares, possibilitando uma análise mais detalhada dos resultados obtidos. Gráficos bidimensionais e tridimensionais são facilmente processados pelo Paraview através de botões 16
  • 17. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS e comandos simples. Além disso, diversos recursos mais sofisticados estão disponı́veis ao usuário para que se possa realizar um pós-processamento detalhado dos resultados obtidos em simulações numéricas. Módulos de Python também estão disponı́veis para acessar os conteúdos do Paraview através de instruções em linguagem de programação. Esta ferramenta está disponı́vel nos principais sistemas operacionais e pode ser encontrada no seguinte endereço: http://www.paraview.org 2 Mecânica de massas pontuais 2.1 Movimento Horizontal de um Carrinho Neste exemplo deseja-se calcular como a força de atrito linear Fdrag = −bv atua em um carrinho com massa m a fim de desacelerá-lo até sua completa parada na direcao x. Desconsidere o atrito dos mancais no eixo de rodas do carrinho em Fig. (2). v0 Fdrag x Figura 2: Desaceleração de carrinho por atrito do ar linear Fdrag = −bvx. m dvx dt = −bv (50) Para encontramos a solução numérica deste problema, usaremos diferenças finitas progressiva para a discre- tização da derivada da velocidade em relação ao tempo: m vn+1 x − vn x ∆t = −bvx (51) Note que o método de discretização acima recebe também o nome de Método de Euler para solução de equação diferencial ordinária. Este método é o tipo de método explı́cito mais básico para integração numérica. Como todo método numérico, o Método de Euler é uma aproximação da solução exata, por isso, a solução numérica pode se afastar da solução exata dependendo da escolha do tamanho do passo de tempo ∆t. No limite onde ∆t tende a zero, a solução numérica coincide com a solução exata. Em problemas simples, pode-se escolher um passo de tempo extremamente pequeno, de modo que o erro gerado pela solução numérica seja praticamente desprezı́vel. Entretanto, para problemas de grande porte, o uso de passos de tempo pequenos inviabilizam a solução devido à duração total de simulação, que pode levar dias, meses ou até mesmo anos para que se chegue na solução desejada. Outros métodos de aproximação podem ser usados para obtenção de resultados mais precisos e mais rápidos. No caso de equações ordinárias, pode-se usar o Método de Runge-Kutta. Uma vez encontrada a equação discreta da equação ordinária, pode-se determinar o valor da velocidade no próximo passo de tempo n + 1 fazendo: vn+1 x = vn x − ∆t bvn x m (52) Este procedimento pode então ser repetido sucessivamente para que se obtenha a velocidade em diversos tempos, ou seja, n+1, n+2, n+3, n+4 . . . e com isso determine a distribuição da velocidade em função do tempo. Para o problema em questão, observa-se que a velocidade diminuirá exponencialmente até um valor próximo a zero, concluindo-se que a velocidade do carrinho foi reduzida até sua parada completa. Note que à priori não se sabe quantas repetições devem ser realizadas no cálculo de vn+1 para que se obtenha o valor zero para a velocidade. Este cálculo dependerá dos dados do problema e do tamanho escolhido para o passo de tempo ∆t. Para efeitos de validação do método de cálculo numérico apresentado, pode-se usar a solução analı́tica da Eq. (50) para v(t). Note que nem sempre é possı́vel obter solução analı́tica de problemas para validação, entretanto busca- se, sempre que possı́vel, o uso desta ferramenta para comprovação do código numérico elaborado. A solução 17
  • 18. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS analı́tica toma a seguinte forma: v(t) = v0e−bt/m (53) onde v0 é a velocidade inicial do carrinho, t é o tempo medido em segundos e b é o coeficiente de atrito linear. Ao integrarmos novamente a equação de v(t) obtemos a solução da posição, já que dx/dt = vx: x(t) = Z t 0 v(t)dt = x∞(1 − e−bt/m ) (54) onde x∞ = vx0m/b. A solução numérica do problema pode ser encontrada na Fig. (3) onde a comparação com a solução exata (ou analı́tica) é feita para validação dos cálculos de discretização. Como esperada, a solução do problema em t = 0s é a própria velocidade inicial. Com o tempo se aproximando de t = 60s, a velocidade se reduz assintoticamente ao valor v = 0. Note que o tempo de simulação numérica poderia ter ultrapassado o valor de t = 60s, entretanto o resultado não mudaria, com isso assume-se que depois deste valor de tempo, a variação da velocidade é desprezı́vel e a simulação finalizada. 0 1 2 3 4 5 6 7 8 9 10 0 10 20 30 40 50 60 velocidade [m/s] tempo [s] numérico analítico Figura 3: Resultado da simulação numérica para o cálculo da velocidade com o tempo de um carrinho em desaceleração. No gráfico pode ser observada a comparação da solução numérica representadas por cı́rculos e a solução exata, ou analı́tica, representada pela linha cheia. Dados da simulação: Tabela 1: Dados da simulação do carrinho submetido à força de atrito linear do ar. massa da particula coeficiente de atrito passo de tempo [kg] [kg]/[s] [s] m = 1.0 b = 0.1 ∆t = 0.1 Condições iniciais: 2.2 Velocidade terminal de uma gota Neste problema deseja-se calcular como a força de atrito linear Fdrag = bv atua em uma partı́cula com massa m sob uma força de gravidade Fgrav = mg a fim de desacelerá-la até o equilı́brio de forças, onde a aceleração da massa pontual seja igual a 0 na direcao y. 18
  • 19. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS Tabela 2: Continuação de dados da simulação do carrinho submetido à força de atrito linear do ar. massa da partı́cula viscosidade dinâmica do ar coeficiente de atrito linear passo de tempo [kg] [kg]/[m][s] [kg]/[s] [s] m = ρV β = 1.6e − 04 b = βD ∆t = 1e − 7 Tabela 3: Condições iniciais da simulação do carrinho submetido à força de atrito linear do ar. tempo inicial velocidade inicial posição inicial [s] [m]/[s] [m] t = 0.0 vx0 = 10.0 x = 0.0 Figura 4: Balanço de forças atuando em uma gota caı́ndo sob efeito gravitacional Fg = mg e atrito do ar linear Fdrag = bv. Através da 2a. Lei de Newton, a equação matemática para modelar este problema é escrita como: m dv dt = Fdrag + Fg (55) onde v(t) é a incógnita que queremos resolver. A equação discreta obtida através do método de Euler de 1a ordem é representado por uma equação algébrica: m vn+1 y − vn y ∆t = −bvn y + mg (56) Isolando-se a incógnita discreta da velocidade vy no tempo n + 1, obtem-se a seguinte equação algébrica na sua forma final: vn+1 y = vn y − ∆t bvn y m + ∆tg (57) Os dados para execução deste problema encontram-se na Tab. (4). Este procedimento deverá ser repetido sucessivamente para que se obtenha a velocidade nos diversos tempos, ou seja, n + 1, n + 2, n + 3, n + 4 . . . e com isso determine a distribuição da velocidade em função do tempo. Para o problema em questão, observa-se que a velocidade aumentará até que a gota esteja em equilı́brio dinâmica, ou seja, a força de atrito fique igual à força de gravidade. Novamente, não se sabe quantas repetições devem ser realizadas no cálculo de vn+1 para que se obtenha o valor de velocidade terminal para a gota. Este cálculo dependerá dos dados do problema e do tamanho escolhido para o passo de tempo ∆t. A Eq. (55) pode ser resolvida analiticamente para v(t) e sua solução analı́tica toma a seguinte forma: v(t) = vy0e−bt/m − vlim(1 − e−bt/m ) (58) onde vy0 é a velocidade inicial da gota, ou seja v = 0, t é o tempo medido em segundos e b é o coeficiente de 19
  • 20. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS atrito. Ao integrarmos novamente a equação de v(t) obtemos a solução da posição, já que dy/dt = vy: y(t) = Z t 0 v(t)dt (59) A solução numérica deste problema usando a Tab. (4) como valores de referência pode ser encontrada na Fig. (5) onde a comparação com a solução exata (ou analı́tica) é feita para validação dos cálculos de discretização. Espera-se desta solução um comportamento de aumento da velocidade até um valor de tempo. Em seguida, a força de atrito se igualará ao valor da força de gravidade e a gota não aumentará de velocidade. A solução do problema para valor de t = 0s é a velocidade. Com o tempo se aproximando de t = 3.0 × 10−6 s, a velocidade se estabiliza com o valor de aproximadamente v = 6.0 × 10−5 m/s. Para conhecer o valor analı́tico da velocidade de estabilização, ou velocidade limite vlim, basta calculá-la através da 2a. Lei de Newton onde o termo de aceleração é nulo, pois não há mais variação de velocidade. Com isso, vlim = −mg/b. 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 0.0 5.0 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 velocidade [m/s] x 10 −5 tempo [s] x 10 −6 numérico analítico Figura 5: Resultado da simulação numérica para o cálculo da velocidade com o tempo de uma gota em queda. No gráfico pode ser observada a comparação da solução numérica representadas por cı́rculos e a solução exata, ou analı́tica, representada pela linha cheia. Tabela 4: Dados da simulação da gota submetida à força de atrito linear do ar. diâmetro da gota óleo densidade do lı́quido aceleração da gravidade volume da gota [m] [kg]/[m3 ] [m]/[s2 ] [m3 ] D = 1.5e − 06 ρ = 840.0 g = 9.81 V = πD3 /6.0 2.3 Lançamento de projétil Neste exemplo deseja-se calcular como a força de atrito linear F = −bv, ou a força de atrito quadrática F = −cv2 atuam em uma partı́cula ao ser lançada como um projétil de massa m sob efeito da força de gravidade F = mg. Como condição de contorno para este problema, adota-se condição de parede elástica em y = 0, ou seja, o projétil é rebatido com velocidade contrária igual à de choque, sem absorsão de energia cinétida pela parede. Dados Iniciais t 0.0 [s] |v| 30 [m]/[s] θ 50 ◦ x 0.0 [m] y 40 [cm] A Fig. (6) mostra esquematicamente a trajetória do projétil ao ser lançado de uma altura y = h com velocidade vx e vy definidas. Ao tocar na parede inferior, o projétil é rebatido e continua sua trajetória. A condição de contorno pode ser incorporada ao problema através de uma condição de monitoramento altura do projétil, ou seja, quando a altura do projétil h for menor que 0, a velocidade vertical vy deverá mudar de sentido. Este esquema é um modelo matemático para impor condição de parede e rebatimento do projétil. 20
  • 21. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS Para o caso de atrito linear onde F = bv, as equações de movimento em x e y são desaco- pladas, ou seja, as equações podem ser resolvidas separadamente pois uma não depende da outra. Entretanto, para o caso de atrito quadrático F = cv2 , as equações estão aco- pladas, pois v2 = v|v| = v q v2 x + v2 y. Este acoplamento impede que as equações sejam resolvidas separadamente, logo tornando o problema mais sofisticado. Analiticamente é possı́vel encontrar a solução deste problema para o caso de atrito linear. Por outro lado, a equação de movimento com atrito quadrático não tem solução analı́tica, fazendo com que o procedimento numérico seja a única maneira de se resolver o problema. A equação vetorial (em x e y) toma a seguinte forma: vy=v0sen(a) Fdrag Fg g=9.81m/s2 Fdrag Fg Fdrag Fg t0 t1 t2 Fdrag Fg t3 y=h x y parede a vx=v0cos(a) Figura 6: Desaceleração de um projetil por atrito do ar Fdrag = −bv sob efeito de gravidade. Note também que o projétil é rebatido quando em contato com a parade em y = 0. m dv dt = Fdrag + Fg          m dvx dt = Fdragx m dvy dt = Fdragy + Fgy (60) Na Fig. (7) observa-se o resultado da trajetória do projétil em três meios distintos: (a) vácuo, (b) ar com atrito linear e (c) ar com atrito quadrático. É esperado que no vácuo o projétil não desacelere, mantendo sua trajetória indefinidamente. Nos casos com atrito, verifica-se que a força de atrito linear é menor que a força de atrito quadrática. Note que a condição de contorno de parede em y = 0 faz com que o projétil mude sua trajetória. Esta condição deve estar explicitamente definida no código numérico através da verificação da altura da partı́cula, ou seja, quando y 0 a velocidade da partı́cula na direção y muda de direção vy = −vy. Tabela 5: Dados da simulação de lançamento de projétil com atrito linear. diâmetro volume massa viscosidade coeficiente gravidade passo de tempo [m] [m3 ] [m] [N][s]/[m2 ] [N][s]/[m] [m]/[s2 ] [s] D = 7e − 2 V = πD3 /6.0 m = 0.15 β = 0.16 b = βD g = 9.81 ∆t = 0.01 Tabela 6: Dados da simulação de lançamento de projétil com atrito quadrático. diâmetro volume massa coeficiente coeficiente gravidade passo de tempo [m] [m3 ] [m] [N][s2 ]/[m4 ] [N][s2 ]/[m2 ] [m]/[s2 ] [s] D = 7e − 2 V = πD3 /6.0 m = 0.15 γ = 0.25 c = γD2 g = 9.81 ∆t = 0.01 2.4 Sistema massa-mola Neste exemplo deseja-se calcular como a força de mola Fspring = −kx atua em um carrinho com massa m sem dissipação. A Fig. (8) mostra um desenho esquemático do problema a ser tratado. Nele, pode-se verificar 21
  • 22. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS 0 5 10 15 20 25 30 35 0 20 40 60 80 100 120 140 160 180 200 y [m] x [m] vácuo atrito linear atrito quadrático Figura 7: Resultado da simulação numérica para o cálculo da posição da partı́cula (projétil) lançada em três meios distintos: (a) vácuo, (b) ar com atrito linear e (c) ar com atrito quadrático. Note a condição de contorno de parede para y = 0, onde o projétil é rebatido elasticamente. que o carrinho pode deslizar livremente na direção x, além de estar diretamente conectado a uma mola com coeficiente k. Uma velocidade inicial v0 é utilizada para iniciar a movimentação do carrinho. Para este problema, considera-se o carrinho com uma massa pontual com mesma massa m, tendo este sistema modelado através da segunda lei de Newton: m dv dt = −kx (61) onde v é a velocidade do carrinho, t é o tempo e x é a coordenada espacial. Para discretização da equação diferencial ordinária, utiliza-se o método de Euler para transformar a derivada dv/dt em termo algébrico da diferença de velocidades em tempos consecutivos vn+1 − vn dividido pelo passo de tempo ∆t = tn+1 − tn : m vn+1 − vn ∆t = −kx (62) note que para os problemas apresentados nesta seção o passo de tempo ∆t é um valor conhecido e constante, sendo ajustado conforme o método de discretização escolhido. Portanto, a única variável desconhecida para o problema discreto é a velocidade no tempo n+1. Este procedimento deve então ser repetido através de um loop até que se encontre a evolução da velocidade ao longo do tempo desejada. Com isso a velocidade vn+1 calculada deverá ser utilizada no próximo passo de tempo como vn , ou seja vn = vn+1 , e então repetido o procedimento. Ao final de várias iterações, pode-se plotar o resultado de todas as velocidades calculadas no tempo total de simulação como mostrado na Fig. (9). v0 coeficiente mola k x m Figura 8: Sistema massa-mola sem dissipação Fspring = −kx O problema de massa-mola apresentado neste seção admite solução analı́tica através de integração da equação diferencial. A solução analı́tica pode então ser comparada com a solução numérica realizada através da discre- tização da equação. Com isto, pode-se verificar se o método numérico convergiu para a solução desejada. Neste 22
  • 23. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS caso não há grandes vantagens em realizar um procedimento numérico, entretanto a mesma metodologia poderá ser usada em problemas mais complicados, onde muitos deles não apresentam solução analı́tica. v(t) = −wAcos(wt + j) (63) x(t) = Z t 0 v(t)dt −→ x(t) = wAsen(wt + j) (64) onde v(t) é o valor da velocidade em função do tempo, w é a frequência angular, t é o tempo e j é a constante de fase. A Fig (9) mostra a solução numérica do modelo matemático que representa a oscilação no sistema massa-mola do problema proposto, comparada com sua solução analı́tica dada pela Eq. (63). −10 −5 0 5 10 0 10 20 30 40 50 60 70 80 90 100 velocidade [m/s] tempo [s] numérico analítico Figura 9: Resultado da simulação numérica para o cálculo da velocidade com o tempo de um sistema massa-mola sem dissipação. A comparação com a solução analı́tica dada pela Eq. (63) é observada no gráfico. Na Fig. (10), pode-se observar o espaço de fases do problema massa-mola sem dissipação. O espaço de fases é a representação das variáveis dinâmicas relevantes de um sistema, que para o presente problema é a relação entre a velocidade da partı́cula v e sua posição x. Dados da simulação: Tabela 7: Dados da simulação do sistema massa-mola sem dissipação. massa coeficiente frequência passo de tempo [m] [kg]/[s2 ] [Hz] [s] m = 1.0 k = 0.1 ω = p k/m ∆t = 0.01 Condições iniciais: Tabela 8: Condições iniciais da simulação do sistema massa-mola sem dissipação. tempo inicial velocidade posição [s] [m]/[s] [m] t = 0.0 vx = 10.0 x = 0.0 23
  • 24. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS −10 −5 0 5 10 −30 −20 −10 0 10 20 30 velocidade [m/s] x [m] Figura 10: Espaço de fases para o problema massa-mola sem dissipação. 2.5 Sistema massa-mola vertical Neste exemplo deseja-se calcular como a força de gravidade F = −mg atua em um bloco com massa m e que pode ser modelado como uma massa pontual, sob uma forca elástica (de mola) F = −ky a fim de mantê-la oscilando indefinitivamente, já que não há dissipação no sistema. v0 coeficiente mola k y m Figura 11: Sistema massa-mola sem dissipação e com a força da gravidade atuando Fspring + Fgrav = −ky + mg A equação em y: m dvy dt = Fspring + Fgrav (65) onde Fspring = Fspringy = −ky e Fgrav = Fgravy = mgy, m representa a massa do objeto, gy representa a aceleração da gravidade na direção y e k a constante de mola. Dados da simulação: • k = 0.1 coeficiente da mola • y = 0.0 posição inicial da partı́cula • v0 = 10.0 velocidade inicial da partı́cula • g = 9.81 [m/s2 ] aceleração da gravidade • D = 7.0e − 02 [m] diâmetro da partı́cula • dt = 0.1 [s] passo de tempo • t = 0.0 tempo total da simulação • m = 0.15 [kg] massa da partı́cula 24
  • 25. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS −15 −10 −5 0 5 10 15 0 5 10 15 20 25 30 velocidade [m/s] tempo [s] numérico Figura 12: Resultado da simulação numérica para o cálculo da velocidade com o tempo de um sistema massa-mola sem dissipação e com força de gravidade. −20 −15 −10 −5 0 5 10 15 20 −35 −30 −25 −20 −15 −10 −5 0 5 velocidade [m/s] x [m] Figura 13: Espaço de fases para o problema massa-mola sem dissipação. 2.6 Sistema massa-mola-amortecedor Neste exemplo deseja-se calcular como a força de atrito linear Ffriction = −bv causada pelo contato do carrinho com a superfı́cie atua em um carrinho com massa m sob uma força elástica (de mola) linear Fspring = −kx a fim de desacelerá-la até o equilı́brio de forças, onde a aceleração e velocidade seja igual a 0 na direcao x. A Fig. (14 mostra um desenho esquemático do problema a ser tratado. Nele, pode-se verificar que o carrinho pode deslizar livremente na direção x, além de estar diretamente conectado a uma mola com coeficiente k. Observe ainda que o contato do carrinho com a superfı́cie provoca uma força contrária ao sentido de movimentação do carrinho. Pela segunda lei de Newton, a equação da velocidade em função do tempo se escreve: m dv dt = Fspring + Fdump (66) 25
  • 26. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS v0 coeficiente mola k x m amortecedor Figura 14: Sistema massa-mola-amortecedor onde a força de mola Fspring = −kx e a força de amortecimento (ou atrito) Ffriction = −bv atuam no sistema onde m é a massa, v é o vetor velocidade, que para o problema atual atua apenas na direção x, ou seja, v = vx, b é o coeficiente de amortecimento e k é o coeficiente de mola. Como só há movimento na direção x a equação vetorial acima se transforma em uma equação escalar que deve é escrita da seguinte forma: m dvx dt = −kx − bvx (67) Vamos agora introduzir duas constantes para caracterização dos problemas a se modelar: b m = 2β (68) o parâmetro β pode ser chamado de constante de amortecimento, é simplesmente uma maneira conveniente para caracterizar a magnitude da força de amortecimento que atua no sistema massa-mola-amortecedor. Um valor grande de β representa um fator de amortecimento grande. Introduzimos aqui a segunda constante: ω0 = r k m (69) Onde ω0 é agora definido como frequência natural de oscilação, uma vez que o atrito está presente no sistema. Em outras palavras, pode-se interpretar ω0 como a frequência na qual o sistema oscilaria se não houvessem forças de atrito presente. Com isso, reescreve-se a equação como: dvx dt = −2βvx − ω2 0x (70) • Amortecimento ausente: β = 0 • Amortecimento fraco: β ω0 • Amortecimento forte: β ω0 • Amortecimento crı́tico: β = ω0 Dados da simulação: Tabela 9: Dados da simulação do sistema massa-mola-amortecedor. caso massa frequência amortecimento passo de tempo [m] [Hz] 1/[s] [s] ausente m = 1.0 ω = 0.5 β = 0.00 ∆t = 0.1 fraco m = 1.0 ω = 0.5 β = 0.10 ∆t = 0.1 forte m = 1.0 ω = 0.5 β = 0.75 ∆t = 0.1 critico m = 1.0 ω = 0.5 β = 0.50 ∆t = 0.1 Condições iniciais: 26
  • 27. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS −20 −10 0 10 20 0 5 10 15 20 25 30 posição [m] tempo [s] β = 0 (a) −20 −10 0 10 20 0 5 10 15 20 25 30 posição [m] tempo [s] β ω (b) −20 −10 0 10 20 0 5 10 15 20 25 30 posição [m] tempo [s] β ω (c) −20 −10 0 10 20 0 5 10 15 20 25 30 posição [m] tempo [s] β = ω (d) Figura 15: Resultado da simulação numérica do sistema massa-mola-amortecedor para diversas confirgurações dos parâmetros β e frequência fixada em ω = 0.5: (a) amortecimento ausente β = 0, (b) amortecimento fraco β ω0, (c) amortecimento forte β ω0 e (d) amortecimento crı́tico β = ω0. Tabela 10: Condições iniciais da simulação do sistema massa-mola-amortecedor. tempo inicial velocidade posição [s] [m]/[s] [m] t = 0.0 vx = 10.0 x = 0.0 2.7 Oscilador de Van Der Pol No estudo de sistemas dinâmicos, o oscilador de Van der Pol é um oscilador não-conservativo com fator de amortecimento nao-linear µ(1 − x2 ). Esta equação assemelha-se com o sistema massa-mola-amortecedor, com massa do sistema m = 1, coeficiente de mola k = 1 e o coeficiente de amortecimento não-linear b = µ(1 − x2 ). Dependendo do valor da posição x, o amortecimento pode ter sinal positivo ou negativo. Se o sinal é negativo (x 1), o efeito do sistema é semelhante ao sistema já apresentado para o sistema massa-mola-amortecedor, entretanto quando o valor de x 1, o amotercimento tem sinal positivo, o sistema reage como um amortecedor ao contrario, ou seja, impulsionando o sistema ao invés de amortecê-lo. Esta equação pode ser usada para modelar um sistema biologico como do batimento do coraçãoo. Use métodos de aproximação de primeira ordem e de alta ordem (maior que de primeira ordem) para solucionar a equação diferencial de Van der Pol. Plote o tempo vs. velocidade e plote também o diagrama de fases distância vs. velocidade, obtendo o circulo limite 27
  • 28. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS para diversos valores de µ. dv dt − µ 1 − x2 v + x = 0 (71) Dados da simulação: • µ = 0.1, 0.5, 1, 1.5 coeficientes • dt = 0.05 passo de tempo Condições iniciais: • nIter = 2000 no de iterações sugerido • x = 0.2 posição inicial da partı́cula • v0 = 0.1 velocidade inicial da partı́cula Esta equação diferencial ordinária pode ser resolvida através do qualquer método numérico de solução, como os métodos ilustrados nos problemas anteriores. Podemos fazer uma aproximação linear de primeira ordem usando o método de Euler. Note que esta equação é de primeira ordem para a velocidade v e de segunda ordem para a variável espacial x. Esta equação também pode ser reescrita da seguinta forma: d2 x dt2 − µ 1 − x2 dx dt + x = 0 (72) Podemos diminuir a ordem da equação escrevendo duas equações de primeira ordem para x: dx dt = v (73) dv dt − µ 1 − x2 v + x = 0 (74) Resultado na mesma equação incialmente apresentada. Usando o método de Euler de primeira ordem, podemos discretizar as equações da seguinte forma: xn+1 − xn ∆t = v (75) vn+1 − vn ∆t − µ 1 − x2 vn + x = 0 (76) Note que na Eq. (76) estamos avaliando o termo da velocidade v presente na parcela de amortecimento µ(1−x2 )v no tempo n. Neste caso, este termo está explı́cito no tempo, pois conhecemos o valor de vn . Uma outra forma de avaliar o mesmo termo seria na forma implı́cita no tempo, ou seja, no tempo n + 1. Na forma explı́cita, passamos o termo para o lado direito. Na forma implı́cita, deixamos o termo no lado esquerdo. Com isso, as variáveis xn+1 e vn+1 são escritas na forma: xn+1 = xn + ∆tv (77) vn+1 = vn + ∆tµ 1 − x2 vn − ∆tx (78) Uma aproximação melhor para as derivadas da equação de Van Der Pol podem ser usadas aumentando-se a ordem do método. Podemos então usar o método de Runge-Kutta de segunda ordem. A primeira equação fica igual ao método de Euler: xn+1 = xn + ∆tv (79) 28
  • 29. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS A segunda equação toma a seguinte forma: k1 = ∆tµ 1 − x2 vn − ∆tx (80) k2 = ∆tµ 1 − x2 vn + k1 2 − ∆tx (81) vn+1 = vn + 1 2 k1 + k2 (82) Note que o valor de k1 é igual ao método de Euler. A solução do problema pode então ser plotada. A Fig. (16) mostra a solução do tempo t pela velocidade v do problema para quatro configurações do parâmetro µ que antecede o termo de amortecimento, enquanto que a Fig. (17) mostra o espaço de fases. −2 −1 0 1 2 0 10 20 30 40 50 60 70 80 velocidade [m/s] tempo [s] µ=0.1 (a) −2 −1 0 1 2 0 10 20 30 40 50 60 70 80 velocidade [m/s] tempo [s] µ=0.5 (b) −3 −2 −1 0 1 2 3 0 10 20 30 40 50 60 70 80 velocidade [m/s] tempo [s] µ=1.0 (c) −4 −3 −2 −1 0 1 2 3 4 0 10 20 30 40 50 60 70 80 velocidade [m/s] tempo [s] µ=1.5 (d) Figura 16: Resultado da simulação numérica do oscilador de Van Der Pol para diversas confirgurações do parâmetro µ que antecede o termo de amortecimento: (a) µ = 0.1, (b) µ = 0.5, (c) µ = 1.0 e (d) µ = 1.5. 2.8 Pêndulo simples Deseja-se resolver o problema do pêndulo simples, onde uma massa se encontra sob efeito de força gravitacional Fg = mg e suspensa através de um cabo com comprimento l. Neste exercı́cio, é conveniente usarmos um sistema de coordenadas cilı́ndricas, com isso tornando mais fácil nossa análise: m dvθ dt = − mg l sin θ −→ m d2 θ dt2 + mg l sin θ = 0 (83) Esta equação pode ser resolvida de diferentes formas. A mais simples é tornar esta equação diferencial de 29
  • 30. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS −4 −3 −2 −1 0 1 2 3 4 −4 −3 −2 −1 0 1 2 3 4 µ=1.5 µ=1.0 µ=0.5 µ=0.1 velocidade [m/s] x [m] Figura 17: Espaço de fases para o problema do oscilador de Van Der Pol para as quatro diferentes configurações do parâmetro µ. Fg g=9.81m/s2 l T x y T Figura 18: Pêndulo simples sob efeito de força gravitacional Fg = mg. segunda ordem em duas equações de ordem mais baixa: dθ dt = vθ (84) e m dvθ dt + mg l sin θ = 0 (85) Com isso, resolve-se a equação para encontrar θ no tempo n + 1: θn+1 − θn ∆t = vn −→ θn+1 = θn + ∆tvn (86) E depois a Eq. (85) para encontrar v no tempo n + 1: vn+1 − vn ∆t = − g l sin θ −→ vn+1 = vn − ∆t g l sin θn+1 (87) Este processo deve ser repetido sucessivamente em um loop para encontrar a evolução de v e θ no tempo t. Como não há adição ou perda de energia no sistema, espera-se um comportamento de movimento repetitivo com o tempo. 30
  • 31. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS Para pequenas perturbações esta equação tem solução analı́tica, com isso aproxima-se sin θ = θ, chegando à seguinte equação: m d2 θ dt2 + mg l θ = 0 (88) A solução analı́tica é então escrita da seguinte forma para pequenos angulos ( 10◦ ): θ(t) = θ0 cos( p g/lt) (89) −0.2 −0.1 0 0.1 0.2 0 1 2 3 4 5 6 7 8 9 10 θ [rad] tempo [s] numérico analítico Figura 19: Resultado da simulação numérica para o cálculo da posição da massa do pêndulo e comparação com a solução analı́tica para ângulos pequenos θ = 10◦. −0.6 −0.4 −0.2 0 0.2 0.4 0.6 −0.2 −0.15 −0.1 −0.05 0 0.05 0.1 0.15 0.2 velocidade [rad/s] θ [rad] Figura 20: Espaço de fases para o problema do pêndulo sem dissipação. Dados da simulação: Condições iniciais: 31
  • 32. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS Tabela 11: Dados da simulação do pêndulo submetido à força de gravidade. massa da particula aceleração da gravidade passo de tempo comprimento da haste [kg] [m]/[s2 ] [s] [m] m = 1.0 g = 9.81 ∆t = 0.01 l = 1.0 Tabela 12: Condições iniciais da simulação do pêndulo simples. tempo inicial velocidade inicial ângulo inicial posição inicial [s] [m]/[s] ◦ [rad] t = 0.0 v0 = 0.0 10 θ0 = 2gradπ 360 2.9 Pêndulo amortecido forçado Nesta seção deseja-se resolver o problema do pêndulo amortecido forçado (PAF), onde uma massa se encontra sob efeito de força gravitacional Fg = mg e suspensa através de um cabo com comprimento l submetida a uma força de atrito Fat = bv contrária ao movimento e sob forçagem externa do tipo F = F0cos(ωt) onde ω é a frequência de oscilação da forçagem e t é tempo. Como feito no problema do pêndulo simples, o PAF pode ser modelado por uma equação escrita em função do ângulo θ, ou seja, em coordenadas cilı́ndricas. Esta equação pode ser escrita da seguinte forma: m d2 θ dt2 = − mg l sin θ − b dθ dt + F0 l cos(ωt) (90) Uma representação ilustrativa pode ser verificada na Fig. (21) onde distribuição de forças é realizada para um pêndulo qualquer sob atuação de uma força F e da força de gravidade Fg. Fg g=9.81m/s2 l T x y T F bv Figura 21: Pêndulo simples sob efeito de força gravitacional Fg = mg, da força de atrito Fat = bv e da forçagem externa F = F0cos(ωt). A análise do sistema proposto pode ser simplificada com a introdução de parâmetros da seguinte forma: 2β = b m e ω2 0 = g l (91) Podemos ainda definir o parâmetro γ da seguinte forma: γ = F mlω2 0 = F mg (92) Através do uso destes parâmetros, podemos reescrever a Eq. (90) da forma a seguir: d2 θ dt2 = −ω2 0 sin θ − 2β dθ dt + γω2 0cos(ωt) (93) 32
  • 33. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS Tanto a Eq.(93) quanto a Eq. (90) podem ser resolvidas numericamente da mesma forma. Escolhemos então resolver a equação parametrizada. Esta equação pode ser resolvida de diferentes formas. Uma solução é transformar esta equação diferencial de segunda ordem em duas equações de ordem mais baixa através da seguinte definição: dθ dt = vθ (94) e dvθ dt = −ω2 0 sin θ − 2βvθ + γω2 0cos(ωt) (95) Com isso, resolve-se a equação para encontrar θ no tempo n + 1: θn+1 − θn ∆t = vn θ −→ θn+1 = θn + ∆tvn θ (96) E depois a Eq. (95) para encontrar v no tempo n + 1: vn+1 − vn ∆t = −ω2 0 sin θ − 2β dθ dt + γω2 0cos(ωt) −→ vn+1 = vn − ∆t ω2 0 sin θn+1 − 2βvθ + γω2 0cos(ωt) (97) Este processo deve ser repetido sucessivamente em um loop para encontrar a evolução de v e θ no tempo t. A Fig. (22) apresenta 4 simulações realizadas para o probelma do PAF usando valores de γ = 0.2, 0.9, 1.06, 1.073. Como é possı́vel notar, as Figs. (22a-b) descrevem comportamento altamente previsı́vel, com oscilações de amplitude constante para t 3. No entanto, as Figs. (22c-d), com parâmetro γ elevado, o comportamento das oscilações apresenta padrôes mais complexos. Quando γ = 1.073, é possı́vel notar que a amplitude do pêndulo a partir de t 15 não é constante. Outros valores de γ tornam o sistema ainda mais complexo, ou em outras palavras, caótico. A Fig. (23) apresenta o espaço de fases para valores do parâmetro γ = 0.2, 0.9, 1.06, 1.073. Este tipo de representação permite entendermos a resposta do sistema e a sensibilidade do parâmetro γ para o PAF. É possı́vel notar a presença de um cı́rculo limite como um atrator para um estado que está representado por curvas fechadas nos gráficos. Como visto em problemas anteriores, se a trajetória converge para um único ponto, este atrator é chamado de ponto fixo. No caso do PAF, o cı́rculo limite é o atrator, ou seja, é a região estável para onde o pêndulo oscilará. Dados da simulação: Tabela 13: Dados do parâmetro γ usados na simulação do PAF. parâmetro passo de tempo número de iterações [−] [s] [−] γ = 0.2 ∆t = 1e − 2 nIt = 6 × 102 γ = 0.9 ∆t = 1e − 3 nIt = 6 × 103 γ = 1.06 ∆t = 1e − 4 nIt = 1.6 × 105 γ = 1.073 ∆t = 1e − 5 nIt = 3 × 106 Condições iniciais: 2.10 Borboleta de Lorenz O Sistema de Lorenz é um sistema de três equacões diferenciais ordinárias estudadas por Edward Lorenz para observação de trajetórias caóticas. Usando o método de Euler para discretização das derivadas temporais dx/dt, 33
  • 34. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS −0.4 −0.3 −0.2 −0.1 0 0.1 0.2 0.3 0.4 0 1 2 3 4 5 6 θ [rad] tempo [s] numérico (a) −3 −2 −1 0 1 2 3 0 1 2 3 4 5 6 θ [rad] tempo [s] numérico (b) −4 −2 0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16 θ [rad] tempo [s] numérico (c) −10 −5 0 5 10 15 0 5 10 15 20 25 30 θ [rad] tempo [s] numérico (d) Figura 22: Resultado da simulação numérica do pêndulo amortecido forçado apresentado pelo modelo da Eq. (93) e com valores do parâmetro (a) γ = 0.02, (b) γ = 0.9, (c) γ = 1.06 e (d) γ = 1.073. Tabela 14: Condições iniciais da simulação do PAF. tempo inicial velocidade inicial ângulo inicial frequência motriz frequência natural β [s] [m]/[s] ◦ [Hz] [Hz] [Hz] t = 0.0 v0 = 0.0 θ0 = 0.0 ω = 2π ω0 = (3/2)ω β = ω0/4.0 dy/dt e dz/dt, resolva o sistema de EDOs e encontre a trajetória da partı́cula. Plote a trajetória nos planos x − y, x − z e y − z. dx dt = σ(y − x) (98) dy dt = x(ρ − z) − y (99) dz dt = xy − βz Na Fig. (24) observa-se a trajetória formada pela solução das equações. No gráfico tridimensional pode ser observada a solução numérica obtida pelo método de Euler para discretização das derivadas temporais. O passo de tempo utilizado nesta simulação é ∆t = 1e − 4, enquanto que o número de iterações realizadas foi de 1e6. As condições iniciais são: 34
  • 35. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS −2.5 −2 −1.5 −1 −0.5 0 0.5 1 1.5 2 2.5 −0.4 −0.3 −0.2 −0.1 0 0.1 0.2 0.3 0.4 inicial x0=v0=0 velocidade [rad/s] θ [rad] (a) −20 −15 −10 −5 0 5 10 15 20 −3 −2 −1 0 1 2 3 inicial x0=v0=0 velocidade [rad/s] θ [rad] (b) −25 −20 −15 −10 −5 0 5 10 15 20 25 −4 −2 0 2 4 6 8 10 12 14 16 inicial x0=v0=0 velocidade [rad/s] θ [rad] (c) −25 −20 −15 −10 −5 0 5 10 15 20 25 −10 −5 0 5 10 15 inicial x0=v0=0 velocidade [rad/s] θ [rad] (d) Figura 23: Espaço de fases para o problema do pêndulo amortecido forçado apresentado pelo modelo da Eq. (93) e com valores do parâmetro (a) γ = 0.02, (b) γ = 0.9, (c) γ = 1.06 e (d) γ = 1.073. −20−15−10−5 0 5 10 15 20 25 −30 −20 −10 0 10 20 30 0 10 20 30 40 50 60 x y z Figura 24: Resultado da simulação numérica para o cálculo da trajetória em x, y e z obteda pelas equações de Lorenz. No gráfico tridimensional pode ser observada a solução numérica obtida pelo método de Euler para discretização das derivadas temporais. Note que outras condições iniciais podem ser testadas. É recomendando usar 2 condições iniciais e simular, mostrando os resultados em um Parâmetros: Discretize as equações usando o método de Runge-Kutta de 4a ordem para solucionar o sistema de EDOs apresentado acima, tendo como exemplo a solução da equação diferencial da velocidade: dx dt = f(t, x) (100) 35
  • 36. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS Tabela 15: Condições iniciais da simulação de trajetória do sistema de Lorenz. tempo inicial posição x posição y posição z [s] [m] [m] [m] t = 0.0 15.0 −25.0 −20.0 Tabela 16: Parâmetros para o sistema de Lorenz. ρ σ β 28 10 8/3 e calculado o valor de xn+1 usando valores de k1, k2, k3 e k4: k1 = f(t, x) k2 = f(t + ∆t/2, x + ∆t 2 k1) k3 = f(t + ∆t/2, x + ∆t 2 k2) k4 = f(t + ∆t, x + ∆tk3) xn+1 = xn + ∆t 6 (k1 + 2k2 + 2k3 + k4) (101) 2.11 Falkner-Skan Deseja-se encontrar a solução numérica da equação de Falkner-Skan através da transformação da equação original de terceira ordem para outras 3 de ordem mais baixa. Este procedimento já foi realizado para os problemas envolvendo a 2a Lei de Newton e aqui será repetido. Note que a equação de Falkner-Skan é uma equação diferencial ordinária de 3a ordem e não-linear. A não-linearidade está no derivada primeira df/dη que está elevada ao quadrado. A variável independente é o η. d3 f dη3 + f d2 f dη2 + β 1 − df dη 2 = 0 (102) com três condições de contorno: f = 0 em η = 0 (103) df dη = 0 em η = 0 (104) df dη = 1 em η → ∞ (105) Estas condições de contorno exigem que o valor da função f seja 0 no inı́cio do problema, ou seja, em η = 0. Além desta, a outra condição de contorno exige que o valor da derivada da função f também seja 0 no inı́cio do problema. No entanto, a terceira e última condição de contorno exige que a derivada primeira tenha o valor de 1 quando η → ∞. A implementação computacional desta condição de contorno deve ser feita no final do cálculo computacional, garantindo o valor de 1 para a derivda de f, ou seja, o valor da função longe de η = 0 deve convergir no valor de 1. Na discretização, o valor de inf é substituı́do por algum valor suficientemente longe de η = 0, no entanto deverá ser finito pois a computação é incapaz de prolongar os cálculos infinitamente. No cálculo proposto deste problema, a condição de contorno para η → ∞ será satisfeita usando valores conhecidos 36
  • 37. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS para derivada segunda. Caso não se conheça o valor da derivada segunda, é necessário desenvolver um método do tipo ”shooting”para garantir o cumprimento da condição de contorno. Para redução de ordem, deve-se primeiramente introduzir variáveis até ordem n − 1, onde n é a ordem da equação diferencial original, que para este caso é 3. f = f1 (106) df dη = f2 (107) d2 f dη2 = f3 (108) Esta equação pode ser então transformada em três outras equações diferenciais acopladas como combinação de f1, f2 e f3: df1 dη = f2 (109) df2 dη = f3 (110) df3 dη = −f1f3 − β(1 − f2 2 ) (111) Para discretização das equações acima, pode-se utilizar qualquer esquema de discretização de equação diferencial ordinária como já apresentado nos exercı́cios anteriores. Utilizaremos aqui o esquema mais simples que é o método de Euler, com isso as equações são reescritas da seguinte forma: fn+1 1 − fn 1 ∆η = f2 (112) fn+1 2 − fn 2 ∆η = f3 (113) fn+1 3 − fn 3 ∆η = −f1f3 − β(1 − f2 2 ) (114) Note que para o caso de β = 0, a equação de Falkner-Skan se transforma na equação de Blasius para camada limite. Considere ∆η da mesma forma que ∆t nos exercı́cios anteriores. A Tab. (17) apresenta os valores iniciais de cada uma das equações diferenciais oriundas da redução de ordem da equação de Falkner-Skan. Além disso, o passo de integração ∆η, o coeficiente β e o limite de integração η são apresentados para este exercı́cio. Tabela 17: Dados inicias do problema de Falkner-Skan usados na simulação através do método de Euler e do método de Runge-Kutta de 2a ordem. inicial inicial inicial passo coeficiente limite de integração [−] [−] [−] [−] [−] [−] f1 = 0.0 f2 = 0.0 f3 = 0.005218 ∆η = 1e − 3 β = −0.1988 η = 6.20 f1 = 0.0 f2 = 0.0 f3 = 0.469600 ∆η = 1e − 3 β = 0.0000 η = 5.00 f1 = 0.0 f2 = 0.0 f3 = 1.232588 ∆η = 1e − 4 β = 1.0000 η = 8.40 f1 = 0.0 f2 = 0.0 f3 = 1.687218 ∆η = 1e − 5 β = 2.0000 η = 4.73 Como pode ser observado, o passo ∆η deve ser extremamente pequeno para que a solução numérica apresente convergência. Métodos de mais alta ordem podem ser usados para aumentar o passo de tempo mantendo 37
  • 38. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS 0 0.2 0.4 0.6 0.8 1 0 1 2 3 4 5 f 2 η β = −0.1988 β = 0.0000 β = 1.0000 β = 2.0000 Figura 25: Resultado da simulação numérica para o cálculo do perfil de velocidades para três valores do parâmetro β usando o método de Euler. Para o caso particular onde β = 0.0, a equação de Blasius de camada-limite é resolvida. a precisão do cálculo. O método de Runge-Kutta pode ser usado para obtenção de alta precisão na solução numérica de equações diferenciais ordinárias através da escolha da ordem de convergência do método. O método de Runge-Kutta de primeira ordem é equivalente ao método de Euler, entretanto os métodos de segunda, terceira e quarta ordem tem precisão superior ao método de Euler, que é de primeira ordem. Agora, discretize as equações usando o método de Runge-Kutta de 2a ordem para solucionar o sistema de EDOs apresentado acima. Note que apenas a equação de f3 dever ser discretizada pelo método Runge-Kutta, pois nas outras equações a discretização por alta ordem não melhora o resultado. Neste método, o valor de f3 pode ser então estimado através do cálculo dos coeficientes k1 e k2: k1 = − f1f3 − β(1 − f2 2 ) k2 = − f1 f3 + ∆η k1 2 − β(1 − f2 2 ) (115) Com isso, o valor de f3 pode ser obtido através de uma ponderação dos valores de k acima calculados: fn+1 3 = fn 3 + ∆η 2 (k1 + k2) (116) Note que, devido à ordem mais alta deste algorı́timo, a convergência para valores mais próximos da função resposta é mais rápida. Outros valores de passo η poderão ser utilizados, diminuindo a quantidade de interações necessárias e aumentando a velocidade de cálculo no computador. Faça um teste aumentando o passo ∆η até que a simulação seja interropida por divergência dos resultados, ou seja, valores do tipo inf ou nan apareçam nos resultados. Verifique qual é o maior passo de tempo possı́vel para simulações usando o método de Euler e o método de Runge-Kutta. Note que, apesar da ordem mais elevada do método de Runge-Kutta, ambos os métodos discretizam as derividas explicitamente e podem gerar divergência se o passo η atingir um valor limite. Este limite de passo é caracterı́stico de métodos explı́citos de discretização. Para retirar a restrição de passo, métodos implı́citos de discretização são indicados. 2.12 Mapa logı́stico O mapa logı́stico é um modelo matemático proposto por Robert May em 1976 e capaz de descrever a evolução populacional de uma espécie. Este simples modelo é o ponto inicial para a compreensão de problemas caóticos, 38
  • 39. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS onde um modelo determinı́stico perde completamente o poder de previsão para determinadas condições. Neste problema, obteremos a evolução populacional da espécie e notaremos diversas situações interessantes. Além disto, construiremos um diagrama de bifurcações para visualizar o inı́cio do caos através de um gráfico bidi- mensional. Matematicamente, esta equação se apresenta na forma de mapa da seguinte forma: xn+1 = µxn (1 − xn) (117) onde o valor de x representa a razão entre a população existente e a máxima possı́vel população da espécie. Os valores do parâmetro µ de interesse variam no intervalo de [0, 4]. O valor de xn+1 é simplesmente calculado conhecendo o valor do parâmetro µ, que é definido pelo programador e o valor de x no tempo anterior n, ou seja, xn. Como a variável de interesse x aparece multiplicada por ela mesma, esta equação é do tipo não-linear. Fisicamente, dois efeitos são capturados neste modelo: • reprodução: onde a população irá crescer em uma taxa proporcional à população atual quando esta população é pequena; • morte por fome: a taxa de crescimento diminuirá conforme uma dinâmica especı́fica. Resolvendo-se a Eq. (117) numericalmente, podemos observar comportamentos bem diferentes ao variar o valor do parâmetro µ. Algumas faixas de valores importantes são: • 0 ≤ µ ≤ 1: a população irá morrer, independente do valor inicial da população xn; • 1 ≤ µ ≤ 2: a população irá se aproximar rapidamente do valor de (µ − 1)/µ, independente do valor inicial da população xn; • 2 ≤ µ ≤ 3: neste ponto, a população também chegará ao valor de (µ − 1)/µ, no entanto a solução irá lentamente para este valor; • 3 ≤ µ ≤ 1 + p (6) ≈ 3.44949: a população irá flutuar permanentemente entre dois valores fixos, depen- dentes do parâmetro µ; • 3.44949 ≤ µ ≤ 3.54409: a população irá flutuar permanentemente entre quatro valores fixos; • µ ≥ 3.56995: a população apresenta comportamento caótico. Este ponto é conhecido como o inı́cio do caos. Para visualizarmos estes efeitos, podemos plotar um gráfico de itereções e a razão de população x para diversos parâmetros µ. Escolhemos os seguintes valores para µ = 0.8, 1.7, 2.8, 3.2, 3.5, 2.59, razão de população inicial x0 = 0.45 e número de iterações it = 65. Note que o valor de x0 não é fator influenciador do comportamento que desejamos compreender. Além dos gráficos apresentados, que permitem a visualização da evolução temporal (através das sucessivas iterações, podemos ainda apresetar um gráfico bidimensional chamado de diagrama de bifurcações que pode ser elaborado tomando-se os diversos valores da razão de população x no estado permanente, ou seja, próximo às últimas iterações it 40 usando diversos valores do parâmetro µ entre a faixa de [0, 4]. Note que valores de µ 4 a solução diverge e não pode ser utilizada. Para construção do diagrama de bifurcações, capture os pontos fixos de todas as simulações realizadas variando o parâmetro µ de 1 a 4. Para o gráfico apresentado, realizou-se ao todo 3000 simulações, variando o parâmetro µ com incremento de ∆µ = 1e − 3. Depois foi capturado os valores repetidos para iterações it 40 e então o gráfico foi produzido. 3 Geração de Malha 3.1 Classificação Malhas são estruturas geométricas usadas na discretização de equações matemáticas que serão resolvidas nu- mericamente pelo computador. Malhas unidimensionais são definidas ao longo do eixo x com coordenadas que podem ou não variar linearmente. Para o caso de malhas bidimensionais, as coordenadas são definidas no plano x − y através de pares de valores que informam a localização geométrica de cada ponto no plano. Em malhas tridimensionais, as coordenadas dos pontos são definidas no volume, ou seja, são defindas através de coordendas x, y e z. Frequentemente em métodos numéricos a informação da interconectividade de pontos em malhas 39
  • 40. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS −0.3 −0.2 −0.1 0 0.1 0.2 0.3 0.4 0.5 0 10 20 30 40 50 60 razão população [x] iteração [i] razão (µ−1)/µ (a) 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0 10 20 30 40 50 60 razão população [x] iteração [i] razão (µ−1)/µ (b) 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0 10 20 30 40 50 60 razão população [x] iteração [i] razão (µ−1)/µ (c) 0.4 0.5 0.6 0.7 0.8 0.9 0 10 20 30 40 50 60 razão população [x] iteração [i] razão (µ−1)/µ (d) 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 0 10 20 30 40 50 60 razão população [x] iteração [i] razão (µ−1)/µ (e) 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 0 10 20 30 40 50 60 razão população [x] iteração [i] razão (µ−1)/µ (f) Figura 26: Resultado da simulação numérica do mapa logı́stico apresentado pelo modelo da Eq. (117) para o máximo de iterações it = 64 e valores do parâmetro (a) µ = 0.80, (b) µ = 1.70, (c) µ = 2.80, (d) µ = 3.20, (e) µ = 3.50 e (f) µ = 3.59. computacionais é essencial, não bastando somente a localização geométrica de cada ponto. Com isso, além das coordenadas dos pontos, uma estrutura numérica adicional se faz necessária para representação da malha computacional. Quando se resolve uma equação através de uma aproximação numérica, o resultado é obtido nos pontos da malha computacional. (falta completar) Quando se discretiza uma equação diferencial, uma equação é definida para cada ponto da malha. Com isso, quanto mais pontos de malha, maior é o número de equações defindas, resultando em um consumo maior de 40
  • 41. INTRODUÇÃO À PROGRAMAÇÃO NUMÉRICA PARA ENGENHEIROS 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 2.4 2.6 2.8 3 3.2 3.4 3.6 3.8 4 razão população [x] µ Figura 27: Diagrama de bifurcação para o mapa logistı́co para faixa de valores do parâmetro µ = [2.4, 4]. processamento computacional, já que o número de operações lógicas será proporcional ao número de pontos discretos. • malha estruturada: • malha não estruturada: A geração de malhas é um problema matemático que pode ser de difı́cil solução. A seguir são apresentados problemas simples de geração de malha em espaços unidimensionais e bidimensionais. 3.2 Geração de malha 1D com espaçamento variável Criação de malha 1D para o método de elementos finitos com dx variando conforme as seguintes equações: • constante: dx = cte • quadrática: x2 • cúbica: x3 • exponencial: exp(x) Observe cada caso ilustriado na Fig. (28), onde a função escolhida fornece o espaçamento entre nós da malha. Para o caso linear Fig. (28a), o espaçamento dx é constante. Para os outros casos, o espaçamento varia conforme a função adotada. Parâmetros da malha: • L = 1.0 comprimento total da malha • nx = 10 número total de nós • ne = nx − 1 número total de elementos Dica: para criação de malha computacional, 2 estruturas são necessárias: um vetor de coordenadas dos nós da malha onde cada elemento do vetor é a posição do nó, e uma matriz de conectividade de nós onde a linha da matriz representa o elemento e as colunas representam os nós daquele elemento. 41