Você está na página 1de 41

ufca

Cálculo Numérico

Atividade Prática 1
“Numerical analysis is the area of mathematics and
computer science that creates, analyzes, and
implements algorithms for solving numerically the
problems of continuous mathematics.” (Atkinson)
Sobre o Python

https://www.python.org
Sobre o Python
Expressões booleanas
Assumem valor True ou False. Por exemplo,

>>> 3 >= 2
True
>>> 1 != (0+1)
False
>>>
Tipos de dados
O tipo de um dado é definido de modo dinâmico

• Tipos primitivos: int , float , long, complex

• Tipos compostos:
str , unicode, list , tuple, bytearray, buffer , xrange,
set, frozenset, dict
• Outros tipos: file , array, etc

• Tipos definidos pelo usuário: class


Tipos de dados
O tipo de um dado é definido de modo dinâmico

• Tipos primitivos: int , float , long, complex

• Tipos compostos:
str , unicode, list , tuple, bytearray, buffer , xrange,
set, frozenset, dict
• Outros tipos: file , array, etc

• Tipos definidos pelo usuário: class

É possı́vel verificar um tipo usando a função type()


Funções
Uma função é um subprograma, ou seja, um subconjunto de
definições e comandos de um programa
Funções
Uma função é um subprograma, ou seja, um subconjunto de
definições e comandos de um programa

>>> d e f m a i o r ( a , b ) :
... if a > b:
... return a
... else :
... return b
...
>>> m a i o r ( 3 , 2 )
3
>>> m a i o r ( −1 , −3)
−1
>>>
Funções
Uma função é um subprograma, ou seja, um subconjunto de
definições e comandos de um programa

Algumas funções intrı́nsecas:

abs ( ) i n p u t ( ) open ( ) i n t ( ) s t r ( ) pow ( )

sum ( ) p r i n t ( ) l e n ( ) range ( ) f l o a t ( )

...
Módulos
Um módulo é um arquivo contendo definições e comandos em
Python, o qual pode ser importado para outros módulos

O nome de um módulo é o mesmo nome do arquivo .py


contendo seu código
Módulos
Um módulo é um arquivo contendo definições e comandos em
Python, o qual pode ser importado para outros módulos

O nome de um módulo é o mesmo nome do arquivo .py


contendo seu código

# a r i t m e t i c a . py

d e f soma ( a , b ) : >>> import a r i t m e t i c a


r e t u r n a+b >>> a r i t m e t i c a . soma ( 3 , 4 )
7
def s u b t r a i ( a , b ) : >>> a r i t m e t i c a . s u b t r a i ( 3 , 4 )
r e t u r n a−b −1
>>>
Módulos
Um módulo é um arquivo contendo definições e comandos em
Python, o qual pode ser importado para outros módulos

O nome de um módulo é o mesmo nome do arquivo .py


contendo seu código

Um módulo é compilado no momento de sua importação,


gerando arquivos .pyc

Uma coleção de módulos dá origem a um pacote


SciPy
É uma plataforma em Python para o desenvolvimento de
softwares de matemática, ciência e engenharia.
SciPy
É uma plataforma em Python para o desenvolvimento de
softwares de matemática, ciência e engenharia.
Consiste, principalmente, dos seguintes pacotes:

• NumPy: tipos numéricos, arranjos e matrizes


• SciPy: coleção de algoritmos numéricos e toolboxes (signal
processing, optimization, statistics and much more)
• Matplotlib: pacote para traçar gráficos 2D e 3D
• pandas: estruturas de dados de alto desempenho
• SymPy: álgebra computacional e computação simbólica
• IPython: ferramentas para auxiliar no processamento de
dados
• nose: uma plataforma de testes
NumPy - tipos numéricos primitivos
• bool : True or False
• int32: -2147483648 a 2147483647
• int64: -9223372036854775808 a 9223372036854775807
• uint32: 0 a 4294967295
• uint64: 0 a 18446744073709551615
• float32: bit p/ sinal, 8 bits p/ expoente, 23 bits p/
mantissa
• float64: bit p/ sinal, 11 bits p/ expoente, 52 bits p/
mantissa
• complex64: dois floats 32-bit
• complex128: dois floats 64-bit
NumPy - tipos numéricos primitivos

