• Nenhum resultado encontrado

Me todos Computacionais em Fı sica I

N/A
N/A
Protected

Academic year: 2021

Share "Me todos Computacionais em Fı sica I"

Copied!
84
0
0

Texto

(1)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

M ´etodos Computacionais em F´ısica I

Sandra Amato

Instituto de F´ısica

Universidade Federal do Rio de Janeiro

(2)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Matplotlib

Ü Gr ´aficos e animac¸ ˜oes s ˜ao ferramentas extremamente ´uteis

Ü Existem v ´arios pacotes de visualizac¸ ˜ao para o Python

Ü Usaremos neste curso o pacote mais b ´asico - Matplotlib

Ü Detalhes podem ser encontradosaqui (site oficial) Ü e nesselink: Problem Solving with Python (mais did ´atico)

Ü Criado pelo neurologista John D. Hunter no in´ıcio dos anos 2000.

(3)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Gr ´aficos

Ü Suponha que queiramos fazer o gr ´afico da func¸ ˜ao f (x ) no intervalo a ≤ x ≤ b

Ü Os passos computacionais s ˜ao:

m criar uma lista (numpy.array) com os n valores de xi, em geral, igualmente espac¸ados de δx

xi =a + iδx , com δx = b − a n − 1 m calculamos os valores de yi =f (xi)para cada ponto i m colocamos esses pontos em um gr ´afico e ligamos os pontos

Ü J ´a trabalhamos com a classe array do pacote num ´erico NumPy

Ü V ´arias func¸ ˜oes do matplotlib utilizam func¸ ˜oes da NumPy

(4)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Gr ´aficos no Matplotlib

ÜEx: Gr ´afico da func¸ ˜ao y = sin(x ) para x entre 0 e 4π espac¸ados de 0.1: plotSin0.py >>> import numpy as np >>> import matplotlib.pyplot as plt >>> #np.arange(start,stop,step) >>> x = np.arange(0, 4 * np.pi, 0.1) >>> y = np.sin(x) >>> plt.plot(x, y) >>> plt.show()

(5)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Embelezando

(6)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

(7)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Embelezando

plotSin1.py import numpy as np import matplotlib.pyplot as plt #np.arange(start,stop,step) x = np.arange(0, 4 * np.pi, 0.1) y = np.sin(x)

plt.plot(x, y, ’ro’) # r de red; o ´e um c´ırculo plt.xlabel(’angulo (0 a 4 pi)’)

plt.ylabel(’seno(x)’)

plt.title(’Grafico de seno(x)’)

plt.axhline(color=’gray’, y=0, zorder=-1) #y=0 ´e o default, pode ser omitido

# tire o parametro zorder=-1 e veja o que acontece

plt.savefig(’seno1.png’) # deve vir antes de plt.show() plt.show()

(8)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Propriedades de Linhas

Argumentos que podem ser passados juntamente com a func¸ ˜ao plot

para controlar propriedades de linhas

Propriedade

Valores

alpha

transpar ˆencia (0–1)

color

Cor: b,g,r,c,m,y,k,w

label

legenda

linestyle

: .

-linewidth

Espessura da linha (pontos)

marker

+

o . s v x > <

markeredgewidth

Espessura da margem do s´ımbolo

markeredgecolor

Cor da margem do s´ımbolo

markerfacecolor

Cor do s´ımbolo

markersize

Tamanho do s´ımbolo (pontos)

(9)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional) plotSin.py

x = np.arange(0, 4 * np.pi, 0.1) y = np.sin(x)

plt.plot(x, y, linewidth=2.0, linestyle=’--’,

color=’r’, marker=’o’, markersize=5, markeredgecolor=’b’, markerfacecolor=’g’, alpha=0.5) plt.xlabel(’angulo (0 a 4 pi)’) plt.ylabel(’seno(x)’) plt.title(’Grafico de seno(x)’) plt.grid(True) plt.xticks(

np.arange(0, 4*np.pi + np.pi/2, np.pi/2), [’0’,’pi/2’,’pi’,’3pi/2’,’2pi’,’5pi/2’, ’3pi’,’7pi/2’,’4pi’])

plt.yticks()

plt.savefig(’seno.png’) # deve vir antes de plt.show() plt.show()

(10)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Ex. de Duas Curvas no mesmo gr ´afico e aproveitando pra definir a func¸ ˜ao com def import numpy as np import matplotlib.pyplot as plt def f1(t): return t**2*np.exp(-t**2) def f2(t): return t**2*f1(t) t = np.linspace(0, 3, 51) y1 = f1(t) y2 = f2(t) plt.plot(t, y1, ’r-’) plt.plot(t, y2, ’bo’) plt.xlabel(’t [s]’) plt.ylabel(’y [m]’) plt.legend([’tˆ2*exp(-tˆ2)’,\ ’tˆ4*exp(-tˆ2)’]) plt.title(’Duas curvas’) plt.savefig(’duasCurvas.pdf’) plt.show() 0.0 0.5 1.0 1.5 2.0 2.5 3.0 t [s] 0.0 0.1 0.2 0.3 0.4 0.5 y [m] Duas curvas t^2*exp(-t^2) t^4*exp(-t^2)

(11)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Gr ´afico de pontos com incertezas

Crie o arquivo plotPontos.py com os seguintes comandos import matplotlib.pyplot as plt

x = [0, 2, 4, 6] y = [1, 3, 4, 8]

plt.errorbar(x, y, yerr=0.2) #... e com incertezas plt.xlabel(’x’)

plt.ylabel(’y’)

plt.title(’Grafico com barra de erro’)

plt.legend([’resultado 1’],loc=0) #melhor local plt.show()

(12)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Propriedades de Texto

Argumentos opcionais dos comandos de texto

Propriedade

Valores

alpha

transpar ˆencia (0–1)

color

Cor: b,g,r,c,m,y,k,w

fontangle

italic, normal, oblique

fontname

Nome da fonte

fontsize

Tamanho da fonte

fontweight

normal, bold, light4

horizontalalingnment

left, center, right

verticalalingnment

bottom, center, top

rotation

horizontal, vertical

(13)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Incompatibilidade entre fontes no Windows

Pode haver uma incompatibilidade entre a biblioteca matplotlib e o

sistema operacional Windows ao salvar as imagens em .pdf, pois a

fonte de texto original da biblioteca n ˜ao vem instalada por padr ˜ao no

Windows. Para contornar isso, basta mudarmos a fonte de texto a ser

utilizada. Escreva essas duas linhas de comando antes de comec¸ar a

