Buscar

ApostilaCookbook

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

UNIVERSIDADE FEDERAL DE SANTA CATARINA
CAMPUS JOINVILLE
CENTRO DE ENGENHARIA DA MOBILIDADE
COOKBOOK
(Apostila de Apoio para disciplina de Cálculo Numérico)
Autor: Nathan Filipe Hoepers
Joinville, Segundo Semestre de 2012
2
SUMÁRIO
1. OPERADORES ............................................................................................................. 3
2. ESTRUTURAS.............................................................................................................. 5
3. DEFININDO FUNÇÕES............................................................................................... 8
4. MANIPULAÇÃO DE ARQUIVOS DE DADOS........................................................... 9
5. IMPRESSÃO FORMATADA ..................................................................................... 12
6. VETORES E MATRIZES .............................................................................................. 17
7. GRÁFICOS COM MATPLOTLIB .............................................................................. 19
8. FUNÇÕES MATEMÁTICAS...................................................................................... 24
3
1. OPERADORES
OPERADORES ARITMÉTICOS
OPERADORES DESCRIÇÃO EXEMPLOS
+ Soma 2 + 2 # Imprime 4
- Subtração 5 – 2 # Imprime 3
* Multiplicação 5 * 5 # Imprime 25
/ Divisão 5.0 / 2.0 # Imprime 2.5
// Divisão Truncada 12.356 // 2 # Imprime 6.0
% Retorna o ‘resto da 
divisão’
10 % 3 # Imprime 1
** Exponenciação 2 ** 3 # Imprime 8
pow(a,b) Exponenciação pow(2, 3) # Imprime 8
+= Soma e atribui PARA i = 0
i+= 10 # Incrementa 10 
em i. (i = 10)
-= Subtrai e atribui i-= 4 # Subtrai 4 de i e 
atribui resultado. (i = 6)
*= Multiplica e atribui i*= 2 # multiplica 6 por 2 
e atribui para i. (i = 12)
/= Divide e atribui i/= 2 # Divide 12 por 2 e 
atribui para i. (i = 6)
//= Divide e atribui parte 
inteira do resultado
i//=4 # Divide 6 por 4 e 
atribui parte inteira para i. 
(i =1)
%= Divide e atribui resto 
da divisão
PARA i = 36
i%= 10 # Divide 36 por 10 e 
atribui resto para i. (i = 6)
**= Eleva número e atribui i**= 2 # Eleva 6 ao 
quadrado e atribui para 
i. (i = 36)
4
OPERADORES LÓGICOS
OPERADORES DESCRIÇÃO EXEMPLOS
> Maior 1 > 2 # False 2
< Menor 8 < 5 # False
>= Maior igual 10 >= 1 # True
<= Menor igual 5 <= 5 # True
== Igual 2 == 3 # False
not Não not 5 < 3 # True
!= Diferente 2 != 1 # True
and E a and b
or OU a or b
5
2. ESTRUTURAS
1⁰ - ESTRUTURA DE DECISÃO (if, elif, else):
Forma Geral if condição: # bloco de código
elif condição:
 # outro bloco
else:
 # bloco final
Exemplo a = input(‘digite valor de a: ’) 
b = input(‘digite valor de b: ’)
if a > b:
 print 'a maior que b'
elif a == b:
 print 'a igual a b'
else:
 print 'a menor que b'
2⁰ - ESTRUTURA DE REPETIÇÃO (while):
Forma Geral while condição: # bloco de código
Exemplo m = 3
n = 5
contador = 0
while m < n:
m = n / 0.5
n = m / 0.5
contador = contador + 1
print "Iteramos %d vezes até m > n" 
% contador
6
3⁰ - ESTRUTURA DE REPETIÇÃO (for):
Forma Geral for variável in seqüência: # bloco de código
Exemplo 1 for i in range (5):
 print i
# imprime 0,1,2,3,4
Exemplo 2 for m in range (1,5,1):
 print m
# imprime 1,2,3,4
Exemplo 3 for j in range (1,5,2):
 print j
# imprime 1,3
Exemplo 4 for t in range (5,1,-2):
 print t
# imprime 5,3
Exemplo 5 valores = [2, -4, 5, 2, -1,6]
for i in valores:
 if i < 0:
 print "Negativo 
encontrado: %d" % i
 
 else:
 print "não é um 
negativo"
4⁰ - ESTRUTURA DE CONTROLE (break):
Descrição O comando ‘quebra’ um laço 
(pode ser o laço for ou while)
Exemplo i = 0
while i < 10:
 if i == 5:
 break
 else:
 print i
 i += 1