>>> import numpy


>>> p r i n t numpy . f i n f o ( numpy . f l o a t )
Machine p a r a m e t e r s f o r f l o a t 6 4
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
p r e c i s i o n= 15 r e s o l u t i o n= 1 . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 e −15
machep= −52 e p s= 2 . 2 2 0 4 4 6 0 4 9 2 5 0 3 1 3 1 e −16
negep = −53 e p s n e g= 1 . 1 1 0 2 2 3 0 2 4 6 2 5 1 5 6 5 e −16
minexp= −1022 t i n y= 2 . 2 2 5 0 7 3 8 5 8 5 0 7 2 0 1 4 e −308
maxexp= 1024 max= 1 . 7 9 7 6 9 3 1 3 4 8 6 2 3 1 5 7 e +308
nexp = 11 min= −max
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

>>>
ndarray
Arranjos numéricos multi-dimensionais podem ser criados a
partir de arranjos, listas e tuplas

>>> x = np . a r r a y ( [ [ 1 , 3 . 5 ] , [ − 1 , 0 ] , ( 1 + 1 j , 3 . ) ] )
>>> x
a r r a y ( [ [ 1.0+0. j , 3.5+0. j ] ,
[ −1.0+0. j , 0 . 0 + 0 . j ] ,
[ 1.0+1. j , 3.0+0. j ] ] )
>>>
ndarray
Há também funções de construção especiais

>>> np . a r a n g e ( 1 0 )
array ([0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9])
>>>
>>> np . z e r o s ( ( 2 , 3 ) )
array ( [ [ 0. , 0. , 0.] ,
[ 0. , 0. , 0.]])
>>>
>>> np . l i n s p a c e ( 1 . , 4 . , 6 )
array ([ 1. , 1.6 , 2.2 , 2.8 , 3.4 , 4. ])
>>>
ndarray
ndarrays são mais do que arranjos
>>> a = np . a r a n g e ( 1 5 ) . r e s h a p e ( 3 , 5 )
>>> a
array ( [ [ 0 , 1 , 2 , 3 , 4] ,
[ 5 , 6 , 7 , 8 , 9] ,
[ 1 0 , 11 , 12 , 13 , 1 4 ] ] )
>>> a . s h a p e
(3 , 5)
>>> a . ndim
2
>>> a . d t y p e . name
’ int64 ’
>>> a . i t e m s i z e
8
>>> a . s i z e
15
>>> type ( a )
<type ’ numpy . n d a r r a y ’>
ndarray
As operações +, -, * são elemento a elemento

Para realizar operações matriciais, utilizamos a função dot, ou


optamos pelo tipo matrix
Constantes (scipy.constants)

>>> import s c i p y a s sp
>>> sp . e
2.718281828459045
>>> sp . p i
3.141592653589793
>>> sp . i n f
inf
>>> sp . nan
nan
>>>
Matplotlib
import numpy a s np
import m a t p l o t l i b . p y p l o t a s p l t

x = np . l i n s p a c e ( 0 . 0 , 5 . 0 , 1 0 0 )
y = np . c o s ( 2 ∗ np . p i ∗ x ) ∗ np . exp (−x )

plt . plot (x , y , ’k ’ )
plt . t i t l e ( ’ Decaimento e x p o n e n c i a l a m o r t e c i d o ’ )
plt . t e x t ( 2 , 0 . 6 5 , r ’ $ \ c o s ( 2 \ p i t ) \ , \ exp (− t ) $ ’ )
plt . x l a b e l ( ’ tempo ( s ) ’ )
plt . y l a b e l ( ’ v o l t a g e m (mV) ’ )