montar seu plot:

plt.rcParams[’pdf.fonttype’] = 42

(14)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Embelezando

import matplotlib.pyplot as plt x = [0, 2, 4, 6] y = [1, 3, 4, 8] plt.xlim(left=-1,right=8)

plt.errorbar(x, y, yerr=0.2, fmt=’o’) plt.xlabel(’x’,fontsize=20)

plt.ylabel(’Voltagem [$\mu$V]’, color=’r’) plt.title(’Grafico com barra de erro’)

plt.text(5,2,’$\sum_iˆ\infty x_i$’,fontsize=20) plt.legend([’resultado 1’],loc=’upper left’)

plt.savefig(’pontos.pdf’) plt.show()

Para ver as possibilidades: >>> help(plt.plot) >>> help(plt.legend) 1 0 1 2 3 4 5 6 7 8 x 1 2 3 4 5 6 7 8 Vo lta ge m [ V] ixi

Grafico com barra de erro

resultado 1

(15)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

S ´erie de Taylor

Ü S ´erie de Taylor ´e uma das ferramentas matem ´aticas mais importantes em m ´etodos num ´ericos e computac¸ ˜ao cient´ıfica

Ü Ela ´e usada para desenvolver os m ´etodos que veremos neste curso m M ´etodo de Newton para encontrar a raiz de uma func¸ ˜ao m M ´etodo dos Trap ´ezios e de Simpson para calcular integrais m M ´etodos de Euler e Runge-Kutta pra EDO

Ü e nos permite uma an ´alise da acur ´acia que o m ´etodo prov ˆe

Ü Suponha conhecido o valor da func¸ ˜ao f em um ponto x0e queremos saber o valor de f em ponto pr ´oximo x = x0+h, com h sendo bem pequeno. Suponha que saibamos tamb ´em a derivada de f no mesmo ponto x0. Uma primeira aproximac¸ ˜ao pode ser escrita como:

f0(x0) ≈

f (x0+h)− f (x0)

