Sei sulla pagina 1di 54

IEC081 IntroduoCinciadosComputadores

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

from numpy import *


from numpy.linalg import *

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.

from numpy import *


# Leitura da matriz 'quadro'
quadro =
array(eval(input("Digite a
matriz: ")))
print(quadro)

[[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

[i,0] [i,1] [i,2]

20

Computandoototaldeumalinha
::Script definies

QualototaldemedalhasdaRssia (linha4)?

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]
])

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?

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]
])

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',

alunos aas questoes


'C',
'B',
'A',
'E',
'C',
'C',
'C',
'C',

'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']])

# Gabarito das questoes


gab = array(
['D', 'B', 'D', 'C', 'C', 'D', 'A', 'E', 'A', 'D'])

40

Problema03
::Script(cont.) clculodanota
# Constantes
NALUNOS = shape(resp)[0]
NQUEST = shape(resp)[1]

# No. de alunos
# No. de questoes

# Vetor das notas de cada aluno


notas = zeros((NALUNOS), dtype=int)
# Percorre cada linha (aluno)
for i in range(NALUNOS):
# Pontua um aluno i, verificando cada questao
for j in range(NQUEST):
if (resp[i,j] == gab[j]):
notas[i] = notas[i] + 1
print("Nota do aluno", i, ":", notas[i])

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

Sehouverdisponveis900g,800g e700g demetal,plsticoe


borracha,respectivamente,quantoscomponentespodemser
produzidos?

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?

Potrebbero piacerti anche