Buscar

CalcNum06 Introdu+º+úo +á MatPlotLib

Prévia do material em texto

Básico de MatPlotLib 
Prof. Paulo R. G. Bordoni 
UFRJ 
“A criação de Adão” 
Afresco pintado no teto da Capela 
Sistina por Michelangelo 
Buonarroti, entorno de 1511. 
Vou começar pelo dito 
popular: 
“Uma imagem vale mais 
que mil palavras.” 
1637 
René Descartes - Francês 
Nasceu 31/03/1596 
Morreu 11/02/1650 
A formalização do método 
científico, um século e um 
quarto de depois... 
 Reducionismo: 
estudo do mundo como uma 
montagem de partes físicas que 
podem ser divididas e analisadas 
separadamente e recompostas. 
M.C. Escher, 
Relativity (1953), 
Litogravura 
Uma imagem vale muito mais 
que mil palavras ... 
Escher remontou tudo, 
harmonicamente, certamente, 
questionando o Reducionismo. 
Escher remontou tudo, 
harmonicamente, quem sabe 
para mostrar que 
“o todo pode ser maior que a 
soma das partes”. Holismo ... 
Douglas R. Hofstadter nos 
conduz por uma viagem 
maravilhosa sobre todas 
essas coisas ... 
Leia você também! 
M.C. Escher, 
Convex and Concave 
(1955), Litogravura 
Experimente olhar assim ↘, pelo canto 
esquerdo superior. 
Depois, olhe assim ↖, pela escada, lá no 
canto direito inferior! 
O que você vê 
depende do seu modo 
de olhar, do seu 
ponto de vista! 
Olhar o todo pode 
permitir detectar 
contradições. 
Comece olhando pelo balcão 
superior. Depois desça ao 
pátio pela corda. 
Em seguida, suba pela escada. 
Ilusão induzida 
pelo claro/escuro . 
http://www2.uol.com.br/vivermente/
multimidia/galeria_de_ilusoes.html 
Pois é, são armadilhas de percepção. 
Esta revista mostra algumas. Escher, 
desenhou muitas outras. 
Elas envolvem o famoso “tribar” de 
Sir Roger Penrose. 
M.C. Escher, 
 Waterfall (1961), Litogravura 
Descubram os tribar! 
E as torres: mesma 
altura mas quantos 
andares? 
M.C. Escher, 
Belvedere (1958), Litogravura 
Descubram os tribar. 
 O quê o homem 