h ⇒ f (x0+h) ≈ f (x0) +h f 0(x

(16)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

S ´eries de Taylor

Se uma func¸ ˜ao f (x ) ´e diferenci ´avel n vezes no intervalo (a, b) : podemos escrev ˆe-la como: aS ´erie de Taylor:

f (x ) = f (x0) +f1(x0)(x − x0) +2!1f 2 (x0)(x − x0)2+ · · · +n!1f n (x0)(x − x0)n+ . . . f (x ) = ∞ X n=0 1 n! dnf dxn(x0)(x − x0) n fn(x

0) ´e sua n- ´esima derivada calculada no ponto x0∈ (a, b)

A contribuic¸ ˜ao relativa de cada termo cai com n (∝ 1/n!)

Se truncarmos a s ´erie no termo de ordem n, a soma ser ´a uma aproximac¸ ˜ao Quanto maior o n, melhor a aproximac¸ ˜ao

A soma dos termosdesprezadosser ´a dominada pelo termo de ordem n + 1 Ao truncar a s ´erie de Taylor no termo de ordemnteremos umerrona aproximac¸ ˜ao proporcional ao pr ´oximo termo, ou seja,δf = O(x − x0)(n+1),

o erro depende de h = x − x0e do n ´umero de termos n

(17)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

S ´eries de Taylor - Exemplos

f (x ) = f (x0)+f1(x0)(x −x0)+2!1f2(x0)(x −x0)2+· · ·+n!1fn(x0)(x −x0)n+. . . f (x ) = ex, em torno de x0=0: f1(x ) = ex → f1(0) = 1, f2(x ) = ex → f2(0) = 1, . . . ex =1 + x +12x2+3!1x3+ · · · + n!1xn+ . . . n = 1, 2, 3, . . . f (x ) = sin(x ), em torno de x0=0: f1(x ) = cos(x ) → f1(0) = 1, f2(x ) = − sin(x ) → f2(0) = 0, f3(x ) = −cos(x ) → f3(0) = −1, f4(x ) = sin(x ) → f4(0) = 0, . . . sin(x ) = x − 3!1x3+5!1x5− 1 7!x 7. . . sin(x ) = ∞ X i=0 (−1)n(x − x0) 2n+1 (2n + 1)!

(18)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

S ´erie de Taylor de e

x

ÜUm programa extremamente simples e n ˜ao muito funcional para calcular alguns poucos termos da s ´erie de Taylor da func¸ ˜ao exponencial poderia ser (exp taylor simples.py)

from math import exp

h = float(input(’Digite o valor de (h)\n’)) print (’exp(%f) = %f’ %(h, exp(h)))

soma = 1. ordem = 0

print (’ordem=%d, serie=%g, erro=%g’ %(ordem,soma,exp(h)-soma)) ordem = 1

soma += h

print (’ordem=%d, serie=%g, erro=%g’ %(ordem,soma,exp(h)-soma)) ordem = 2

soma += (1/2.0)*h**2

print (’ordem=%d, serie=%g, erro=%g’ %(ordem,soma,exp(h)-soma)) ordem = 3

soma += (1/6.0)*h**3

print (’ordem=%d, serie=%g, erro=%g’ %(ordem,soma,exp(h)-soma)) ordem = 4

soma += (1/24.0)*h**4

(19)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

S ´erie de Taylor de e

x $ python3 exp_taylor_simples.py Digite o valor de (h) .2 exp(0.200000) = 1.221403

ordem=0, serie = 1, erro = 0.221403 ordem=1, serie = 1.2, erro = 0.0214028 ordem=2, serie = 1.22, erro = 0.00140276 ordem=3, serie = 1.22133, erro = 6.94248e-05 ordem=4, serie = 1.2214, erro = 2.75816e-06

$ python3 exp_taylor_simples.py Digite o valor de (h)

3

exp(3.000000) = 20.085537

ordem=0, serie = 1, erro = 19.0855 ordem=1, serie = 4, erro = 16.0855 ordem=2, serie = 8.5, erro = 11.5855 ordem=3, serie = 13, erro = 7.08554 ordem=4, serie = 16.375, erro = 3.71054

(20)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

S ´erie de Taylor de e

x

Ü Neste exemplo, truncamos a s ´erie de Taylor em n = 4, portanto, para a exponencial, esperamos um erro da ordem de

δf ≈ (x − x0)(n+1)/(n + 1)!

Ü Para x − x0=0.2 o erro foi 2.75816e-06 e o valor esperado ´e δf = 0.25/5! = 2.666 × 10−6

Ü Para x − x0=3 o erro foi 3.71054 e o valor esperado ´e δf = 35/5! = 2.025

Ü Mas podemos ir adicionando quantos termos quisermos at ´e atingir a acur ´acia desejada. Para x − x0=3, obtemos o valor de 20.086 com 15 termos da s ´erie.

Ü Para x − x0=50, e50=5.1847 × 1021e variando o n ´umero de termos: n+1 s ´erie 2 51 4 2.2134 ×104 8 1.7960 ×108 16 3.2964 ×1013 32 1.3928 ×1019 64 5.0196 ×1021 128 5.1847 ×1021

(21)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Exerc´ıcio

Ü Vamos analisar a func¸ ˜ao sin(x ) em torno de x0=0: sin(x ) = x − 1 3!x 3+ 1 5!x 5 1 7!x 7· · · = ∞ X i=0 (−1)n (x ) 2n+1 (2n + 1)!

Ü Voc ˆe vai produzir o gr ´afico

0 50 100 150 200 250 x(graus) 2.0 1.5 1.0 0.5 0.0 0.5 1.0 1.5 2.0 sen(x)

Serie de Taylor - sen(x)

sen(x) N=3 N=5 N=7 N=9

(22)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Histogramas

Ü

Histogramas s ˜ao usados para visualizar e analisar dados

distribu´ıdos em determinadas categorias ou em intervalos de uma

dada vari ´avel. Permitem que se perceba o valor central (m ´edia), a

faixa de variac¸ ˜ao (desvio padr ˜ao), poss´ıveis estruturas e eventos

inesperados.

(23)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Histogramas

Ü

Para construir um histograma classificamos os dados de acordo

com os intervalos

, calculando o n ´umero N(x

i

)

ou a frequ ˆencia

(24)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Histogramas

Ü

Para construir um histograma classificamos os dados de acordo

com os intervalos,

calculando o n ´umero N(x

i

)

ou a frequ ˆencia

F (x

i

) =

N(x

i

)/N de ocorr ˆencia em cada intervalo.

(25)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Histogramas

Ü

Quando queremos fazer um histograma de uma vari ´avel real,

definimos uma largura do intervalo (

bin

), ∆x .

As quantidades N(x

i

)

v ˜ao representar o n ´umero de ocorr ˆencias

entre x

i

e x

i

+ ∆x .

(26)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Histogramas

Ü

Quando queremos fazer um histograma de uma vari ´avel real,

definimos uma largura do intervalo (

bin

), ∆x .

As quantidades N(x

i

)

v ˜ao representar o n ´umero de ocorr ˆencias

entre x

i

e x

i

+ ∆x .

N(x

i)

depende da escolha da largura ∆x .

(27)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Histogramas

Ü

Quando queremos fazer um histograma de uma vari ´avel real,

definimos uma largura do intervalo (

bin

), ∆x .

As quantidades N(x

i

)

v ˜ao representar o n ´umero de ocorr ˆencias

entre x

i

e x

i

+ ∆x .

(28)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Histogramas

bin xi +∆x Cont 1 9.00 9.08 0 2 9.08 9.16 0 3 9.16 9.24 2 4 9.24 9.32 0 5 9.32 9.40 1 6 9.40 9.48 4 7 9.48 9.56 8 8 9.56 9.64 19 9 9.64 9.72 20 10 9.72 9.80 35 11 9.80 9.88 32 12 9.88 9.96 33 13 9.96 10.04 23 14 10.04 10.12 10 15 10.12 10.20 9 16 10.20 10.28 7 17 10.28 10.36 4 18 10.36 10.44 1 19 10.44 10.52 0 20 10.52 10.60 0

Observe que, para melhor visualizac¸ ˜ao, o gr ´afico cobre uma faixa um pouco maior que a faixa de valores de x

(29)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Histogramas

bin xi +∆x Cont 1 9.00 9.08 0 2 9.08 9.16 0 3 9.16 9.24 2 4 9.24 9.32 0 5 9.32 9.40 1 6 9.40 9.48 4 7 9.48 9.56 8 8 9.56 9.64 19 9 9.64 9.72 20 10 9.72 9.80 35 11 9.80 9.88 32 12 9.88 9.96 33 13 9.96 10.04 23 14 10.04 10.12 10 15 10.12 10.20 9 16 10.20 10.28 7 17 10.28 10.36 4 18 10.36 10.44 1 19 10.44 10.52 0 20 10.52 10.60 0

Observe que, para melhor visualizac¸ ˜ao, o gr ´afico cobre uma faixa um pouco maior que a faixa de valores de x

(30)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Histogramas

Ü Atenc¸ ˜ao:

A escolha da largura dos intervalos pode distorcer o

comportamento dos dados que estamos analisando.

20 bins

bins

Tem que haver um compromisso entre o n ´umero de bins e o n ´umero de eventos em cada bin

(31)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Histogramas

Ü Atenc¸ ˜ao:

A escolha da largura dos intervalos pode distorcer o

comportamento dos dados que estamos analisando.

20 bins

4 bins

Tem que haver um compromisso entre o n ´umero de bins e o n ´umero de eventos em cada bin

(32)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Histogramas

Ü Atenc¸ ˜ao:

A escolha da largura dos intervalos pode distorcer o

comportamento dos dados que estamos analisando.

20 bins

200 bins

Tem que haver um compromisso entre o n ´umero de bins e o n ´umero de eventos em cada bin

(33)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Histogramas

Ü Atenc¸ ˜ao:

A escolha da largura dos intervalos pode distorcer o

comportamento dos dados que estamos analisando.

20 bins

500 bins

Tem que haver um compromisso entre o n ´umero de bins e o n ´umero de eventos em cada bin

(34)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Histogramas

Ü Atenc¸ ˜ao:

A escolha da largura dos intervalos pode distorcer o

comportamento dos dados que estamos analisando.

20 bins

500 bins

Tem que haver um compromisso entre o n ´umero de bins e o n ´umero de eventos em cada bin

(35)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Determinac¸ ˜ao do bin a que pertence um certo valor

De forma intuitiva:

Percorra os intervalos e veja se xi−1<valor <= xi

Podemos obter uma forma direta para sabermos a que bin um certo valor pertence:

min = 1.5 max = 2.0 Nbins = 5: ´ındice pode ser i=0,1,2,3,4 Dado um valor , ´ındice i = ?

Ex: se valor = 1.52 ⇒ i = 0 se valor = 1.91 ⇒ i = 4

(36)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Determinac¸ ˜ao do bin a que pertence um certo valor

De forma intuitiva:

Percorra os intervalos e veja se xi−1<valor <= xi

Podemos obter uma forma direta para sabermos a que bin um certo valor pertence:

min = 1.5 max = 2.0 Nbins = 5

: ´ındice pode ser i=0,1,2,3,4 Dado um valor , ´ındice i = ?

Ex: se valor = 1.52 ⇒ i = 0 se valor = 1.91 ⇒ i = 4

Dica: dx = max −minNbins = 0.5/5 = 0.1

(37)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Determinac¸ ˜ao do bin a que pertence um certo valor

De forma intuitiva:

Percorra os intervalos e veja se xi−1<valor <= xi

Podemos obter uma forma direta para sabermos a que bin um certo valor pertence:

min = 1.5 max = 2.0 Nbins = 5: ´ındice pode ser i=0,1,2,3,4

Dado um valor , ´ındice i = ? Ex: se valor = 1.52 ⇒ i = 0 se valor = 1.91 ⇒ i = 4

(38)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Determinac¸ ˜ao do bin a que pertence um certo valor

De forma intuitiva:

Percorra os intervalos e veja se xi−1<valor <= xi

Podemos obter uma forma direta para sabermos a que bin um certo valor pertence:

min = 1.5 max = 2.0 Nbins = 5: ´ındice pode ser i=0,1,2,3,4 Dado um valor , ´ındice i = ?

Ex: se valor = 1.52 ⇒ i = 0 se valor = 1.91 ⇒ i = 4

Dica: dx = max −minNbins = 0.5/5 = 0.1

(39)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Determinac¸ ˜ao do bin a que pertence um certo valor

De forma intuitiva:

Percorra os intervalos e veja se xi−1<valor <= xi

Podemos obter uma forma direta para sabermos a que bin um certo valor pertence:

min = 1.5 max = 2.0 Nbins = 5: ´ındice pode ser i=0,1,2,3,4 Dado um valor , ´ındice i = ?

Ex: se valor = 1.52 ⇒ i = 0 se valor = 1.91 ⇒ i = 4

(40)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Exerc´ıcio - Preparac¸ ˜ao de um histograma

ÜSuponha que voc ˆe tenha uma lista de valores para fazer um histograma.

ÜPara isso voc ˆe deve dividir o intervalo dos valores em sub-intervalos iguais

e contar quantos valores est ˜ao dentro de cada um desses sub-intervalos.

ÜEscreva um algoritmo para realizar essa operac¸ ˜ao.

ÜObserve o conte ´udo do arquivo gravidade.dat que cont ´em medic¸ ˜oes

da acelerac¸ ˜ao da gravidade feita por alunos na FisexpI. Os dados contidos

nesse arquivo variam entre 975.0 e 995.0 cm/s2.

ÜEscreva um programa em Python (histogramaRaiz.py) que:

1 Leia do teclado os limites do histograma e o n ´umero de bins. 2 Leia os valores do arquivo gravidade.dat

3 determine a que bin cada valor ser ´a atribu´ıdo 4 Conte quantos valores caem em cada intervalo

5 Fac¸a o gr ´afico de y × x onde x s ˜ao os valores da acelerac¸ ˜ao da

gravidade e y ´e o n ´umero de ocorr ˆencias de medidas em cada bin

Rode o programa com 20 e 60 bins

(41)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Histograma da numpy

Ü Felizmente n ˜ao precisamos fazer toda essa manipulac¸ ˜ao para trabalharmos com histograma no Python.

Ü A func¸ ˜ao numpy.histogram() j ´a faz tudo automaticamente:

Ü ela recebe dois argumentos como input: um array com os valores a serem considerados para o histograma, e uma lista com os limites dos bins

Ü e retorna duas listas, a contagem de cada bin, e a pr ´opria lista com os limites dos bins

a=np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27]) hist,bins = np.histogram(a,bins = [0,20,40,60,80,100]) print (hist)

