ESTRUTURAS
Ementa
Introdução à computação científica de forma simples e direta, utilizando a linguagem de programação Python. Programação de equações matemáticas. Automatização de tarefas repetitivas. Definições de funções e ramificações do fluxo do programa. Entrada de dados e manipulação de erros. Arranjos de dados e gráficos de curvas. Coleções de pares chave-valor e cadeias de caracteres. Introdução à programação orientada à objeto e classes. Programação de equações diferenciais.
Bibliografia
1 COELHO, F. Computação Cientı́fica com Python. [S.l.]: Lulu.com.
2 HILL, C. Learning Scientific Programming with Python. [S.l.]: Cambridge University Press, 2016. (Learning Scientific Programming with Python).
3 LANGTANGEN, H. A Primer on Scientific Programming with Python. [S.l.]: Springer Berlin Heidelberg, 2016. (Texts in Computational Science and Engineering).
4 MANZANO, J. Introdução à linguagem Python. [S.l.]: Novatec Editora, 2018.
5 MCCORMACK, D. Scientific Scripting with Python. [S.l.]: Lulu Enterprises Incorporated, 2009.
6 MENEZES, N. Introdução à programação com Python ? 3 a edição: Algoritmos e lógica de programação para iniciantes. [S.l.]: NOVATEC, 2019.
7 NAGAR, S. Introduction to Python for Engineers and Scientists: Open Source Solutions for Numerical Computation. [S.l.]: Apress, 2017.
8 NUNEZ-IGLESIAS, J.; WALT, S. van der; DASHNOW, H. Elegant SciPy: The Art of Scientific Python. [S.l.]: O?Reilly Media, 2017.
9 PINE, D. Introduction to Python for Science and Engineering. [S.l.]: CRC Press, 2018. (Series in Computational Physics).
10 REITZ, K.; SCHLUSSER, T. O Guia do Mochileiro Python: Melhores práticas para desenvolvimento. [S.l.]: Novatec Editora, 2019.
Formato de avaliação no período especial
Entrega dos trabalhos indicados a cada final de um tópico em específico valendo 5
Todos os trabalhos serão entregues como um arquivo em python, extensão .py, contendo todo o desenvolvimento necessário solicitado além de comentários explicativos sobre o código. Os comentários devem ser o suficiente para que quem nunca olhou para o código consiga compreender o que é e o que vai resultar.
As datas de entrega são fixadas para cada trabalho devendo ser enviados por e-mail para marco.argenta@ufpr.br até Às 23h59min do dia limite com o assunto “[PPGECC] Trabalho de introdução à computação científica”.
Qualquer não observância das regras aqui definidas para a entrega dos trabalhos acarretará na não consideração do trabalho entregue pelo aluno e, consequentemente, perda da nota do referido trabalho.
Formato da disciplina no período especial
A disciplina será composta de interações online de 1h de duração, todas as terças e quintas via microsoft Teams na qual o professor explicará de forma rápida e sanará dúvidas dos alunos referentes ao conteúdo do dia, portanto é fundamental que o aluno faça os tópicos indicados para a aula antes da interação online.
Cronograma de referência de estudos e interações online
O cronograma de estudos deve ser seguido pelo aluno antes das interações online e é de responsabilidade do mesmo estar preparado.
Todo o cronograma de estudos está referenciado ao material da disciplina disponibilizado pelo professor neste link: MATERIAL
Abaixo nosso cronograma de estudos e tarefas com as respectivas datas de entrega (é uma imagem, se estiver muito pequeno abra em nova janela/aba).
Os objetivos dessa disciplina são fazer uma introdução à computação científica, apresentar a linguagem de programação Python e algumas ferramentas úteis para alunos de pós-graduação, no desenvolvimento de suas pesquisas.
Porque Python?
Necessidades computacionais de um pesquisador
- Obter dados (simulações, controle de ensaios experimentais…)
- Manipular e processar os dados.
- Visualizar os resultados… para entender o que se está fazendo!
- Utilizar os resultados: produzir figuras para relatórios, artigos, dissertação, tese e para apresentações.
Especificações de uma linguagem para pesquisadores
- Rica coleção de bibliotecas já existentes correspondentes à métodos numéricos clássicos: não queremos reprogramar a plotagem de uma curva, uma solução de um sistema linear, uma transformada de Fourier ou um algoritmo de ajuste de uma curva. Não reinvente a roda!
- Fácil de aprender: ciência da computação não é nem nosso trabalho e nem nossa educação. Nos precisamos ser capazes de desenhar uma curva, suavizar um sinal ou inverter uma matriz esparsa em poucos minutos.
- O código dever ser legível como um livro, ou seja, a linguagem deve conter poucos símbolos de sintaxe ou rotinas desnecessárias, que podem redirecionar a atenção do leitor do entendimento matemático ou cietífico do código.
- Códigos eficientes devem executar rapidamente… é desnecessário dizer que um código muito rápido se torna inútil se foi gasto muito tempo para ser escrito. Portanto, precisamos de ambos, um rápido tempo de desenvolvimento, com produtividade elevada e um rápido tempo de execução.
- Um único ambiente ou linguagem para tudo que precisar ser desenvolvido computacionalmente, se possível, para evitar um novo aprendizado de um novo software a cada novo problema.
Soluções existentes
Quais soluções cientistas usam para trabalhar computacionalmente?
Linguagens compiladas: C, C++, Fortran, etc.
- Vantagens:
- Muito rápidas. Compiladores muito otimizados. Para cálculos computacionais pesados, é difícil superar essas linguagens.
- Alguns bibliotecas científicas muito otimizadas foram escritas para essas linguagens. Por exemplo: BLAS (operações vetoriais/matriciais).
- Inconvenientes:
- Utilização complicada: não existe interatividade durante o desenvolvimento, passos de compilação obrigatórios, sintaxe cheia de símbolos (&, ::, }}, ; etc.), gerenciamento de memória manual (clássico em C). Essas são linguagens muito difíceis para cientistas não programadores.
Linguagens de Script: Matlab
- Vantagens:
- Coleção muito rica de bibliotecas com numerosos algoritmos para várias aplicações diferentes. Execução rápida, pois essas bibliotecas são muitas vezes escritas em uma linguagem compilada.
- Ambiente de desenvolvimento agradável: ajuda compreensiva e bem organizada, editor integrada, etc.
- Suporte comercial disponível.
- Inconvenientes:
- A linguagem base é um pouco pobre e pode se tornar restritiva para usuários avançados.
- Não são de graça.
Outras linguagens de script: Scilab, Octave, Igor, R, IDL, etc.
- Vantagens:
- Open-source,gratuitas, ou pelo menos mais baratas que o Matlab.
- Algumas funcionalidades podem ser muito avançadas (estatística no R, figuras no Igor, etc.)
- Inconvenientes:
- Menor número de algoritmos disponíveis que no Matlab, e a linguagem n]ao é mais avançada.
- Alguns aplicativos são dedicados a funcionalidades específicas. Ex: Gnuplot or xmgrace para desenhar curvas. Esses programas são muito eficientes, mas restritos a um único uso, como plotagem.
E o Python?
- Vantagens:
- Biblioteca de computação científica muito rica (um pouco mais que o Matlab).
- Linguagem bem pensada, permitindo escrever códigos estruturados e bem legíveis: escreve-se no código o que se pensa.
- Muitas bibliotecas para outras tarefas do que computação científica (gerenciamento de servidor da web, acesso a portas seriais, etc.)
- Livre e open-source software, vastamente difundida, com uma comunidade fanática.
- Inconvenientes:
- Ambiente de desenvolvimento menos agradável que, por exemplo, o Matlab.
- Nem todos os algoritmos podem ser encontrados em ambientes de desenvolvimento mais especializados ou barras de ferramenta.
A base do python científico
Diferentemente do Matlab, Scilab ou R, o Python não vem com montes de módulos para computação científica. Abaixo está a lista das bibliotecas básicas que podem ser combinadas para se montar um ambiente para o desenvolvimento científico com python:
- Python, uma linguagem genérica e moderna (http://www.python.org/).
- Spyder3, um ambiente dinâmico e agradável pare desenvolver em Python (ttps://code.google.com/p/spyderlib/).
- Numpy : fornece poderosos objetos para matrizes numéricas e rotinas para os manipulá-los (http://www.numpy.org/).
- Scipy : rotinas de processamento de dados de alto nível. Otimização, regressão, interpolação, etc (http://www.scipy.org/).
- Matplotlib : Visualização 2-D, plotagens prontas para publicações (http://matplotlib.sourceforge.net/).
- Mayavi : Visualização em 3-D (http://code.enthought.com/projects/mayavi/).
Como instalar?
Sugerimos a utilização de sistemas linux ou mac OS X para a programação com a instalação de pacotes específicos via gerenciador de pacotes para linux e macports ou homebrew no mac OS X.
No windows sugere-se o uso do Anaconda (https://www.anaconda.com/products/individual), que também tem versão para linux e mac OS X.
Que versão usar do python?
O python 2.7 foi terminado em janeiro de 2020, mas isso não significa que não exista mais mas sim que não será mais fornecido suporte para ele.
O python 3 está ativo e sendo desenvolvido a cada dia.
Embora as aulas e muitos (mas muitos mesmo) pacotes de terceiros já prontos e pedaços de código para a resolução de específicos problemas (que podem ser encontrados em fóruns na web) estejam em python 2.7, sugere-se utiliza o python 3 em função do suporte e ser a versão ativa.
A material está passando por uma revisão para ser traduzido para python 3, porém ainda não está completo. Por ventura uma ou outra modificação de sintaxe necessárias no material serão indicadas pelo professor durante as interações online.
O que é esse menu lateral com o “Conteúdo da disciplina”?
Esse é um material focado diretamente para o estudo do python e sua sintaxe com introdução a 3 pacotes específicos que são o numpy, o matplotlib e o scipy. Deve ser utilizado como consulta a sintaxe do python.