# imprime 0,1,2,3,4
7
5⁰ - ESTRUTURA DE CONTROLE (continue):
Descrição O comando passa para o 
início do laço.
Exemplo for i in range (10):
 if i == 5:
 continue
 print i
# imprime 0,1,2,3,4,6,7,8,9
8
3. DEFININDO FUNÇÕES
FORMA GERAL def nome_funcao(param1,param2, ...):return: 
expressao_1,expressao_2,expressao_3...
EXEMPLO 1 def funcao():
 y = 2**2
 return y
print funcao() # imprime 4
EXEMPLO 2 def soma(a, b):
 return a + b
print soma(2, 5) #imprime 7
EXEMPLO 3 def soma(a = 1, b = 2, c = 1.5):
 return a + b + c
print soma() #imprime 4.5
print soma(2,5) # imprime 8.5
print soma(2,5,3) # imprime 10
EXEMPLO 4 def proximos(a):
 return a - 1, a + 1
ant, seg = proximos(10)
print "anterior:", ant # imprime 9
print "seguinte:", seg # imprime 11
EXEMPLO 5 def f(x,y,z):
 return x*y,pow(x,z),x/z
print f(10,2,1) # imprime (20,2,10)
EXEMPLO 6 def soma(x):
 lista= [1, 1, 1, 1]
 soma= 0
 for num in lista:
 soma += num
 return x*soma
print"Soma =", soma(10) #imprime 40
EXEMPLO 7 def mult(*nums):
 mult = 1
 for n in nums:
 mult *= n
 return mult
print mult(1, 2, 3,10) # Imprime 6
print mult(1, 2) # Imprime 3
9
4. MANIPULAÇÃO DE ARQUIVOS DE DADOS
CRIANDO UM ARQUIVO DE DADOS
import numpy as np
# Cria um conjunto de dados
N = 10
x = np.linspace( 0, 1, N ) # N pontos igualmente distribuí dos em [0,1]
y = np.exp(-x*x)
# Nome do arquivo que será criado para escrever e depois para ler
nome_arq = "Exemplo.CookBook"
# Criando um arquivo para guardar os valores de x e y
# 'w' signfica 'write', vai escrever no arquivo
arq_saida = open( nome_arq, 'w' ) 
for i in range(N):
 arq_saida.write( "%.6f %.6f\n" % (x[i],y[i]) )
arq_saida.close() # Fecha o arquivo
print "procure na pasta do código o arquivo criado" 
#MUITO IMPORTANTE NOTAR QUE O ARQUIVO IRÁ APARECER NA MESMA PASTA ONDE ESTA SALVO O CÓ DIGO
10
LENDO O ARQUIVO CRIADO
import numpy as np
nome_arq = "Exemplo.CookBook"
# Agora que o arquivo foi criado, abre ele para ler
# 'r' significa 'read', vai ler o arquivo
arq_entrada = open( nome_arq, 'r' ) 
# A funç ão 'readlines' lê tudo que tem dentro do arquivo e coloca na variável
# conteúdo.
# A variável conteúdo é uma lista, cada elemento da lista conté m uma linha
# do arquivo, inteira, como uma string.
conteudo = arq_entrada.readlines()
X = []
Y = []
print "Lendo o arquivo ..."
for linha in conteudo:
 # Para pegar os números é preciso dividir a variável linha em pedaç os
 # Cada pedaç o, vai ser um elemento da lista valores
 valores = linha.split()
 X.append( float( valores[0] ) )
 Y.append( float( valores[1] ) )