sentado no banco 
segura? 
Este é o artista e genial que 
construiu as litogravuras que 
mostramos. 
Procure na internet para ver muito 
mais! 
Mauritius Cornelius Escher, 
holandês. 
Nasceu em 17/06/1898 
Morreu em 27/03/1972 
Nasceu em o8/o8/1932, 
na Inglaterra 
Sir, a consciência é mesmo 
o resultado de interações 
quânticas dentro dos 
neurônios? 
“Cogito, 
ergo sum” 
The Discourse on Method is best known as the 
source of the famous quotation "Je pense, 
donc je suis" ("I think, therefore I am"), which 
occurs in Part IV of the work. (The similar 
statement in Latin, Cogito ergo sum, is found in 
§7 of Principles of Philosophy.) 
Sigmund Freud 
Nasceu 06/05/1856 
Morreu 23/09/1939 
"The great question that has never been answered, 
and which I have not yet been able to answer, 
despite my thirty years of research into the feminine 
soul, is 'What does a woman want?'" 
From Sigmund Freud: Life and Work by Ernest Jones 
O criador da Psicanálise. 
Aprendi nesse divã que 
“sinto, logo sou” 
Mestre, Mestre ... 
Eu faço engenharia, não 
filosofia, nem história! 
É Surfista, este é meu tributo aos 
construtores de nossa civilização. 
Por falar nisso, aprendiz de engenheiro, 
traga na próxima aula além da história, uma 
explicação sobre a aerodinâmica das 
pranchas de surfe. 
Valendo nota! 
Ok, meu jovem. 
Vamos começar chamando o 
Spyder 
Através dele, vamos 
trabalhar com a 
MatPlotLib, a PyPlot e 
a PyLab. 
Ah, aquele que vimos 
na aula passada? 
É o IDE (ambiente de trabalho 
integrado), mais “easy to use” que já vi 
para a MatPlotLib, PyPlot e a PyLab. 
Vocês, mulheres, 
falam demais... 
Vamos começar logo! 
Eis o ambiente de 
desenvolvimento. 
Vamos seguir a 
sugestão! 
Após digitar ‘scientific’ 
recebemos as 
informações: 
Ihh Mestra! Agora tenho três 
perguntas: 
• Afinal, o que é Matplotlib? 
• E Pyplot? 
• E Pylab? 
Minha filha, você deve 
perguntar ao Manoel, não 
a mim e nem ao Mestre! 
Isto mesmo Manual, 
ajude-nos! 
Oh Lusitano, 
detalhe tudo! 
Eis a matplotlib, do início 
ao fim... 
Vamos à sua próxima 
pergunta! 
Esta é a 
descrição, da 
Pyplot, Loirinha! 
Agora veja a pylab 
A PyLab é tipo 
MatLab 
 
 
Tenho muita coisa a 
mostrar, é só rolar a janela 
da “Consola” para baixo! 
Manoel, quero 
programar! 
Sim Surfista, vamos 
começar pela função 
mais utilizada, a plot( ). 
Apenas, e tão somente, 
com o início do help da 
função plot( ) já dá para 
você começar, 
Surfista. 
Manoel, plotei um segmento com 
extremidades nos pontos 
A = (2.0, 1.4) e B = (3.4, 2.8). 
Lista das 
coordenadas x Lista das 
coordenadas y 
Fácil, fácil! 
Vou plotar 2 segmentos 
colados um no outro. 
Agora veja, Surfista, se 
eu utilizar ‘bo’, só 
aparecem os 3 pontos. 
Só estou vendo dois 
pontos Loirinha, você 
errou!!! 
Apressadinho, olhe 
com atenção! 
O ponto (2.0, 3.2) 
está no canto 
superior esquerdo. 
Jovens não briguem! 
 Basta clicar e 
arrastar! 
Repetindo: 
1. Cliquem na “cruz” e desloquem o mouse para a 
área gráfica (a branca); 
2. O ponteiro do mouse mudará de “pato” para 
“ganso”; 
3. Clicando como botão da esquerda do mouse, 
vocês arrastam o gráfico; 
4. Clicando como botão da esquerda do mouse, 
vocês “dão zoom” no gráfico. 
Construí o triângulo abaixo, com 
dois comandos plot( ) e mais alguns 
comandos de “embelezamento”. 
Vejam o código na próxima 
transparência. 
Este é o código. 
Mestre, explique tudo! 
Tudinho! 
O CPF resolve o problema de 
identificação dos José da Silva 
na hora do crediário. 
“Não sou esse de nome sujo” 
Como a MatPlotLib 
traça gráficos de 
funções? 
Ora, simplesmente ligamos os 
pontos 
𝑥0, 𝑦0 , 𝑥1, 𝑦1 ,⋯ , (𝑥𝑛, 𝑦𝑛), 
segmentos de reta, sendo 
𝑦𝑘 = 𝑓(𝑥𝑘). 
O nome técnico da matemática para 
isto é interpolação linear por partes! 
Interpolação é um tópico importante 
de nosso curso. 
Depois usamos a difusão para 
calcular os valores 𝑦𝑘 = 𝑓(𝑥𝑘), e 
passamos esse par de vetores para 
a função plot( ). 
Vejam na próxima transparência. 
Operacionalmente, escolhemos o 
domínio [𝑎, 𝑏] para construir o 
gráfico da função f e usamos a 
vetorização com a linspace( ) para 
gerar as coordenadas xk . 
Vejam, com o código 
acima geramos o gráfico 
da função 
x ↦ x2 
Ah, Coleguinha, é só 
colocar mais pontos no 
vetor x! 
Mestre, não gostei! 
Ficou muito ruim - cheio de 
quinas, não é nada parecido com 
uma parábola. 
Grande Surfista! 
Vou fazer com mais 
pontos e marcá-los. 
Usei os 21 pontos marcados em 
azul. 
Ao todo são 20 sub-intervalos 
de mesmo tamanho 
Δ = ( 2.0-(-2.0))/20 = 0.2. 
Mestre, realmente melhorou, 
mas faltam os eixos x e y, o 
título do gráfico, etc. 
Pois é Loirinha, 
temos diversas 
opções para 
marcadores e 
estilos de linhas. 
Temos também a 
possibilidade de 
escolher diversas cores. 
Aí está Loirinha, conforme 
você pediu. 
Veja o código na próxima 
transparência. 
Explico os detalhes desse 
código na aula. 
Observe que com muitos 
pontos, percebemos a curva 
suavemente. 
Aprendam como 
colocar o eixo-x: 
Eis como colocar a 
legenda: 
Mais informações sobre a 
legenda. 
Surfista e Loirinha, 
procurem vocês o resto das 
informações! 
Vou mostrar a regra 
trapezoidal para 
aproximar a integral 
definida. 
Lembrem-se, a área de um 
trapézio é dada por: 
𝐴𝑇𝑟𝑎𝑝 =
(𝑏𝑚𝑎𝑖𝑜𝑟+𝑏𝑚𝑒𝑛𝑜𝑟)∗ℎ
2
 . 
