fpc2024 Notes
fpc2024 Notes
Notas de Aula
SME0332
Roberto F. Ausas
Este documento está organizado por capítulos, cada um dos quais apresenta conceitos e ferramentas
essenciais para desenvolver programas de computador na linguagem python. Os problemas e exemplos
que serão desenvolvidos terão uma ênfase nas aplicações em física e bioinformática. Em cada capítulo serão
apresentados problemas e atividades que o aluno precisará desenvolver, com as quais, este será avaliado ao
longo do curso.
RFA
Contents
Prefacio ii
Contents iii
Alphabetical Index 20
UM PRIMEIRO CONTATO À
PROGRAMAÇÃO EM python 1
1.1 Preludio . . . . . . . . . . . 1
1.1 Preludio
1.2 Noções iniciais de python 2
1.3 Lista 1: Rudimentos bási-
A principal ideia por trás de aprender uma linguagem de programação
cos de programação . . . . 6
é a de automatizar certos cálculos que surgem em física ou engenharia,
que não poderiam ser resolvidos manualmente, sem o auxilio de um
computador.
Nas primeiras aulas precisamos introduzir alguns conceitos básicos de
programação (que se aplicam a qualquer linguagem) e posteriormente
precisamos introduzir a sintaxe específica da linguagem que vamos
utilizar ao longo do curso, que é a linguagem python.
De maneira muito geral, as linguagens de programação, podem ser
divididas em duas categorias:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i, N = 10;
double *array;
array=(double *) malloc(N*sizeof(double));
for(i=0; i < N; i++) {
array[i] = (double) i;
printf("%lf\n", array[i]);
}
free(array);
return 0;
}
import numpy as np
N = 10
array = np.arange(N)
print(array)
Números
Strings
Listas
Diccionarios
Então,
mydic{"minhauni"} é "USP"
mydic{"lista"}[2] é 1 + 1j
.
.
else:
.
.
ou em situações com mais de duas opções para decidir:
if (Expressão lógica 1):
1 UM PRIMEIRO CONTATO À PROGRAMAÇÃO EM python 4
.
.
elif (Expressão lógica 2):
.
.
else:
.
.
Notar os : no final das sentencias e a indentação dentro de cada bloco.
Advertência
A indentação é fundamental em python. Se esta não for respeitada o
interpretador não saberá quais instruções ficam dentro da estrutura e
por tanto o programa poderá ter comportamentos não esperados ou
em alguns casos parar a execução .
.
.
A segunda estrutura de repetição que iremos usar as vezes é o while (o
"enquanto" em portugués):
while (Expressão lógica):
.
.
Com elas podemos fazer qualquer tipo de cálculo em que precisamos
iterar sobre os elementos de algum objeto ou repetir uma operação várias
vezes.
1 UM PRIMEIRO CONTATO À PROGRAMAÇÃO EM python 5
1.2.4 Funções
.
.
return var1, var2, ...
Esta é uma das bibliotecas que mais serão usadas ao longo do curso.
Basicamente permite definir vetores, matrizes e tensores em geral, popu-
lados com números ou dados de um tipo homegêneo (i.e., todos números
inteiros, ou todos números de ponto flutuante, etc.). Esta biblioteca é
fundamental para poder realizar cálculos científicos com uma eficiencia
razoável, possivelmente similar à da uma linguagem compilada. Alguns
exemplos de uso na sequência:
import numpy as np
Aviso importante
𝑁
1 X
𝑥¯ = 𝑥𝑖
𝑁 𝑖=1
a · b = k a k k b k cos 𝜃
c = 𝛼a + 𝛽b
A𝑚 = A . . . A
| {z }
𝑚 vezes
𝑥 𝑛 = 𝑎 𝑥 𝑛−1 (1 − 𝑥 𝑛−1 ), 𝑛 = 1, 2, . . . , 𝑁
𝑁 𝑁
1 X 1 X
𝑥¯ = 𝑥𝑖 , 𝜎 = (𝑥 𝑖 − 𝑥)
¯2
𝑁 𝑖=0 𝑁 − 1 𝑖=0
da vida:
I Uma grade com 100 × 100 células e condições iniciais
randômicas. que dependam de dois parâmetros 𝑝 0 e 𝑝 1
sendo as probabilidades de iniciar morta ou viva, respeti-
vamente. Testar diferentes valores;
I Uma grade menor e condições iniciais como as descritas no
https://en.wikipedia.org/wiki/Conway%27s_Game_of_
Life, de forma a reproduzir alguns padrões clássicos con-
hecidos como Still lifes, Oscillators e Spaceshifts.
O programa dever estar estruturado da seguinte forma:
# Grid size
N = 100
fig, ax = plt.subplots()
img = ax.imshow(grid, interpolation=’nearest’)
ani = animation.FuncAnimation(fig, update, fargs=(img,
grid,))
plt.show()
Explicar que o que cada parte do código faz.
VARIAVEIS E CAMINHADAS
ALEATÓRIAS, CÁLCULOS
MONTE CARLO 2
2.1 Preludio . . . . . . . . . . . . 10
2.1 Preludio
2.2 Cálculo de integrais por
métodos Monte Carlo . . . . 11
Neste capítulo iremos desenvolver alguns cálculos que envolvem variáveis
2.3 Caminhadas aleatórias . . . 13
aleatórias. Em alguns casos, a abordagem determinística não é a mais
apropriada, por diversos motivos: por exemplo, quando existe incerteza
em certas variáveis ou quando a complexidade do problema é tão
grande que não conseguimos barrer de maneira exaustiva todos os
possíveis valores e combinações que as variaveis envolvidas podem
assumir. Nesses casos, a abordagem estocástica torna-se mais conveniente.
Vamos apresentar alguns exemplos de cálculos estocásticos e desenvolver
códigos em python para realizá-los, incluindo, caminhadas aleatórias e
cálculo de integrais por métodos Monte Carlo.
Para começar, vamos considerar um exemplo que já foi introduzido:
Exemplo/Exercício 1
Cálculo do número 𝜋
Prob = Nc / N
print(’The estimate for pi is:’, 4*Prob)
I Plotar as funções.
I Usando uma tabela de integrais ou algum programa para
cálculo simbólico (p.e., Mathematica) calcular a área entre as
duas curvas.
I Calcular com um método Monte Carlo a área entre as duas
2 VARIAVEIS E CAMINHADAS ALEATÓRIAS, CÁLCULOS MONTE CARLO 13
𝑑𝑚
2
(𝑡) = h(R(𝑡) − R(0)) · (R(𝑡) − R(0))i
Exercício 8 (opcional)
𝑎0 = 0
𝑎1 = 1
𝑎𝑘 = 𝑎 𝑘−1 + 𝑎 𝑘−2 , 𝑘 = 2 , 3 , . . .
𝑥 𝑛 = 𝑎 𝑥 𝑛−1 (1 − 𝑥 𝑛−1 ), 𝑛 = 1, 2, . . . , 𝑁
𝑥 𝑘+1 = 𝜑(𝑥 𝑘 )
lim 𝑥 𝑘 = 𝑥¯
𝑘→∞
3 PROCESSOS ITERATIVOS E RELAXAÇÕES 16
3𝑥 − 𝑦 = 2
−2 𝑥 + 4 𝑦 = 1
1
𝑥 𝑘+1 = (2 + 𝑦 𝑘 )
3
1
𝑦 𝑘+1 = (1 + 2 𝑥 𝑘 )
4
Como pode-se ver, a ideia é que em cada equação se atualiza o
valor de uma das incógnitas com os valores das outras incógnitas
na iteração anterior. O processo iterativo deve ser executado
até que os valores de 𝑥 𝑘 e 𝑦 𝑘 estão suficientemente próximo
da solução do sistema, i.e., para 𝑘 suficientemente grande, se
denotarmos por ( 𝑥,
¯ 𝑦)
¯ a solução do sistema:
| 𝑥¯ − 𝑥 𝑘 | < 𝜀, | 𝑦¯ − 𝑦 𝑘 | < 𝜀
𝑓 (𝑥 𝑘 )
𝑥 𝑘+1 = 𝑥 𝑘 −
𝑓 0(𝑥 𝑘 )
Exercícios
1. Implementar em python el ejemplo (a) da sequência de Fi-
3 PROCESSOS ITERATIVOS E RELAXAÇÕES 17
3 −1 −1 𝑥 1
−1 3 −1 𝑦 = 2
Figure 3.1: Exemplo de iteração de ponto
−1 −1 3 𝑧 3 fixo.
5. Opcional Programar o método de Jacobi para um sistema geral
de equações em que a matriz 𝐴 ∈ ℝ 𝑛×𝑛 e o vetor de lado direito
b ∈ ℝ 𝑛 são dados, i.e.,
𝐴 = . , 𝑏 = .
. .
𝑎𝑛1 𝑎𝑛2 ... 𝑎 𝑛𝑛 𝑏 𝑛
Notar que neste sistema não conhecemos facilmente a solução,
justamente, a ideia do método proposto é achar ela, por tanto
não podemos avaliar a grandeza | 𝑥¯ 𝑖 − 𝑥 𝑘𝑖 | , onde o supraíndice
refere-se à 𝑖 -éssima incógnita e o subíndice à 𝑘 -éssima iteração.
Então, nesse caso como podemos saber em que momento parar
o processo iterativo? Pense alguma alternativa.
6. Implementar em python o processo iterativo de Newton do
exemplo (e), para encontrar as duas raizes no intervalo [0,2] da
função:
2
𝑓 (𝑥) = 𝑥 𝑒 −𝑥 − 0.1
Primeiro plotar a função no intervalo [-1,2]. Baseado no gráfico
da função escolher pontos iniciais 𝑥 0 que estejam próximos
das raizes procuradas. Escolher um erro 𝜀 pequeno e determi-
nar quantas iterações são necessárias para a convergência do
método.
7. Implementar o método das potencias do exemplo (f) na matriz
1 0 0
𝐴 = 0 2 0
0 0 3
e na matriz
𝐴 = diag(𝑎1 , 𝑎2 , . . . , 𝑎 𝑛 )
3 PROCESSOS ITERATIVOS E RELAXAÇÕES 18
preface, ii