Ensino
Teaching

(This page is only in Portuguese.)


Equações Diferenciais: manual do utilizador (com Python)

Nos últimos anos, a maior parte do meu esforço de lecionação foi na área de equações diferenciais para engenharia, passando a incluir, mais recentemente, também alunos de matemática aplicada. Estas aulas foram realizadas no Departamento de Matemática da Faculdade de Ciências e Tecnologia da Universidade Nova de Lisboa

Após diversos anos, escrevi um livro-texto, que disponibilizo gratuitamente nesta página. Na minha opinião, o valor deste texto é incluir, junto com o ensino introdutório das equações diferenciais, módulos em Python para que os estudantes aprendam a teoria e simultaneamente aprendam a utilizar esta linguagem de programação para resolver os problemas propostos.

Livro-Texto

O material consiste em pdf com animações (para algumas simulações numéricas). São ficheiros (arquivos) muito pesados e devem ser descarregados por wi-fi (não em rede móvel), se possível uma única vez. Funcionam em computadores mas em dispositivos móveis (por exemplos, telemóveis/celulares ou tablets) as animações não devem funcionar.  

Há algumas sugestões importantes para quem quiser imprimir: remova as duas páginas iniciais (pois há fundo colorido), coloque a impressão em tons de cinza (impressões a cores são muito caras, mas não há nada de errado em as fazer), e, ao imprimir em frente e verso imprima "pelo lado maior". O formato do texto é otimizado para ecrãs (telas) e portanto está em formato paisagem.

Não recomendo a visualização diretamente através do browser.

Versão Linux: O texto foi feito originalmente em Linux, logo neste formato as animações funionam melhor e o ficheiro é mais leve, apesar de ser grande (18 Mb). Recomendo utilizar o Okular para leitura do pdf.

Descarregar a Versão Linux

Versão Windows: O ficheiro é muito mais pesado (80 Mb) e as animações têm pior qualidade. A leitura deve ser feita em Adobe Acrobat.

Descarregar a Versão Windows

Outros sistemas operativos: As animações não devem funcionar; podem utilizar qualquer versão acima (a versão Linux é mais leve). 

Módulos em Python

São disponibilizados como ficheiro como Jupyter Notebook (final ipynb).

JupCap01_FirstOrder_01.ipynb: Jupyter Notebook para resolução de equações diferenciais de primeira ordem na forma x'=f(x,t), com diversos valores da função f e uma condição inicial dada.

JupCap01_FirstOrderStability_01.ipynb: Jupyter Notebook para resolução de uma equação diferencial da forma x'=f(x,t) e diversas condições iniciais. Em particular, se a função f depender apenas de x, então este módulo produz uma interessante visualização da convergência das soluções para os pontos de equilíbrio, permitindo, em particular, estudar sua estabilidade.

JupCap02_FreeOscilator: Jupyter: Notebook para resolver a equação do oscilador harmónico livre amortecido (ou seja, uma equação diferencial linear homogénea com coeficientes constantes) para diversos parâmetros, em simultâneo, mas sempre com a mesma condição inicial.

JupCap02_ForcedDumpedOscilator_01.ipynb: Jupyter Novebook para resolver a equação do oscilador harmónico forçado (isto é, uma equação diferencial linear não homogénea com coeficientes constantes) para diversas condições iniciais em simultâneo.

JupCap02_Ressonance.ipynb: Jupyter Notebook para resolução em simultâneo de diversas equações do oscilador harmónico forçado com a mesma condição inicial, mas com diferentes termos de forma (isto é, termos não homogéneos).

JupCap05_SIR_ConstantTransmission.ipynb: Jupyter Notebook para resolução do sistema SIR para diversos parâmetros de transmissão e recuperação independentes do tempo e condição inicial fixa.

JupCap05_SIR_TimeDependent: Jupyter Notebook para resolução do sistema SIR com transmissão dependente do tempo.

JupCap05_SIRS: Jupyter Notebook para resolução do sistema SIRS.

JupCap05_LotkaVolterra: Jupyter Notebook para resolução do sistema de Lotka-Volterra (modelo da presa e do predador).