print (bins)

O resultado ser ´a: [3 4 5 2 1]

(42)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Histograma em Matplotlib

Ü O m ´odulo matplotlib.pyplot nos fornece o m ´etodo plt.hist(valores, bins=20) ou

plt.hist(valores, bins=20, density=True)

Ü que plota o histograma dos valores contidos no array valores. Quando o argumento density for setado para True o histograma ´e normalizado.

Ü Fac¸a o exerc´ıcio de histograma da lista das Tarefas

(43)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Relembrando... Pacote Numpy

Numpy

E o pacote do Python mais fundamental para computac¸ ˜ao

´

cient´ıfica.

Ele cont ´em, entre outras coisas:

Ü

arrays e matrizes

Ü

func¸ ˜oes matem ´aticas sofisticadas

Ü

ferramentas de ´algebra linear

Ü

transformada de Fourier

Ü

geradores de n ´umeros aleat ´orios

Ü

ferramentas para integrar Python com C/C++ e Fortran

Voc ˆe pode encontrar um tutorial no pr ´opriosite da Numpy, ouaqui... existem v ´arios.

Existe uma quantidade enorme de m ´etodos j ´a prontos na numpy, cobriremos apenas alguns deles aqui.

(44)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Array

Ü

J ´a vimos o container Array, definido no m ´odulo numpy:

m

´e muito mais r ´apido que List, especialmente se contiver

muitos n ´umeros

m

j ´a tem os m ´etodos matem ´aticos, como se fossem aplicados a

vetores, p. ex. soma de dois arrays, produto escalar, etc.

Assim n ˜ao ´e necess ´ario fazer loops sobre os elementos

m

pode ser bi-dimensional,

para aplicac¸ ˜oes com matrizes

m

usado no m ´odulo de visualizac¸ ˜ao de gr ´aficos matplotlib

Ü

Atenc¸ ˜ao:

m

todos os elementos devem ser do mesmo tipo (float, int ...)

m

o n ´umero de elementos deve ser conhecido na criac¸ ˜ao, n ˜ao pode

ser modificado posteriormente

m

detalhes no

site do SciPy

(45)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Inicializac¸ ˜ao de um Array

Podemos inicializar um array de v ´arias formas

>>> import numpy as np #ser´a omitido nos pr´oximos slides >>> a = np.zeros(4) # cria array com 4 el. com 0. (float) >>> print (a)

[0. 0. 0. 0.] # repare que ´e sem v´ırgula >>> b = np.ones(5) # (omitindo os comandos print)) [1. 1. 1. 1. 1.]

>>> c= 6*np.ones(4) [6. 6. 6. 6.]