print "Vetor X lido do arquivo:"
print X
print "\nVetor Y lido do arquivo:"
print Y
11
SAÍDA DO PROGRAMA
Lendo o arquivo ...
# print "Vetor X lido do arquivo:"
# print X
Vetor X lido do arquivo:
[0.0, 0.111111, 0.222222, 0.333333, 0.444444, 0.555556, 0.666667, 0.777778, 0.888889, 1.0]
# print "\nVetor Y lido do arquivo:"
# print Y
Vetor Y lido do arquivo:
[1.0, 0.98773, 0.951817, 0.894839, 0.820755, 0.734444, 0.64118, 0.546108, 0.453789, 0.367879]
12
5. IMPRESSÃO FORMATADA
1⁰ - %f:
Forma Geral Print “%espaço.casasf” % número
Exemplo 1 a = math.pi
print " %8.5f" % a
# imprime 3.14159
(número PI com 8 espaços e 5 casas 
decimais)
Exemplo 2 a = math.pi
print " %.5f" % a
# imprime 3.14159
(número PI com 5 casas)
Exemplo 3 a = math.pi
print " %.f " % a
# imprime 3
(número PI truncado)
Exemplo 4 a = math.pi
print " %f " % a
# imprime 3.141593
(número PI em ponto flutuante com 6 casas)
13
2⁰ - %d:
Forma Geral Print “%espaço.d” % número
Exemplo 1 a = math.pi
print " %8.d" % a
# imprime 3
(número PI com 8 espaços e parte inteira)
Exemplo 2 a = math.pi
print " %8d" % a
# imprime 3
(número PI com 8 espaços e parte inteira)
Exemplo 3 a = math.pi
print " %d" % a
# imprime 3
(número PI parte inteira)
14
3⁰ - %e:
Forma Geral Print “%espaço.casase” % número
Exemplo 1 a = 12345.6789
print " %8.4e" % a
# imprime 1.2346e+04
(número com 8 espaços e 4 casas decimais)
Exemplo 2 a = 12345.6789
print " %.4e" % a
# imprime 1.2346e+04(número com 4 casas)
Exemplo 3 a = 12345.6789
print " %.e " % a
# imprime 1e+04
(número truncado)
Exemplo 4 a = 12345.6789
print " %e" % a
# imprime 1.234568e+04
(número em ponto flutuante com 6 casas)
15
4⁰ - %g:
Forma Geral Print “%espaço.númerosg” % número
Exemplo 1 a = 12345.6789
print " %8.2g" % a
# imprime 1.2e+04
(número com 8 espaços e 2 números)
Exemplo 2 a = 12345.6789
print " %8.3g" % a
# imprime 1.23e+04
(número com 8 espaços e 3 números)
Exemplo 3 a = 12345.6789
print " %.4g" % a
# imprime 1.234e+04
(representação com 4 números)
Exemplo 4 a = 12345.6789
print " %.g " % a
# imprime 1e+04
(número truncado)
Exemplo 5 a = 12345.6789
print " %g" % a
# imprime 12345.7
(ponto flutuante com 6 números)
Exemplo 6 a = -.000001235
print " %g" % a
# imprime -1.235e-06
(ponto flutuante)
16
5⁰ - %s:
Forma Geral Print “%espaço.caracters” % (número ou palavra)
Exemplo 1 a = “python”
print " %8.2s" % a
# imprime py
(palavra com 8 espaços e 2 caracteres)
Exemplo 2 a = 100
print " %8.2s" % a
# imprime 10
(número com 8 espaços e 2 caracteres)
Exemplo 3 a = 2.235
print " %.3s" % a
# imprime 2.2
(número com 3 caracteres)
Exemplo 4 a = “python”
print " %10s" % a
# imprime python
(toda palavra e com 10 espaços)
Exemplo 5 a = 12345.6789
print " %s" % a
# imprime 12345.6789
(todo o número)
17
6. VETORES E MATRIZES
*OBS: import numpy as np
CÓDIGO RESULTADO DO CÓDIGO
import numpy as np
# Cria uma lista
lista = [ 1, 2, 3, 4, 5 ]
# Uma lista não é um vetor!
# Crio um vetor usando Numpy:
x = np.array( lista )
# Imprimo o vetor x
print "Vetor x: ", x
nx = len(x)
print "O tamanho do vetor x é : %d " % nx
- IMPRIME:
Vetor x: [1 2 3 4 5]
O tamanho do vetor x é : 5
import numpy as np
# Inicio um vetor amostrado de forma uniforme entre 0 e 10
v = np.linspace( 0, 10, 3 )
print "\nv: ",v
- IMPRIME:
v: [ 0. 5. 10.]
import numpy as np
# Inicio um vetor com 10 zeros:
z = np.zeros( 10 )
print "\nz: ",z
- IMPRIME:
z: [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
# Manipulaç ões com vetores
u = 2*v
print "\n2*v: ",u
- IMPRIME:
2*v: [ 0. 10. 20.]
# Manipulaç ões com vetores
u = v**2
print "\nv**2: ",u
- IMPRIME:
v**2: [ 0. 25. 100.]
import numpy as np
# Manipulaç ões com vetores
u = np.sin( v )
print "\nsin(v): ",u
- IMPRIME:
sin(v): [ 0. -0.95892427 -0.54402111]
# Manipulaç ões com vetores
u = v + v**2 + v**3
print "\nv + v**2 + v**3: ",u
- IMPRIME:
v + v**2 + v**3: [ 0. 155. 1110.]
18
*OBS: MATRIZES SÃO VETORES DE VETORES
*OBS: import numpy as np
# Inicio uma matriz toda nula com 5 linhas e duas colunas
M0 = np.zeros( [5,2] )
print "\nMatriz de zeros:"
print M0
- IMPRIME:
Matriz de zeros:
[[ 0. 0.]
[ 0. 0.]
[ 0. 0.]
[ 0. 0.]
[ 0. 0.]]
# Inicio uma matriz toda com 1:
M1 = np.ones( [5,3] )
print "\nMatriz de 1's:"
print M1
- IMPRIME:
Matriz de 1's:
[[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]]
19
7. GRÁFICOS COM MATPLOTLIB
O código:
import numpy as np
from pylab import *
# 1 - Criando um conjunto de dados, com espaçamento muito pequeno
x = np.linspace(-5, 5, 1000)
y = np.exp(-x*x) # a função e^(-x*x), poderia ser qualquer outra função 
# 2 - Crio um conjunto de dados, com espaçamento grande
X = np.linspace(-5, 5, 11 )
Y = np.exp(-X*X)
# 3 - Plotando os pontos com espaçamento pequeno como uma curva contínua
plot( x, y, 'k-', label=u'Função $e^{-x^2}$', linewidth = 1)
# 4 - Ploto os pontos com espaçamento grande como se fossem dados
plot( X, Y, 'bo', label=u'Dados $e^{-x^2}$', markersize = 7)
# 5 - Legenda
legend(loc = 'upper left')
# 6 - Texto nos eixos x e y, além do título do gráfico
xlabel(u"Eixo x")
ylabel(u"Eixo y")
title(u"Gráfico de Exemplo")
# 7 - Limites do gráfico
xlim(-6,6)
ylim(-0.2,1.2)
# 8 - Grade
grid() # grid (True) – Aparece, grid (False) – Sem Grade
# 9 - Mostra o gráfico na tela
show()
20
1 – linha contínua:
# 3 - Plotando os pontos com espaçamento pequeno como uma curva contínua
plot( x, y, 'k-', label=u'Função $e^{-x^2}$', linewidth = 1)
Forma geral: plot (eixo x, eixo y, cor e tipo de linha, legenda, grossura da linha)
TIPOS DE CORES
‘b’ Azul - (blue)
‘g’ Verde - (Green)
‘r’ Vermelho - (red)
‘c’ Outro tipo de Azul – (cyan)
‘m’ Magenta - (magenta)
‘y’ Amarelo - (yellow)
‘k’ Preto - (Black)
‘w’ Branco - (White)
TIPOS DE LINHAS
'-' Linha Sólida
'--' Linha Tracejada
'-.' Linha Traço - Ponto
':' Linha Pontilhada
21
Exemplos:
 → plot( x, y, 'c-', label=u'Função $e^{-x^2}$', linewidth= 1 )
→ plot( x, y, 'b --', label=u'Função $e^{-x^2}$', linewidth = 2 )
→ plot( x, y, 'y -.', label=u'Função $e^{-x^2}$', linewidth = 3 )
→ plot( x, y, 'k:', label=u'Função $e^{-x^2}$', linewidth = 1 )
22
2 – Plotando os Marcadores (Pontos):
# 4 - Ploto os pontos com espaçamento grande como se fossem dados
plot( X, Y, 'bo', label=u'Dados $e^{-x^2}$', markersize = 7)
Forma geral: plot (eixo x, eixo y, cor e tipo de marcador, legenda, grossura do 
marcador)
TIPOS DE MARCADORES
'.' Ponto
'*' Estrela
'o' Circulo
'v' Triângulo para baixo
'^' Triângulo para cima
'<' Triângulo para esquerda
'>' Triângulo para direita
's' Quadrado
'p' Pentágono
'h' Hexágono 
'H' Hexágono 2
'+' Mais
'x' X
Exemplo:
→ plot( x, y, 'k-', label=u'Função $e^{-x^2}$', linewidth= 1 )
→ plot( X, Y, 'bo', label=u'Dados $e^{-x^2}$', markersize = 10)
23
3 – Legenda:
Forma geral: legend(loc = 'lugar onde se quer que apareça')
EXEMPLOS
Código Escrito Código Numérico Aplicação Localização
‘best’ 0
legend(loc = ‘best’)
OU
legend(loc = 0 )
Canto superior Direito
‘upper right’ 1
legend(loc = ‘upper right’)
OU
legend(loc = 1)
Canto superior Direito
‘upper left’ 2
legend(loc = ‘upper left’)
OU
legend(loc = 2)
Canto superior Esquerdo
‘lower left’ 3
legend(loc = ‘lower left’)
OU
legend(loc = 3)
Canto inferior Esquerdo
‘lower right’ 4
legend(loc = ‘lower right’)
OU
legend(loc = 4)
Canto inferior Direito
‘right’ 5
legend(loc = ‘right’)
OU
legend(loc = 5)
Canto direito
‘center left’ 6
legend(loc = ‘center left’)
OU
legend(loc = 6)
Centro Esquerdo
‘center right’ 7
legend(loc = ‘center right’)
OU
legend(loc = 7)
Centro Direito
‘lower center’ 8
legend(loc = ‘lower center’)
OU
legend(loc = 8)
Centro Inferior
‘upper center’ 9
legend(loc = ‘upper center’)
OU
legend(loc = 9)
Centro Superior
‘center’ 10
legend(loc = ‘center’)
OU
legend(loc = 10)
Centro
24
8. FUNÇÕES MATEMÁTICAS
*OBS: import numpy as np
1⁰ - Funções trigonométricas:
FUNÇÃO DESCRIÇÃO EXEMPLO
np.sin(x) Retorna o seno de x 
(em radianos)
print np.sin(.5)
#imprime 0.479425538604
np.cos(x) Retorna o cosseno de 
x (em radianos)
print np.cos(.5)
#imprime 0.87758256189
np.tan(x) Retorna a tangente de 
x (em radianos)
print np.tan(.5)
#imprime 0.546302489844
np.arcsin(x) Retorna o arco seno 
de x (em radianos)
print np.arcsin(.5) 
#imprime 0.523598775598
np.arccos(x) Retorna o arco 
cosseno de x (em 
radianos)
print np.arccos(.5) 
#imprime 1.0471975512
np.arctan(x) Retorna o arco 
tangente de x (em 
radianos)
print np.arctan(.5) 
#imprime 0.463647609001
np.arctan2(y,x) Retorna o arco 
tangente (y/x)
print np.arctan2(1,2) 
#imprime 0.463647609001
np.hypot(co,ca) Retorna a hipotenusa 
do triângulo
print np.hypot(3,4) 
#imprime 5.0
2⁰ - Funções logarítmicas e exponenciais:
FUNÇÕES DESCRIÇÃO EXEMPLOS
np.log(x,base) Cálculo de logaritmo 
com qualquer base
print np.log(8,2)
#imprime 3.0
np.log10(x) Cálculo de logaritmo 
com base 10
print np.log10(10)
#imprime 1.0
np.log(x) Cálculo de logaritmo 
natural (ln)
print np.log(2.71)
#imprime 0.996948634892
np.exp(x) Retorna e**x print np.exp(1)
#imprime 2.71828182846
np.sqrt(x) Retorna a raiz 
quadrada de x
print np.sqrt(81)
#imprime 9.0
25
3⁰ - Constantes, conversões e outras:
FUNÇÕES DESCRIÇÃO EXEMPLOS
np.e Retorna o valor de ‘e’ print np.e
#imprime 2.71828182…
np.pi Retorna o valor de ‘pi’ print np.pi
#imprime 3.141592…
np.degrees(x) Converte ‘x’ de 
radianos para graus
print np.degrees(0.523598...)
#imprime30.0
np.radians(x) Converte ‘x’ de graus 
para radianos
print np.radians(30)
#imprime 0.523598...
np.factorial(x) Retorna o fatorial de x print np.factorial(10)
#imprime 3628800
4⁰ - Funções hiperbólicas:
FUNÇÃO DESCRIÇÃO EXEMPLO
np.sinh(x) Retorna o seno
hiperbólico de x 
print np.sinh(2)
#imprime 3.62686040785
np.cosh(x) Retorna o cosseno
hiperbólico de x 
print np.cosh(2)
#imprime 3.76219569108
np.tanh(x) Retorna a tangente
hiperbólica de x
print np.tanh(2)
#imprime 0.964027580076
np.arcsinh(x) Retorna o inverso do 
seno hiperbólico de x 
print np.arcsinh(.2) 
#imprime 0.198690110349
np.arccosh(x) Retorna o inverso do 
cosseno hiperbólico 
de x 
print np.arccosh(2) 
#imprime 1.31695789692
np.arctanh(x) Retorna o inverso da 
tangente hiperbólica 
de x
print np.arctanh(.2) 
#imprime 0.202732554054

Outros materiais