Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
IEC037 IntroduoProgramaode
Computadores
Aula07 Matrizes
2016/1
Atualizadoem25/08/2016
Contedo
2
Introduo
Comocriarumamatriz?
Comoacessarelementosdamatriz?
Trabalhandocommatrizes
AplicaesdelgebraLinear
Contedo
3
Introduo
Comocriarumamatriz?
Comoacessarelementosdamatriz?
Trabalhandocommatrizes
AplicaesdelgebraLinear
Dadosbidimensionais
4
Certosproblemas
demandamqueosdados
sejamorganizadosemum
formatodematriz
bidimensional:
Temperatura medidaem
diferenteslocalidadeseem
diversosmomentos.
Tempodedisparodeum
projtileasrespectivas
posiesxeynoespao.
Matrizes
::NotaoMatemtica
NaMatemtica,umamatrizAmn compostapor
m linhasen colunas.
Exemplo:
Matrizes
::NotaoMatemtica
Emnotaomatemtica,emumamatrizA
qualquer,cadaelementoindicadoporaij.
Ondicei
indicaalinha.
Ondicej indicaacoluna.
MatrizesemPython
7
Paraoperarcommatrizes,utilizeosmdulos:
manipulaodevetoresematrizes,
numpy.linalg operaesdelgebraLinear
envolvendomatrizes.
numpy
Maisdetalhes:
docs.scipy.org/doc/numpy/reference/
Contedo
8
Introduo
Comocriarumamatriz?
Comoacessarelementosdamatriz?
Trabalhandocommatrizes
AplicaesdelgebraLinear
MatrizesemPython
::Declaraodematrizes
EmPython,oselementosdasmatrizesso
organizadoslinhaalinha.
Oselementosdeumamesmalinhadevemser
separadosporvrgulaeestardentrodecolchetes.
Aslinhas devemserseparadasporvrgula.
A = array([[3, -4, 0], [5, 2, -1]])
Lembresede
importaranumpy
Comocriarumamatriz?
10
Considereoquadrodemedalhasdossete
primeiroscolocadosnasOlimpadasde2016.
EUA
GrBretanha
China
Rssia
Alemanha
Japo
Frana
Ouro
Prata
Bronze
46
27
26
19
17
12
10
37
23
18
18
10
08
18
38
17
26
19
15
21
14
quadro =
[46, 37,
[27, 23,
[26, 18,
[19, 18,
[17, 10,
[12, 8,
[10, 18,
])
array([
38],
17],
26],
19],
15],
21],
14]
Comocriarumamatriz?
11
Matrizesso
organizadasemlinhas.
Umamatrizcriada
comoumvetorde
linhas.
quadro =
[46, 37,
[27, 23,
[26, 18,
[19, 18,
[17, 10,
[12, 8,
[10, 18,
])
array([
38],
17], Linha
26],
19],
15],
21],
14]
12
Comocriarumamatriz?
::Diretonoscript
from numpy import *
# Criacao da matriz quadro
quadro = array([
[46, 37, 38],
[27, 23, 17],
[26, 18, 26],
[19, 18, 19],
[17, 10, 15],
[12, 8, 21],
[10, 18, 14]
])
13
Comocriarumamatriz?
::Viateclado
Oselementosdeuma
mesmalinhadevem
serseparadospor
vrgula.
Cadalinha damatriz
deveestarentre
colchetes.
Aslinhas devemser
separadaspor
vrgula.
[[3, -4, 0]
[5, 2, -1]]
14
Comocriarumamatriz?
::Valoresaleatrios
from numpy import *
from random import *
DIM = 2
mat = zeros((DIM, DIM), dtype=int)
# Cria matriz 2x2 com valores aleatorios em [-5;5]
for i in range(DIM):
for j in range(DIM):
# Atribuir no. aleatorio na linha i
mat[i,j] = randint(-5,5)
Quaisasdimenses deumamatriz?
15
Nmerode
elementos:
Isolandoonmerode
linhas:
TAM = size(quadro)
LIN = shape(quadro)[0]
Vetorcomnmerode
linhas edecolunas:
Isolandoonmerode
colunas:
FORMA = shape(quadro)
COL = shape(quadro)[1]
Funesparainicializao
16
zeros((n,n))
Geraumamatriz n n dezeros
zeros((m,n))
Geraumamatriz m n dezeros
ones((n,n))
Geraumamatriz n n deuns
ones((m,n))
Geraumamatriz m n deuns
eye(n)
Geraumamatrizidentidade n n
eye(m,n)
Geraumamatriz identidade m n
Contedo
17
Introduo
Comocriarumamatriz?
Comoacessarelementosdamatriz?
Trabalhandocommatrizes
AplicaesdelgebraLinear
Comoacessarelementosdamatriz?
18
Indiqueentre
colchetes:
ndicesdascolunas
ondicedalinha
ondicedacoluna
x = quadro[3,1]
ndicesdaslinhas
Separeosporvrgula
1
2
3
4
5
6
quadro[3,1]
Computandoototaldeumalinha
19
Qualototaldemedalhasdeumpasi?
0
linha i
20
Computandoototaldeumalinha
::Script definies
QualototaldemedalhasdaRssia (linha4)?
Ouro
Prata
Bronze
EUA
46
37
38
GrBretanha
27
23
17
China
26
18
26
Rssia
19
18
19
Alemanha
17
10
15
Japo
12
08
21
Frana
10
18
14
21
Computandoototaldeumalinha
::Script
QualototaldemedalhasdaRssia (linha4)?
# Constantes (facilitam manutencao)
PAISES
= shape(quadro)[0]
MEDALHAS = shape(quadro)[1]
total = 0
# Processa a j-esima coluna na linha 4
for j in range(MEDALHAS):
total = total + quadro[3,j]
print(total)
Computandoototaldeumacoluna
22
Qualototaldemedalhasdotipoj entreossete
pases?
coluna j
[0,j]
[1,j]
[2,j]
[3,j]
[4,j]
[5,j]
[6,j]
PAISES - 1
23
Computandoototaldeumacoluna
::Script definies
Qualototaldemedalhasdeouro entreossete
primeiroscolocados?
Ouro
Prata
Bronze
EUA
46
37
38
GrBretanha
27
23
17
China
26
18
26
Rssia
19
18
19
Alemanha
17
10
15
Japo
12
08
21
Frana
10
18
14
24
Computandoototaldeumacoluna
::Script
Qualototaldemedalhasdeouro entreossete
primeiroscolocados?
# Constantes (facilitam manutencao)
PAISES
= shape(quadro)[0]
MEDALHAS = shape(quadro)[1]
ouro = 0
# Processa a i-esima linha na coluna 0
for i in range(PAISES):
ouro = ouro + quadro[i,0]
print(ouro)
Seleodeelementosdeumalinha
25
Seleodetodos os
elementosdalinha i:
x = quadro[i,:]
Seleodosn primeiros
elementosdalinha i:
x = quadro[i,:n]
Seleodosn ltimos
elementosdalinha i:
x = quadro[i,-n:]
Seleodeelementosdeumacoluna
26
Seleodetodos os
elementosdacolunaj:
x = quadro[:,j]
Seleodosn primeiros
elementosdacolunaj:
x = quadro[:n,j]
Seleodosn ltimos
elementosdacolunaj:
x = quadro[-n:,j]
Localizandoelementosadjacentes
27
Algunsprogramasquetrabalhamcommatrizes
precisamlocalizaroselementosadjacentesaoutro
elemento[i,j].
Cuidadoparano
obterndices
negativos
[i-1,j-1]
[i-1,j]
[i-1,j+1]
[i,j-1]
[i,j]
[i,j+1]
[i+1,j-1]
[i+1,j]
[i+1,j+1]
28
MatrizesemPython
::Exemplo1
Determinar:
1. M[4,1]
2. M[5,3]
3. M[2,3]
4. M[5,M[1,3]]
5. M[M[4,2],2]
6. M[5,[M[2,3]+M[4,1]]]
7. M[3,:]
1.
0
8. M[:,3]
3.
1
2.
4.
6.
5.
7.
3,2,0,0
8.
4,0,1,0,1,2
Contedo
29
Introduo
Comocriarumamatriz?
Comoacessarelementosdamatriz?
Trabalhandocommatrizes
AplicaesdelgebraLinear
Problema01
30
Escrevaumscriptque
imprimaumamatriz
quadradadedimensoN
contendo:
1
noselementosabaixo da
diagonalprincipal
0 nadiagonalprincipal
1noselementosacima da
diagonalprincipal
31
Problema01
::Projetaralgoritmo
coluna [j]
[0,0]
[1,0]
linha [i]
[2,0]
[3,0]
[0,1]
[1,1]
[2,1]
[3,1]
[0,2]
[1,2]
[2,2]
[3,2]
[0,3]
[1,3]
[2,3]
[3,3]
Diagonalprincipal:i = j
Elementosacima:i < j
Elementosabaixo:i > j
32
Problema01
::Script Criaodamatriz
from numpy import *
DIM = int(input("Dimensao da matriz: "))
# Cria matriz de zeros, no formato inteiro
mat = zeros((DIM,DIM), dtype=int)
33
Problema01
::Script Preenchimentodamatriz
# Preenchimento da matriz
for i in range(DIM):
for j in range(DIM):
# Verifica se termo estah ABAIXO
if (i > j):
mat[i,j] = 1
# Verifica se termo estah ACIMA
elif (i < j):
mat[i,j] = -1
# Elementos da diagonal principal
else:
mat[i,j] = 0
Problema 02
34
Criarumamatriz
quadrada44 naqual
cadaelementoa
somadosndicesde
suaposionamatriz.
35
Problema02
::Script
from numpy import *
N = 4
mat = zeros((N,N), dtype=int)
for i in range(N):
for j in range(N):
mat[i,j] = i + j
Problema03
36
Oitoestudantesresponderamaumtestededez
perguntas.Asrespostas soarmazenadasemuma
matriz.Cadalinharegistraasrespostasdeum
alunoparaasquestes.
Problema03
37
Ogabarito armazenadoemumvetordedez
elementos.
Considerandoquecadaquestovaleumponto,
qualanota decadaaluno?
38
Problema03
::Projetaralgoritmo
Definirmatrizderespostas(resp)
Definirvetordegabarito(gab)
Definirumvetordenotas(notas),comnmerode
elementosigualaonmerodelinhasdamatrizresp
Paracadaaluno(linha)namatrizresp:
Paracadaresposta(coluna)namatrizresp:
Compararrespostadoalunocomgabarito
Seforemiguais,incrementarposiocorrespondentenovetor
notas
Casocontrrio,nofaznada
Imprimirnotadoaluno
39
Problema03
::Script definies
from numpy import *
# Respostas dos
resp = array ([
['A', 'B', 'A',
['D', 'B', 'A',
['E', 'D', 'D',
['C', 'B', 'A',
['A', 'B', 'D',
['B', 'B', 'E',
['B', 'B', 'A',
['E', 'B', 'E',
'C',
'C',
'C',
'D',
'C',
'C',
'C',
'C',
'D',
'A',
'B',
'C',
'D',
'D',
'D',
'D',
'E',
'E',
'E',
'E',
'E',
'E',
'E',
'E',
'E',
'E',
'E',
'E',
'E',
'E',
'E',
'E',
'A',
'A',
'A',
'A',
'A',
'A',
'A',
'A',
'D'],
'D'],
'D'],
'D'],
'D'],
'D'],
'D'],
'D']])
40
Problema03
::Script(cont.) clculodanota
# Constantes
NALUNOS = shape(resp)[0]
NQUEST = shape(resp)[1]
# No. de alunos
# No. de questoes
Contedo
41
Introduo
Comocriarumamatriz?
Comoacessarelementosdamatriz?
Trabalhandocommatrizes
AplicaesdelgebraLinear
42
MatrizesemPython
::Operaes
Estruturais
Matriciais
Operaesentrematrizes
executadaselementoa
elemento
Matrizematriz operao
executadasobreos
elementoscorrespondentes
nasmatrizes
Matrizeescalar ovalordo
escalarseraplicadoatodos
oselementosdamatriz
Seguemasregrasnormaisda
lgebralinear
43
MatrizesemPython
::Operaesestruturaisematriciais
Operao
EmPython
Comentrios
a + b
Soma
Somaestrutural esomamatricialso
estrutural
idnticas.
a b
Subtrao
Subtraoestrutural esubtrao
estrutural
matricialsoidnticas.
a * b
Multiplicao
Multiplicaoelementoaelementode
estrutural
aeb.Asduasmatrizesprecisamtera
mesmaforma,ouumadelasserum
escalar.
Multiplicao dot(a,b) Multiplicao dasmatrizesaeb.O
matricial
nmerodecolunasemaprecisaser
igualaodelinhasemb.
44
MatrizesemPython
::Operaes
Operao
Elementosda
diagonalprincipal
Transposta
Determinante
Inversa
EmPython
Mdulo
diagonal(m)
numpy
m.T
numpy
det(m)
inv(m)
linalg
linalg
45
Problema 04
::Matriztransposta
Acharatranspostade
umamatrizMN
fornecida.
46
Problema 04
::Projetaralgoritmo
Matriz a
[0,0]
[1,0]
[2,0]
[3,0]
[0,1]
[1,1]
[2,1]
[3,1]
[0,2]
[1,2]
[2,2]
[3,2]
t[i,j] = a[j,i]
Matriz t
a[0,0]
a[0,1]
a[0,2]
a[1,0]
a[1,1]
a[1,2]
a[2,0]
a[2,1]
a[2,2]
t = a.T
a[3,0]
a[3,1]
a[3,2]
47
Problema 05
::Determinante
Criarumamatriz22
comnmerosinteiros
aleatriosnointervalo
[5;+5].
Qualodeterminante
damatrizobtida?
48
Problema05
::Script
from numpy import *
from numpy.linalg import *
from random import *
N = 2
mat = zeros((N,N), dtype=int)
# Cria matriz 2x2 com valores aleatorios em [-5;5]
for i in range(N):
for j in range(N):
# Atribuir no. aleatorio na linha i
mat[i,j] = randint(-5,5)
# det = mat[0,0]*mat[1,1] - mat[0,1]*mat[1,0]
print(det(mat))
49
Problema06
::SistemasdeEquaesLineares
Umaengenheirasupervisionaaproduodetrstiposde
componentes(A,BeC).
Trstiposdematerial metal,plsticoeborracha so
necessriosparaaproduo.
Asquantidades(emgrama)dematerialexigidoparaproduzir
cadacomponenteso:
Componente
Metal
Plstico
Borracha
50
SistemasdeEquaesLineares
::Soluo
51
SistemasdeEquaesLineares
::SoluoemPython
Omdulonumpy.linalg oferecealgumas
maneirasderesolveraequao:
x = dot(inv(A), B)
52
Problema06
::Script
from numpy import *
from numpy.linalg import *
mat = array([[1,1,2], [1,2,1], [2,1,1]])
qtde = array([900, 800, 700])
# Resolucao do sistema de equacoes lineares
x = dot(inv(mat), qtde.T)
# Impressao do resultado
print(x)
Refernciasbibliogrficas
53
Menezes,NiloNeyCoutinho(2010).Introduo
ProgramaocomPython.EditoraNovatec.
HETLAND,MagnusLie(2008).Beginning Python:
From Novice to Professional.SpringereBooks,2
edio.Disponvelem:
http://dx.doi.org/10.1007/9781430206347.
Horstmann,Cay&Necaise,Rance D.(2013).
PythonforEveryone.JohnWiley&Sons.
Liang,Y.D.(2013).IntroductiontoProgramming
UsingPython.Pearson
54
Dvidas?