>>> alist = [1., 1.5, -2.2] # uma lista

>>> aarray = np.array(alist) # pode ser convertida em array >>> aarray = np.array([5, 10, 15], float)

array([ 5., 10., 15.])

>>> s = np.linspace(0, 2, 3) # (in´ıcio, fim, num. elem) array([0., 1., 2.]) # inclui o ´ultimo. sempre float >>> s = np.arange(1, 8, 2) # (in´ıcio, fim, passo) array([1, 3, 5, 7]) # n˜ao inclui o ´ultimo.

(46)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Inic. de um Array c/ valores lidos de arquivo

Ü Uma outra forma de criar um array ´e atrav ´es da leitura dos valores

armazenados em um arquivo

Ü Bastante ´util para ler dados obtidos em um experimento, ou gerados por outro programa

Ü Suponha um arquivo valores.txt com o seguinte conte ´udo: Um cabec¸alho

Um t´ıtulo 1.0

1.5 -2.2

Para l ˆe-los em um array, pulando as duas primeiras linhas: >>> a = np.loadtxt ("valores.txt", skiprows=2) >>> print (a)

[ 1. 1.5 -2.2]

ÜRepare que n ˜ao ´e preciso saber o n ´umero de linhas do arquivo

(47)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Operac¸ ˜

oes com np.arrays

Ü Em geral as operac¸ ˜oes com np.arrays s ˜ao realizadas elemento a elemento e retornam um outro np.array

>>> b = np.arange(3) >>> print (b) [0 1 2] >>> print (np.sqrt(b)) [0. 1. 1.41421356] >>> c = np.array([2., -1., 4.]) >>> print (b * c) [ 0. -1. 8.] >>> print (b<2) [ True True False]

Ü numpyfornece uma grande quantidade de func¸ ˜oes universais (sin, cos, exp,...) e v ´arios m ´etodos prontos. Vejaaquiuma lista deles

(48)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Formatac¸ ˜ao de np.arrays

Ü Vemos que os valores do tipo float s ˜ao apresentados com 8 casas decimais, ocupando 10 colunas. Podemos controlar a precis ˜ao usando o m ´etodo set printoptions()(omitindo o comando print(a))

Ü para controlar o n ´umero de casas decimais: a = np.linspace(1, 1.5, 4)

[1. 1.16666667 1.33333333 1.5 ]

>>> np.set_printoptions(precision=2) [1. 1.17 1.33 1.5 ]

Ü para escrever em notac¸ ˜ao cient´ıfica ou controlar tamb ´em o n ´umero de colunas ocupadas (relembre a func¸ ˜ao lambdaaqui):

>>> np.set_printoptions(

... formatter={’float’: lambda x: format(x, ’5.1e’)}) [1.0e+00 1.2e+00 1.3e+00 1.5e+00]

>>> np.set_printoptions(

... formatter={’float’: lambda x: format(x, ’6.3f’)}) [ 1.000 1.167 1.333 1.500]

(49)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Slices