p l t . show ( )
Cancelamento catastrófico
Considere f (x) = x2 .
Sabemos que f 0 (3) = 6.
Mas observe o que acontece quando usamos a aproximação
linear para f 0 :
0 f (3 + h) − f (3)
f (3) ≈
h
(3 + h)2 − 32
=
h
Cancelamento catastrófico
Considere f (x) = x2 .
Sabemos que f 0 (3) = 6.
Mas observe o que acontece quando usamos a aproximação
linear para f 0 :
0 f (3 + h) − f (3)
f (3) ≈
h
(3 + h)2 − 32
=
h
Veja no python o que acontece com h = 10−1 a 10−20 .
Cancelamento catastrófico
Considere f (x) = x2 .
Sabemos que f 0 (3) = 6.
Mas observe o que acontece quando usamos a aproximação
linear para f 0 :
0 f (3 + h) − f (3)
f (3) ≈
h
(3 + h)2 − 32
=
h
Veja no python o que acontece com h = 10−1 a 10−20 .

Uma alternativa seria usar f 0 (3) ≈ 6 + h.


O Problema de Basileia
Euler concluiu em 1735 que:

X 1 π2
2
=
k 6
k=1
O Problema de Basileia
Euler concluiu em 1735 que:

X 1 π2
2
=
k 6
k=1

Desejamos calcular a série truncada:

2 100.000.000
π X 1

6 k2
k=1
O Problema de Basileia
Euler concluiu em 1735 que:

X 1 π2
2
=
k 6
k=1

Desejamos calcular a série truncada:

2 100.000.000
π X 1

6 k2
k=1

Calcule o somatório “indo” e “voltando” e veja o que acontece.


Atividade Prática 1
Dados três pontos p = (px , py ), q = (qx , qy ) e r = (rx , ry ) no
plano, a posição relativa de r com relação à reta L gerada por
p e q pode ser:
• à esquerda
• sobre a reta
• à direita

r
q

p
Atividade Prática 1
Dados três pontos p = (px , py ), q = (qx , qy ) e r = (rx , ry ) no
plano, a posição relativa de r com relação à reta L gerada por
p e q pode ser:
• à esquerda
• sobre a reta
• à direita
 
1 px py
orient(p, q, r) = det 1 qx qy 
1 rx ry
= (qx − px )(ry − py ) − (qy − py )(rx − px )
Atividade Prática 1
Dados três pontos p = (px , py ), q = (qx , qy ) e r = (rx , ry ) no
plano, a posição relativa de r com relação à reta L gerada por
p e q pode ser:
• à esquerda
• sobre a reta
• à direita
 
1 px py
orient(p, q, r) = det 1 qx qy 
1 rx ry
= (qx − px )(ry − py ) − (qy − py )(rx − px )

> 0 ⇒ r à esquerda de L
= 0 ⇒ r sobre L
< 0 ⇒ r à direita de L
Atividade Prática 1

p
Atividade Prática 1

r
vizinhança de p

p
Atividade Prática 1

r
vizinhança de p

orient(p, q, r) = 0?
p
Atividade Prática 1

r
vizinhança de p

0
orient(p , q, r) < 0?

p0
Atividade Prática 1

r
vizinhança de p

0
orient(p , q, r) > 0?
p0
Atividade Prática 1
Sejam ux = uy = 2−53 . Definimos
p0 = (px + aux , py + buy ) ,

para 0 ≤ a, b ≤ 15. Dados


p = (0,5, 0,5), q = (12, 12) e r = (24, 24)

verifique para quais valores de a e b a função orient classificará


erroneamente o ponto r.
Atividade Prática 1
Sejam ux = uy = 2−53 . Definimos
p0 = (px + aux , py + buy ) ,

para 0 ≤ a, b ≤ 15. Dados


p = (0,5, 0,5), q = (12, 12) e r = (24, 24)

verifique para quais valores de a e b a função orient classificará


erroneamente o ponto r.

Tarefa. Gerar as Figuras 2, 3 e 4 de Kettner et al. (2008)


Atividade Prática 1
Como desenhar retângulos no plano

import m a t p l o t l i b . p y p l o t a s p l t
import m a t p l o t l i b . p a t c h e s a s p a t c h e s

fig1 = plt . figure ()


ax1 = f i g 1 . gca ( )
ax1 . a d d p a t c h (
patches . Rectangle (
(0.1 , 0.1) , # canto i n f e r i o r esquerdo
0.5 , # largura
0.5 , # altura
f a c e c o l o r= ’ r e d ’ , # c o r de p r e e n c h i m e n t o
)
)

p l t . show ( )

Você também pode gostar