Introdução a Computação Científica
Material desenvolvido e publicado pelo prof. Dr. Marco André Argenta.
Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-NãoComercial-CompartilhaIgual 4.0 Internacional.
Este material é um compilado das notas de aula do professor Doutor Marco André Argenta da disciplina de Introdução à Computação Científica ministrada no Programa de Pós-graduação em Engenharia de Construção Civil.
Somos engenheiros, matemáticos, físicos e não programadores profissionais. Nosso objetivo é utilizar o computador para resolver um problema o mais rápido possível. Não podemos nos dar ao luxo de utilizar uma linguagem de programação com sintaxe muito suja ou com compiladores muito técnicos.
Por isso a ideia de usar python. A sintaxe é simples, a programação é rápida o que leva a uma boa produtividade, porém a solução é lenta. O python por ser uma linguagem de programação de altíssimo nível e interpretada, ou seja, precisa de um interpretador para o código funcionar, se torna lenta se comparada com outras linguagens compiladas.
Mas, pensamos o seguinte, em uma linguagem compilada você, que não é um programador profissional, leva muito tempo para aprender, depois outro tanto para programar e mais um tanto para retirar os erros do código para enfim rodar em 15 segundos. Em python, você aprender muito fácil, programa rápido, acha os erros facilmente, pois a sintaxe não é suja, e certo, leva 1 hora para rodar, mas, quem será que sai ganhando?
Na disciplina, utilizamos o python e o ambiente de desenvolvimento spyder fornecidos pela continuum em um grande pacote chamado Anaconda (disponível no site oficial).
Sugerimos absurdamente o uso do python na versão 2.7x, pelos vastos pacotes de terceiros disponíveis e acredite, você vai precisar de um deles.
Na sequência, o conteúdo dessas notas de aula.
Estratégia de aprendizado
A melhor estratégia para aprender a programar é se baseando e entendendo exemplos.
Por isso, no curso, nós vamos:
- Apresentar um problema;
- Apresentar o programa completo;
- Dissecar e discutir cada linha do programa;
- Simular programas na mão (ser o computador!).
Programando equações
Se você está em dúvida de como fazer isso, sente e faça!
Os primeiros exemplos envolvem programas para resolver equações matemáticas. Vamos aprender como escrever e rodar um programa em Python, como trabalhar com as variáveis, como computar funções matemáticas como $e^x$ e $sen(x)$, e como usar o Python para cálculos interativos.
Conteúdo do tópico:
- Por que programar? Inicie aqui!
- Programas deve ser precisos!
- Variáveis são nomes de objetos.
- Tipos de objetos
int
,float
,str
. - Escolha nomes de variáveis próximos aos símbolos matemáticos do problema sendo resolvido
- Operações aritméticas em Python: termo a termo (+/-) da esquerda para a direita, potências antes * e /, como na matemática! Use parênteses se ficar na dúvida
- Cuidado com divisões por inteiros!
- Use o
printf
para controlar melhor as saídas
Termos importantes
objeto, variáveis, algoritmos, declarações, atribuições, implementação, verificação, depuração.
Laços e listas
Vai repetir a declaração? Laço nela...
Como tarefas repetitivas em um programa podem ser automatizadas com o uso de laços. Também serão introduzidos os objetos listas para o armazenamento e processamento de coleções de dados com ordem específica. Laços e listas junto com o tópico anterior, consistem na base fundamental para o resto do curso.
Conteúdo do tópico:
- Precisa repetir uma declaração? Armazenar dados? Inicie aqui!
- Laços
while
e laçosfor
. - Listas e tuplas.
- Precisa de mais informação técnica sobre esse assunto em Python: veja
docs.python.org
. - Exemplo: o que eu posso encontrar no módulo
math
?
Vá até o índice da Python Library Reference, clique index no canto superior direito.
Clique em M.
Procure por math (module), e clique.
Funções e Ramificações
Se sim, faça isso, se não, faça aquilo.
Introduzindo dois conceitos fundamentais e extremamente úteis na
programação: funções definidas pelo programador e ramificação do fluxo
do programa, o último também conhecido como testes if
.
Conteúdo do tópico:
- Se sim, faça isso, se não, faça aquilo. Inicie aqui!
- Testes
if
. - Funções definidas pelo usuário.
- Argumentos de posição e argumentos palavras-chave.
Entrada do usuário e manipulação de erros
Deixe para depois... faça agora genérico!
Dados de entrada pode ser definidos diretamente no programa, ou seja,
especificar explicitamente os valores de variáveis: A = 0.1
ou
w = 1
, o que pode ser adequado para pequenos programas ou programas
específicos. No geral, é considerado uma boa prática deixar que o
usuário forneça os dados de entrada quando o programa está rodando,
sendo desnecessário modificar o programa propriamente dito para um novo
conjunto de dados.
Conteúdo do tópico:
- Como programadores profissionais pegam suas entradas de dados? Inicie aqui!
- Entrada de dados por perguntas e respostas.
- Entrada de dados por linha de comando.
- Avaliando expressões de texto com o
eval
. - Executando textos em Python usando o
exec
. - Manipulando exceções.
- Levantando as exceções.
- Lendo e escrevendo em arquivos.
Arranjos e gráficos de curvas
São muitos os dados: use arranjos e faça um gráfico para melhor visualizar!
Um objeto lista é útil para o armazenamento de dados, como uma sequência de objetos ou uma tabela de objetos. Um arranjo (no inglês array) é similar a uma lista, mas menos flexível e muito mais eficiente computacionalmente. Quando usa-se um computador para a execução de operações matemáticas usualmente termina-se com um monte de números e operações matemáticas associadas. Armazenar números em uma lista em tal contexto pode levar a programas lentos, enquanto com \"arrays\" pode-se ter um programa mais rápido. Isso se torna crucial quando aplicações avançadas demandam horas, dias, inclusive semanas para terminar de processar um programa. Qualquer ideia inteligente que reduza o tempo de execução é primordial.
Conteúdo do tópico:
- Arranjos e gráficos! Inicie aqui!
- Computação com arranjos: aplica-se operações matemáticas à quaisquer elementos (sem laços).
- Ex.:
sin(x**4)*exp(-x**2)
,x
pode ser arranjo ou escalar\ para o arranjo, oi
-ésimo elemento se tornasin(x[i]**4)*exp(-x[i]**2)
. - Vetorização: fazer com que cálculos matemáticos se tornem válidos para arranjos.
- Expressões matemáticas puras não necessitam vetorizações extras.
- Equações matemáticas envolvendo testes
if
necessitam de vetorizações extras. - Gráficos de curvas: linhas retas são traçadas entre cada ponto de dados.
- Animações: faça uma cópia de cada quadro do gráfico e gere uma sequência sobre eles para produzir um filme.
Dicionários e cadeias de caracteres
Salve seus dados.
Arquivos são utilizados para armazenamento permanente de informações em um computador. De experiências anteriores com o computador você já utilizou alguma forma de salvar informações em um arquivo para posteriormente acessá-la novamente abrindo o arquivo. Como fazer o python escrever, ler e interpretar os dados novamente é o que vamos ver nessa seção.
Conteúdo do tópico:
- Quer salvar os dados: Inicie aqui!
- Aprender a como ler um arquivo.
- Guardar dados em arquivos usando um novo tipo de objeto: dicionários
- Interpretar o conteúdo de arquivos usando a manipulação das cadeias de caracteres.
Introdução a Classes
Dividir para conquistar.
Uma classe empacota um conjunto de dados (variáveis) com um conjunto de funções que operam sobre esses dados. O objetivo é alcançar um código mais modular através do agrupamento de dados e funções em unidades gerenciáveis (normalmente pequenas). A maioria dos cálculos matemáticos podem ser programados facilmente sem o uso de classes, mas em vários problemas, classes tornam as soluções mais elegantes e/ou deixam o código mais fácil de ser estendido a um novo estágio. No mundo não matemático, existem conceitos e algoritmos a eles associados que ajudam a estruturar a solução de um problema. Classes podem ajudar no entendimento do problema e contribuir para simplificar a modelagem dos dados e as ações em programas.
Conteúdo do tópico:
- Definindo uma classe. Inicie aqui!
- Usando uma classe.
- Métodos especiais.
- Com os métodos especiais podemos criar novos objetos matemáticos como vetores, polinomiais e números complexos e escrever aritmética.
- A chamada de um método especial é bem útil.
- Funções com parâmetros devem ser representadas por uma classe com os parâmetros como atributos e com um método de chamada especial para a avaliação da função.
Programação orientada a objeto
O filho do pai do dono do cachorro ao lado do vizinho do amigo tem um peixe azul.
Aqui vamos introduzir as ideias básicas da programação orientada a objeto. Diferentes pessoas relacionam diferentes significados ao termo programação orientada a objeto: algumas usam o termo para programação com objetos em geral, enquanto outras para programação com hierarquia de classes. Nós vamos com o segundo grupo, pois é um termo largamente aceito em ciência da computação. Os primeiros poderiam utilizar de forma mais correta o termo programação baseada em objetos. Como tudo em Python é um objeto, nós fazemos programação orientada a objeto o tempo todo.
Conteúdo do tópico:
- Um novo conceito, hierarquia. Inicie aqui!
- Uma subclasse herda tudo da super classe.
- Quando usar uma subclasse ou super classe?
- O fluxo do programa pula entre super e sub classes.
- Leva tempo para dominar quando e como usar orientação a objetos.
- Estude exemplos!
Números aleatórios e jogos simples
Em breve...
Sequências e relações de recorrência
Em breve...
Programação de equações diferenciais
Implemente uma vez, aplique em qualquer lugar.
Vamos analisar equações diferenciais ordinárias (ODEs) de um ponto de vista mais abstrato que nos permitirá formular métodos numéricos e criar aplicativos mais gerais aplicáveis à vários problemas que envolvem equações diferenciais na matemática, física, biologia e finanças.
Conteúdo do tópico:
Em breve...
- Exemplos de equações diferenciais ordinárias.
- Aproximações da solução
- O quanto é preciso?
- Como resolver qualquer EDO.
Gráficos tridimensionais
Em breve...
Programação em paralelo
Em breve...
Interfaces gráficas de usuário (GUI)
Em breve...
Migrando Python para código compilado
Em breve...
1: Ver Aulas de python básico se você sentir dificuldade com o conteúdo destas aulas. O conteúdo é baseado em diversas publicações, dentre elas uma em especial o livro A Primer on Scientific Programming with Python, de Hans Petter Langtangen.