Ü Slice se refere `a uma parte de uma lista ou array

Ü Para extrair uma parte de um array, usamos a sintaxe: A[i:j]. Ser ´a extra´ıda uma sublista que comec¸a com o elemento A[i] e termina com o elemento A[j-1]

>>> a = np.array([2,4,6,8,10,12,14,16],int) >>> b=a[3:6] [ 8 10 12] >>> c= a[3:] >>> print (c) [ 8 10 12 14 16] >>> d = a[:3] >>> print (d) [2 4 6] >>> r = a[1:-1] >>> print (r) [ 4 6 8 10 12 14]

(50)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Matrizes

Ü

Matriz ´e um conjunto de n ´umeros organizado em forma de tabela,

com algumas propriedades matem ´aticas. S ˜ao muito utilizadas em

´algebra linear e Mec ˆanica Qu ˆantica

Ü

A matriz A

A =

A

11

A

12

A

13

A

14

A

21

A

22

A

23

A

24

A

31

A

32

A

33

A

34

=

0

12

−1 5

−1 −1 −1 0

11

5

5

2

´e uma matriz com 3 linhas e 4 colunas, chamada matriz 3×4

Ü

O elemento A

ij

se refere ao n ´umero que est ´a na linha i coluna j

(51)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Matriz em Python

Ü Em Python, uma matriz ´e representada por um array de 2 dimens ˜oes

Ü Algumas maneiras de criar um array de duas dimens ˜oes, p. ex. 3 × 2 m criando todos os elementos com zeros

>>> a = np.zeros([3,2]) >>> print (a) [[0. 0.] [0. 0.] [0. 0.]] m ... ou vazios

>>> b = np.empty([3,2]) #cont´em algum lixo na mem´oria [[0. 0.]

[1. 0.] [0. 12.345]]

m ou uma matriz diagonal:

>>> A = np.diag(np.array([1,2,3,4]))ou >>> A = np.diag(np.arange(1,5))

(52)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Matriz em Python

Ü Algumas maneiras de criar um array de duas dimens ˜oes (cont.) m ... ou com todos os elementos iguais

>>> b=5*np.ones((3,4)) [[5. 5. 5. 5.]

[5. 5. 5. 5.] [5. 5. 5. 5.]]

m Podemos tamb ´em gerar uma matriz diagonal 2 x 2 com inteiros: >>> d=np.eye(2,dtype=int)

[[1, 0] [0, 1]]

m usando uma lista de listas (Tem que ter mesmo n ´umero de colunas para cada linha)

>>> r = np.array([[1, 2],[3, 4],[10, 11]], int) [[ 1 2]

[ 3 4] [10, 11]]

(53)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Matriz em Python

Ü Para acessar um elemento da matriz (lembre: ´ındice comec¸a de zero): >>> print (r[0,1]) 2 >>> r[1,1] = 5 >>> print (r) [[ 1 2] [ 3 5] [10 11]] >>> print(r[2,1]*r[1,1]) 55 >>> print (r[1,2])

Traceback (most recent call last): File "<stdin>", line 1, in <module>

(54)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Matriz em Python

>>> print (r) [[ 1 2] [ 3 5] [10 11]]

Ü Podemos acessar ou alterar uma linha inteira de uma s ´o vez: >>> print(r[1]) [3 5] >>> r[2]=np.array([7, 9]) >>> r array([[1, 2], [3, 5], [7, 9]]) Ü Visualizando a Transposta: >>> print (r.T) [[1 3 7] [2 5 9]]

(55)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Shape

Ü Para saber o layout da matriz:

>>> r = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9], [10, 11, 12]], int) >>> r.shape (4, 3) >>> r.shape[0] 4 >>> r.shape[1] 3 >>> r.ndim 2 >>> r.size 12 >>> len(r) 4 >>> r.reshape(2,6) array([[ 1, 2, 3, 4, 5, 6], [ 7, 8, 9, 10, 11, 12]])

(56)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Shape

Ü Um loop sobre todos os elem. da matriz pode ser feito com dois loops: >>> for i in range(r.shape[0]): ... for j in range(r.shape[1]): ... r[i,j] += 1 ... >>> print (r) [[ 2 3 4] [ 5 6 7] [ 8 9 10] [11 12 13]]

(57)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Matrizes - Operac¸ ˜

oes

>>> b=np.array([[3,5],[2,7]]) array([[3, 5],

[2, 7]])

>>> c=1/b # Note que isso n˜ao ´e o inverso da matriz!

array([[0.33333333, 0.2 ], [0.5 , 0.14285714]]) >>> d=b**2 array([[ 9, 25], [ 4, 49]]) >>> e=2**b array([[ 8, 32], [ 4, 128]]) >>> f=-(0.5*b + 1) array([[-2.5, -3.5], [-2. , -4.5]]) >>> b += b.T array([[ 6, 7], [ 7, 14]])

(58)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Slices

Ü

Podemos tamb ´em extrair partes da matriz, assim como foi feito com

array de uma dimens ˜ao:

>>> r = np.array([[2,3],[4,6],[11,10]])

#Extrair primeira coluna:

# 0:3 (todas as linhas)

0 (primeira coluna)

>>> print(r[0:3, 0])

#ou

>>> print(r[0:r.shape[0], 0])

#ou

>>> print(r[:, 0])

[ 2

4 11]

#extrair a segunda linha:

>>> print(r[1, :])

[4 6]

(59)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Inicializac¸ ˜ao de array 2D com leitura de arquivo

Ünumpyoferece um grande n ´umero de operac¸ ˜oes com matrizes

Ümas podemos us ´a-las simplesmente para ler os dados de um arquivo que est ˜ao organizados em forma de tabela:

m Dado um arquivo dados.txt com os valores abaixo: 0.5 3.7 2.1 7.0

2.3 2.9 5.4 3.1

m Voc ˆe pode l ˆe-lo para uma matriz:

>>> dados=np.loadtxt("dados.txt") array([[ 0.5, 3.7, 2.1, 7. ],

[ 2.3, 2.9, 5.4, 3.1]])

m Voc ˆe pode utilizar s ´o algumas colunas usando slices

m ou ler s ´o algumas colunas diretamente do arquivo para uma matriz: >>> dados2=np.loadtxt("dados.txt",usecols=(0, 2)) array([[ 0.5, 2.1],

(60)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Inicializac¸ ˜ao de array 2D com leitura de arquivo

m ou ler cada coluna diretamente para arrays de uma dimens ˜ao, usando a

opc¸ ˜ao unpack=True

>>> a, b,c = np.loadtxt("dados.txt",usecols=(0, 2,3),\ unpack=True) >>> a array([0.5, 2.3]) >>> b array([2.1, 5.4]) >>> c array([7. , 3.1])

m Fac¸a o exerc´ıcio sobre a densidade da ´agua da lista de Tarefas

m Fac¸a um programa que dadas duas matrizes A e B n × n, calcule o produto dessas duas matrizes. Compare com o obtido pelo m ´etodo np.dot(A,B)

(61)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Indexac¸ ˜ao sofisticada: M ´ascara booleana

m ´Indice como M´ascara booleana ´e uma ferramenta muito poderosa e ´util

para acessar v ´arios elementos de um np.array. Vamos usar array de uma dimens ˜ao para simplificar.

>>> b = 1.0/np.arange(0.2, 3, 0.2)

[5. 2.5 1.66666 1.25 1. 0.83333

0.71428 0.625 0.55555 0.5 0.45454 0.41666

0.38461 0.35714]

m Queremos imprimir apenas os elementos que sejam > 1 (repare que o array b n ˜ao foi modificado:

>>> print(b[b > 1])

[5. 2.5 1.66666667 1.25 ]

m ´util para alterar valores que atendam a um crit ´erio:

>>> b[b > 1] = 1 >>> print(b)

[1. 1. 1. 1. 1. 0.83333

0.71428 0.625 0.55555 0.5 0.45454 0.41666

(62)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Indexac¸ ˜ao sofisticada: M ´ascara booleana

m Vamos criar um outro array com o mesmo tamanho de b (b.size ´e 14):

>>> c = np.linspace(0, 10, b.size)

[ 0. 0.76923 1.53846 2.30769 3.07692 3.84615

4.61538 5.38461 6.15384 6.92307 7.69230 8.46153

9.23076 10. ]

m e queremos que os elementos de c sejam 3 onde os elementos de b s ˜ao 1:

>>> c[b == 1] = 3

[ 3. 3. 3. 3. 3. 3.84615

4.61538 5.38461 6.15384 6.92307 7.69230 8.46153

9.23076 10. ]

uma condic¸ ˜ao booleana (b==1) sobre um array pode ser usada para indexar um outro array, desde que eles sejam do mesmo tamanho.

(63)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Indexac¸ ˜ao sofisticada: M ´ascara booleana

m mais um exemplo: extrair n ´umeros pares de uma lista

>>> a=np.array([17, 2, 2, 1, 19, 5, 8, 14, 1, 10]) >>> print(a[a%2 ==0])

(64)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

SciPy

m

SciPy

´e um pacote que cont ´em v ´arias ferramentas de

computac¸ ˜ao cient´ıfica. ´

E composto de subm ´odulos que

correspondem `a diferentes aplicac¸ ˜oes:

1

Algebra linear: scipy.linalg

´

2

estat´ıtica e n ´umeros aleat ´orios: scipy.stats

3

integrac¸ ˜ao num ´erica: scipy.integrate

4

otimizac ˜ao e fit: scipy.optimize

5

func¸ ˜oes especiais: scipy.special

6

file input/output: scipy.io

7

processamento de imagem: scipy.ndimage

8

transformada de Fourier: scipy.fftpack

9

processamento de sinal: scipy.signal

(65)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

´

Algebra Linear

m O pacote para ´algebra linear ´e oscipy.linalg m determinante de uma matriz:

>>> import scipy.linalg

>>> a = np.array([[-2, 3], [4, 5]]) >>> scipy.linalg.det(a)

-22.0

m Inversa de uma matriz:

>>> b = scipy.linalg.inv(a) [[-0.22727273 0.13636364]

[ 0.18181818 0.09090909]]

m Verifique que A × A−1=I: >>> c=np.dot(a,b)

array([[ 1.00000000e+00, 2.77555756e-17], [-5.55111512e-17, 1.00000000e+00]]) >>> c[np.abs(c) < 1.e-10] = 0

array([[1., 0.], [0., 1.]])

(66)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Soluc¸ ˜ao sistemas de equac¸ ˜

oes lineares

m Para resolver sistemas de equac¸ ˜oes lineares basta criar uma matriz de coeficientes e um vetor coluna (array 1D)

2x1+4x2+6x3 = 4 x1− 3x2− 9x3 = −11 8x1+5x2− 7x3 = 1

m Queremos encontrar o vetor ~x tal que A~x = ~b A =   2 4 6 1 −3 −9 8 5 −7  , ~x =   x1 x2 x3  , ~b =   4 −11 1   >>> A = np.array([[2, 4, 6], [1, -3, -9], [8, 5, -7]]) >>> b = np.array([4, -11, 2]) >>> x = scipy.linalg.solve(A, b) >>> print (x) [-8.91304348 10.2173913 -3.17391304]

(67)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Autovalores e autovetores

m O m ´odulo scipy.linalg fornece o m ´etodo eig para achar os autovalores λ associados `a matriz A: A~x = λ~x .

m essa func ˜ao retorna um array, cujos elementos s ˜ao os autovalores e uma matriz cujas linhas s ˜ao os autovetores

>>> A = np.array([[2, 4, 6], [1, -3, -9], [8, 5, -7]]) >>> lam, evec = scipy.linalg.eig(A)

>>> lam array([ 2.40995356+0.j, -8.03416016+0.j, -2.3757934 +0.j]) >>> evec array([[-0.77167559, -0.52633654, 0.57513303], [ 0.50360249, 0.76565448, -0.80920669], [-0.38846018, 0.36978786, 0.12002724]])

m o primeiro autovalor e seu correspondente autovetor s ˜ao : >>> lam[0]

(2.4099535647625494+0j) >>> evec[:,0]

(68)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

m

(69)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

(70)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

m

(71)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Interface orientada a objeto (Opcional)

Ü

Vimos alguns tipos de gr ´aficos:

m

plot(x,y)

– gr ´afico de linha ou pontos

m

errorbar(x, y, xerr = , yerr = )

– com barra de erro

m

scatter(x , y)

– gr ´afico de pontos

(esse n ˜ao vimos, pesquise!)

m

hist(dados, n bins)

– histograma

Ü

Vimos o m ´etodo mais simples e direto, exemplo

(72)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

plotSin-simples.py

import numpy as np import matplotlib.pyplot as plt #np.arange(start,stop,step) x = np.arange(0, 4 * np.pi, 0.1) y = np.sin(x)

plt.plot(x, y, linewidth=2.0, linestyle=’--’, color=’r’, marker=’o’, markersize=5, markeredgecolor=’b’, markerfacecolor=’g’) plt.xlabel(’angulo (0 a 4 pi)’)

plt.ylabel(’seno(x)’)

plt.title(’Grafico de seno(x)’) plt.show()

(73)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Interface orientada a objeto

Ü Existe uma outra forma de fazer os gr ´aficos, ligeiramente diferente, chamada de Interface Orientada a Objeto

Ü Nessa interface, as componentes do gr ´afico (eixos, t´ıtulo, linhas, pontos, labels dos ticks, etc.) s ˜ao tratados como objetos program ´aveis que tem associados atributos, cujos valores podem ser fixados, e m ´etodos (func¸ ˜oes), que podem ser chamados para modificar o objeto.

Ü A anatomia b ´asica de um plot inclui quatro camadas:

m Figure:a camada mais de baixo. Pense nela como sendo uma janela que cont ´em os bot ˜oes de minimizar, maximizar e fechar m Plot: ´e criado sobre a camada da figure. Se existir mais de um

plot na mesma figure, cada um ´e chamado de subplot m Axis:s ˜ao os eixos x e y , onde as linhas, pontos, histogramas,

etc, s ˜ao desenhados sobre a camada plot. Um axis tem atributos como axis labels, tick labels, espessura da linha

m Data:pontos, linhas, formas que s ˜ao plotados sobre a camada axis

(74)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

(75)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Interface orientada a objeto

Ü A func¸ ˜ao plt.subplots() cria ao mesmo tempo o objeto figure e o objeto axis. Quando usada sem argumentos, cria apenas uma

figuree apenas um axis

Ü por convenc¸ ˜ao, chama-se o objeto figure de fig e o objeto axis de ax:

fig, ax = plt.subplots()

Ü Uma vez criados os objetos, podemos adicionar seus atributos , usando a estrutura de linguagem orientada a objeto:

< objeto > . < atributo >, p. ex: ax.plot(x, y)

ax.plot(x, z)

onde x, y e z s ˜ao numpy.arrays

Ü O objeto ax, tem v ´arios m ´etodos e atributos, p. ex. : ax.set title(), ax.legend().

Ele tem tamb ´em objetos filhas , com seus pr ´oprios atributos:

(76)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

plotSin-oo.py

import numpy as np import matplotlib.pyplot as plt x = np.arange(0,4*np.pi,0.1) y = np.sin(x) z = np.cos(x) fig, ax = plt.subplots() ax.plot(x,y,linewidth=2.0, linestyle=’--’) ax.plot(x,z)

ax.set_title(’Duas func¸˜oes’) ax.legend([’sin’,’cos’])

ax.xaxis.set_label_text("angulo")

ax.yaxis.set_label_text(’Seno e Cosseno’) plt.show()

(77)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

M ´etodos e atributos de axis

tabela retirada desse link

Comando Orientado a objeto Descric¸ ˜ao correspondente plt. fig, ax = plt.subplots() Cria o objeto figure e eixo –

ax.plot(x,y) cria gr ´afico de linha plt.plot(x,y) ax.set title(’Meu T´ıtulo’) t´ıtulo do gr ´afico plt.title(’My Title’) ax.set xlabel(’x label’) legenda do eixo x plt.xlabel(’x label’) ax.set ylabel(’y label’) legenda do eixo y plt.ylabel(’x label’) ax.legend([’line1’,’line2’]) legenda do gr ´afico plt.legend([’line1’,’line2’]) ax.set xlim([0, 5]) limites do eixo x plt.xlim([0, 5]) ax.set ylim([-1, 1]) limites do eixo y plt.ylim([-1, 1]) ax.axis([-x, +x, -y, +y]) limites dos 2 eixos

-ax.grid(True) grid nas duas direc¸ ˜oes plt.grid(True) ax.xaxis.grid(True) grid na vertical -ax.yaxis.grid(True) grid na horizontal

-ax.xaxis.set xticks([loc]) localizac¸ ˜ao dos ticks em x plt.xticks([loc],[label]) ax.xaxis.set xticklabels([labels]) tick labels x plt.xticks([loc],[label]) ax.yaxis.set yticks([loc]) localizac¸ ˜ao dos ticks em y plt.yticks([loc],[label]) ax.yaxis.set yticklabels([labels]) tick labels y plt.yticks([loc],[label]) ax.xaxis.set ticks([]) remove x tick labels plt.xticks([],[]) ax.yaxis.set ticks[]) remove y tick labels plt.yticks([],[]) ax.set aspect(’equal’) iguala as escalas dos eixos

-fig.tight layout() ajusta padding plt.tight layout() plt.show() mostra o gr ´afico plt.show()

Al ´em do ax.plot(x,y) temos todos os outros tipos de gr ´aficos:

(78)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Interface orientada a objeto

Ü

Essa forma de fazer gr ´aficos no matplotlib ´e a mais utilizada nos

exemplos

Ü

Ela oferece muitas possibilidades que n ˜ao s ˜ao poss´ıveis (ou que

n ˜ao ´e t ˜ao simples) utilizando o modo plt.:

m

apresentar mais de um gr ´afico na mesma figura

m

apresentar mais de um tipo de gr ´afico no mesmo plot

(p. ex. histograma e uma func¸ ˜ao superposta)

m

posicionar o eixo x no zero do eixo y

m

mostrar o gr ´afico em escala log

m

animac¸ ˜ao

m

...

(79)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Mais de um gr ´afico na mesma figura - 1

Ü Para termos mais de um gr ´afico em uma figura colocamos o n ´umero de linhas e colunas como argumento da func¸ ˜ao subplots(), e atribu´ımos cada um a um objeto do tipo axis

Ü A sintaxe geral ´e:

fig, <ax objects> = plt.subplots(rows, cols)

Ü e um exemplo de uma figura com dois 6 gr ´aficos, apresentados em 2 linhas e 3 colunas:

fig, ( (ax1,ax2,a3), (ax4,ax5,ax6) ) = plt.subplots(2, 3) Ü Uma atributo bastante utilizado da classe axis s ˜ao as escalas

logar´ıtmicas dos gr ´aficos:

ax.plot() linear em x e em y

ax.semilogy() linear em x, logar´ıtmica em y ax.semilogx() logar´ıtmica em x, linear em y ax.loglog() logar´ıtmica em x e em y

(80)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

maisDeUmPlot-1.py

t = np.arange(0.01, 20.0, 0.01)

# Cria a figure com 2 linhas e 2 colunas de subplots fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2)

ax1.plot(t, np.exp(-t / 5.0)) # linear x e y

ax1.set_title(’linear x and y’) ax1.grid()

ax2.semilogy(t, np.exp(-t / 5.0)) # log eixo y

ax2.set_title(’semilogy’) ax2.grid()

ax3.semilogx(t, np.exp(-t / 5.0)) # log eixo x

ax3.set_title(’semilogx’) ax3.grid()

ax4.loglog(t, 20 * np.exp(-t / 5.0), basex=2) # log eixo x e y ax4.set_title(’loglog base 2 on x’)

ax4.grid()

fig.tight_layout() plt.show()

(81)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

maisDeUmPlot-1.py

(82)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

Mais de um gr ´afico na mesma figura - 2

Ü Existe uma outra forma de fazer subplots: m primeiramente cria-se apenas uma figura

plt.figure()

m depois adiciona-se cada plot individualmente: ax1 = plt.subplot(1, 3, 1)

a ordem dos argumentos ´e:

n ´umero de linhas, n ´umero de colunas, ´ındice desse gr ´afico (que comec¸a com 1)

repare que o m ´etodo ´e subplot (sem “s” no final)

(83)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

maisDeUmPlot-2.py

# Cria apenas a figure , podendo definir seu tamanho plt.figure(figsize=(9, 3)) # largura e altura em inches

t = np.arange(0.01, 20.0, 0.01) ax1 = plt.subplot(1, 3, 1) ax1.plot(t, np.exp(-t / 5.0)) ax1.set_title(’exp(-t / 5.0)’) t = np.arange(0,4*np.pi,0.1) ax2 = plt.subplot(1, 3, 2) ax2.plot(t, np.sin(t)) ax2.set_title(’seno (x) ’) ax3 = plt.subplot(1, 3, 3) ax3.plot(t, np.sin(t)) ax3.spines[’bottom’].set_position(’zero’) ax3.spines[’right’].set_color(’none’) ax3.spines[’top’].set_color(’none’) plt.show()

(84)

Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)

maisDeUmPlot-2.py

Referências

Documentos relacionados

Atualmente aluno no Programa de doutoramento em Ciência da Informação, especialidade Sistemas, Tecnologias e Gestão da Informação, na Universidade Fernando Pessoa (UFP),

• Considerando que o custo máximo admissível não tinha sido alcançado no primeiro momento, foi possível, através da aplicação da revisão da estrutura de custos, otimiza-la,

Ü Uma outra forma de fazer loop no Python ´e a instruc¸ ˜ao for Ü ela ´e mais conveniente para trabalhar com listas (e arrays como.

Apresentac¸ ˜ao Computador Algoritmos Python Operac¸ ˜ oes Vari ´aveis Programas Repres..

A instalação deste item é obrigatória a fim de evitar erros com as alterações no esquema de banco de dados ao atualizar o Acelerador do PMO de versões anteriores do

Ao acessar a opção &#34;Alteração'' é possível ver o oferecimento do botão &#34;(Des)carrega CEST&#34; onde é possível executar carga ou descarga das informações relativas ao

PROCESSO: Encaminhamos a PROPESP o pedido de prorrogação do projeto de pesquisa “AVALIAÇÃO DA PRODUÇÃO HABITACIONAL E OCUPAÇÃO HUMANA EM ASSENTAMENTOS PRECÁRIOS NA AMAZÔNIA:

■ Uma camada de diamantes braçados a vácuo, que proporcionam ao disco um desempenho de corte extraordinário, adequado para cortar a maioria dos materiais que possam ocorrer