JupCap07_HeatEquation_DirichletBC.ipynb: Jupyter notebook para resolver a equação do calor (difusão) com condições de contorno do tipo Dirichlet. (As condições iniciais são decompostas em série de Fourier, tal como será explicado no capítulo 8.)

JupCap07_HeatEquation_NeumannBC.ipynb: Jupyter notebook para resolver a equação do calor (difusão) com condições de contorno do tipo Neumann. (As condições iniciais são decompostas em série de Fourier, tal como será explicado no capítulo 8.)

JupCap07_WaveEquation_DirichletBC_GeneralIC.ipynb: Jupyter notebook para resolver a equação de onda com condições de contorno do tipo Dirichlet. (As condições iniciais são decompostas em série de Fourier, tal como será explicado no capítulo 8.)

JupCap07_WaveEquation_NeumannBC_GeneralIC.ipynb: Jupyter notebook para resolver a equação de onda com condições de contorno do tipo Neumann. (As condições iniciais são decompostas em série de Fourier, tal como será explicado no capítulo 8.)

JupCap08_Fourier_series.ipynb: Jupyter notebook para calcular os coeficiente da série de Fourier de uma função 𝑓 definida em um intervalo finito simétrico. (As condições iniciais são decompostas em série de Fourier, tal como será explicado no capítulo 8.)

JupCap08_Laplace_Cilinder.ipynb: Jupyter notebook para resolver a equação de Laplace em coordenadas polares, com condição de contorno especificada em r=1.

JupCap09_Brachistochrone.ipynb: O objetivo deste notebook é comparar a o tempo necessário para uma partícula, sob efeito único da gravidade, descer entre dois pontos dados, seguindo uma trajetória dada pela braquistócrova com o tempo necessário seguindo uma curva dada pelo utilizador.

JupCap10_Radon_Transform.ipynb: Este notebook calcula a Transformada de Radon de uma imagem arbitrária, inicialmente disponível em diversos formatos.

Perguntas frequentes:

Não consigo ver as animações. O que pode ser feito? As animações não funcionam através do browser  e em algumas versões de Mac (não me pergunte porquê). É importante descarregar o livro, gravar localmente no computador e abrir utilizando um leitor de pdf (Linux: okular; Windows: Adobe acrobat reader). As animações não funcionam em dispositivos móveis. Se mesmo assim não for possível ver as simulações, então deve ler o texto sem as animações e executar no seu próprio computador os ficheiros que as originaram.

Estou com dificuldade em instalar o Python e/ou o Jupyter Notebook. Poderia me ajudar? Somente se for meu aluno regular, afinal não sou especialista nisto. Procure estas informações no google. Veja aqui ou aqui.

Encontrei um erro no texto, tenho uma sugestão ou um comentário que gostaria de fazer. Como posso me comunicar com o autor? Certamente há muitos erros, sobretudo nos exercícios. Envie um email. A cada semestre será publicada uma nova versão com os erros corrigidos (serão numeradas sucessivamentes, todas como "V1.xx").

Como foram feitas as figuras? Algumas são resultados de simulações numéricas em Python. Neste caso, a representação gráfica utiliza matplotlib. Outras (os desenhos) foram feitas em Tikz/PGF ou pgfplots, que são macros de LaTeX para representação gráfica vetorial.

Estou com dúvida num conceito ou não consigo resolver um exercício. Posso enviar um email com a dúvida? Pode, mas não espere resposta (exceto se for meu aluno regular, neste caso o email será respondido). 

Há previsão para publicação de mais material na página (material online, novos textos etc)? Não, mas é possível tanto para  novos materiais relativos ao mesmo conteúdo deste texto, como novos conteúdos. Visite a página periodicamente.

Versões mais antigas do livro texto

Pode haver alguma variação na numeração dos exercícios; estão aqui para compatibilidade com listas de exercícios mais antigas. A leitura recomendada é, sempre, a da última versão, que se encontra acima.

V1.1 (setembro de 2021): Linux - Windows

V1.0 (fevereiro de 2021): Linux - Windows