𝑏𝑚𝑎𝑖𝑜𝑟 
𝑏𝑚𝑒𝑛𝑜𝑟 
h 
a b 
f(a)f(b) 
Para uma função linear (cujo 
gráfico é uma reta), temos 
ATrap =
f a +f b ∗(b−a)
2
 . 
Naturalmente, 
 𝑓 𝑥 𝑑𝑥 = 𝐴𝑇𝑟𝑎𝑝
𝑏
𝑎
. 
b = xn+1 
f(x0) 
f(x1) 
f(xn) 
f(xn+1) 
xn a = x0 x1 x2 
T0 T1 
Tn-1 Tn 
Podemos aproximar a 𝑓 𝑥 𝑑𝑥
𝑏
𝑎
 somando as 
áreas dos trapézios, como na figura abaixo: 
 𝑓 𝑥 𝑑𝑥 ≅ 𝐴𝑇0
𝑏
𝑎
+ 𝐴𝑇1 +⋯+ 𝐴𝑇𝑛−1 + 𝐴𝑇𝑛 
Confiram, que fazendo a continha obtemos: 
 𝑓 𝑥 𝑑𝑥 ≅
ℎ
2
 𝑓 𝑥0 + 𝑓 𝑥𝑛+1 + 2 𝑓(𝑥𝑘)
𝑛
𝑘=1
 
𝑏
𝑎
 
onde ℎ = 𝑥𝑘+1 − 𝑥𝑘, para 𝑘 = 0, 1,⋯ , 𝑛. 
b = xn+1 
f(x0) 
f(x1) 
f(xn) 
f(xn+1) 
xn a = x0 x1 x2 
T0 T1 
Tn-1 Tn 
Farei um programa para calcular uma 
aproximação, via regra trapezoidal 
composta, para a integral definida 
de uma função usando a NumPy. 
Quero sua ajuda Manuel! 
A ajuda da NumPy sobre 
uma função 
para somar os elementos de 
um vetor, a função sum( ). 
Os detalhes da função 
sum( ). 
O retorno da função 
sum( ). 
Essa é a primeira parte do 
código do programa feito pela 
Mestra. 
Aqui ela calculou a 
aproximação para a integral. 
Essa é a segunda parte do 
programa da Mestra. 
É a parte do código que mostra 
um gráfico com a área 
correspondente à integral pintada 
de amarelo. 
Lembrem-se, para a > 0, 
 
1
𝑡
𝑑𝑡 = ln 𝑏 − ln (𝑎)
𝑏
𝑎
 
Executamos o programa para 
N = 100 e N = 200. 
Uma forma de conferir a precisão 
obtida, sem conhecer a expressão 
algébrica da integral. 
Mestra, vejo uma 
função trapz( ) no help! 
A ajuda da NumPy 
sobre a função 
trapz( ): 
Aproveitei o programa da Mestra 
para mostrar a utilização da função 
trap( ) da NumPy. 
Mudei também o integrando para 
𝑓 𝑡 = 𝑠𝑒𝑛(2𝜋𝑡) 
Agora só mudei os 
limites de integração. 
Usando a fill_between( ) 
para delimitar a área 
entre duas funções f(t) 
e g(t) 
Usando a fill_between( ) 
para delimitar a área 
entre a f(t) - g(t) e o 
eixo-x. 
Tchau, até a 
próxima aula!

Continue navegando