Baixe o app para aproveitar ainda mais
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!
Compartilhar