Buscar

matrizes_intro_python

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

Cálculo Numérico
CAN0001 2020/1
Breve Introdução a Matrizes
Prof. Fernando Deeke Sasse - CCT, UDESC
1. Arrays
Matrizes são arrays 2-dimensionais, como veremos a seguir. Usaremos arrays definidos na bibliteca numpy e operações de álgebra linear da biblioteca scipy:
In [26]: import numpy as np
import numpy.linalg as LA
#import scipy.linalg as la
Definimos inicialmente um caso particular de matriz, que é um vetor linha. Por exemplo,
In [27]: a= np.array([1,3,-2,1])
a
Para ver o conteúdo do array usamos print:
In [28]: print(a)
Um vetor é um array 1-dimensional:
In [29]: a.ndim
Os nomes após o ponto numa variável são atributos. O número de elementos do array é dado por:
In [30]: a.size
Definimos agora uma matriz, por exemplo, uma matriz 3 x 3:
In [31]: M=np.array([[1,3,4],[4,3,1],[5,8,1]])
print(M)
Matrizes são arrays 2-dimensionais:
In [32]: M.ndim
In [33]: M.size
In [34]: M.shape
Notemos que os índices de um array começam em 0, por exemplo,
In [35]: M[0,1]
Selecionemos a primeira coluna de para gerar um array 1D:𝑀
In [36]: col1=M[:,0]
print(col1)
Podemos transformar este vetor linha num vetor coluna:
In [37]: col1L=col1.reshape(3,1)
print(col1L)
3. Operações com vetores
Consideremos os vetores e . O produto escalar é dado por𝐮 = (3, 4, 2) 𝐯 = (−1, 2, −1) 𝐮 ⋅ 𝐯
In [38]: u = np.array([3,4,2])
v = np.array([-1,2,-1])
np.dot(u,v)
O produto vetorial é dado por𝐮 × 𝐯
In [39]: np.cross(u,v)
A norma de Frobenius (ou euclideana) de um vetor é definida por
No Python:
𝐮 = ( , … , )𝑢1 𝑢𝑛
|𝐮| = |Σ𝑛𝑖=1 𝑢𝑖|
2‾ ‾‾‾‾‾‾‾√
In [40]: u = np.array([4,-6,1])
u
In [44]: LA.norm(u)
A chamada "norma infinito" de um vetor é definida por
|𝐮 = {| |, 𝑖 = 1, … , 𝑛}|∞ max
𝑖
𝑢𝑖
No Python temos
In [43]: LA.norm(u, np.inf)
Calculemos a projeção do vetor na direção de . Devemos calcular a expressão𝐮 𝐯
= ( ) 𝐯𝐮𝐯 𝐮 ⋅ 𝐯|𝐯|2
In [20]: uv = (np.dot(u,v)/np.dot(u,v))*v
uv
2. Operações com matrizes
Seja a dada por:𝑀
In [21]: M=np.array([[-1,3,7],[2,3,1],[9,1,3]])
print(M)
Para elevar cada elemento ao quadrados podemos proceder da seguinte forma:
In [22]: M*M
ou
In [23]: M**2
A multiplicação matricial é feita com o operador @:
In [24]: M@M
É útil definirmos a matriz identidade:
In [25]: I3=np.eye(3)
I3
Podemos agora avaliar expressões matriciais. Por exemplo, se
In [26]: A = np.array([[-3,1,4],[3,1,6],[-5,3,7]])
suponhamos que queremos calcular . Procedemos do seguinte modo:𝐶 = 2𝐼 + 4𝐴 − 𝐴𝑀
In [27]: C=2*I3+4*A-A@M
C
Suponhamos que queremos calcular . Certamente poderíamos escrever𝐶 = 2𝐼 + 4𝐴 − 𝐴𝑀 5
In [28]: C=2*I3+4*A-A@M@M@M@M@M
C
No entanto é mais simples usar a operação de potenciação de matrizes (não definida por um símbolo simples no Python). Devemos carregar um comando da
álgebra linear a biblioteca numpy chamado matrix_power:
In [29]: from numpy.linalg import matrix_power as mpow
Note as diferenças e similaridades:
In [30]: mpow(M,2)
In [31]: M**2
In [32]: M@M
Podemos agora escrever
In [33]: C=2*I3+4*A-A@mpow(M,5)
C
In [34]: M
Podemos obter a matriz transposta de M:
In [35]: M.T
Notemos que deve ser uma matriz simétrica. De fato:𝑀𝑀 𝑇
In [36]: M@M.T
Calculemos a inversa de :𝑀 −1 𝑀
In [37]: LA.inv(M)
O traço da matriz (soma dos elementos da diagonal) é dado por𝑀
In [38]: np.trace(M)
O determinante é dado por:
In [39]: LA.det(M)
A norma de Frobenius de uma matriz de ordem é definida por
No Python,
𝐴 = [ ]𝑎𝑖𝑗 𝑚 × 𝑛
|𝐴 =|𝐹 |Σ𝑚𝑖=1 Σ𝑛𝑗=1 𝑎𝑖𝑗|
2‾ ‾‾‾‾‾‾‾‾‾‾‾‾√
In [14]: A = np.array([[1, 1, 2],[ 0, -1, -1],[ 2, 1, 0]])
A
In [15]: LA.norm(A,'fro')
A norma infinito de uma matriz de ordem é frequentemente usada em critérios de parada de processos iterativos é definida como sendo o
valor máximo da soma absoluta de cada linha
𝐴 = [ ]𝑎𝑖𝑗 𝑚 × 𝑛
|𝐴 = | | .|∞ max
1≤𝑖≤𝑚
Σ𝑛𝑗 𝑎𝑖𝑗
No Python
In [17]: LA.norm(A, np.inf)
Notemos que quando o tipo de norma não é especificado o resultado default é a norma de Frobenius:
In [18]: LA.norm(A)
3. Exercícios
1.Calcule a área de um triângulo de vértices , e . Sugestão: Use a interpretação geométrica do produto vetorial(1, 3, 2) (−3.4, −1) (3, 5, 1)
2.Calcule o volume do paralelepípedo determinado pelos vetores , e .𝐮 = (3, 1, 4) 𝐯 = (−2, 4, 1) 𝐰 = (9, 2, 5)
3.Verifique que a norma de Frobenius de uma matriz
pode também ser dada por
𝑀 =
⎛
⎝
⎜⎜
−3
4
1
5
−5
9
3
4
−2
⎞
⎠
⎟⎟
||𝐌|| = .(Tr(𝑀 )𝑀 𝑇‾ ‾‾‾‾‾‾‾‾‾‾√
4.Sejam as matrizes
(i) Determine , sendo a matriz identidade .
(ii) Use a equação para encontrar os autovalores de .
𝐴 = , 𝐵 = .
⎛
⎝
⎜⎜
1
4
7
2
5
8
3
6
9
⎞
⎠
⎟⎟
⎛
⎝
⎜⎜
4
6
1
4
−3
−2
6
2
3
⎞
⎠
⎟⎟
𝐶 = − 𝐴𝐵 − 4𝐼𝐴2 𝐼 3 × 3
𝑑𝑒𝑡(𝐶 − 𝐼𝜆) = 0 𝐶
5.Seja o sistema linear
=
⎛
⎝
⎜⎜
−1
4
7
2
5
8
3
6
9
⎞
⎠
⎟⎟
⎛
⎝
⎜⎜
𝑥
𝑦
𝑧
⎞
⎠
⎟⎟
⎛
⎝
⎜⎜
1
−4
3 .
⎞
⎠
⎟⎟
Resolva o sistema calculando explicitamente a expressão:
Note que este não é o método mais eficiente para resolver um sistema linear.
=
⎛
⎝
⎜⎜
𝑥
𝑦
𝑧
⎞
⎠
⎟⎟
⎛
⎝
⎜⎜
−1
4
7
2
5
8
3
6
9
⎞
⎠
⎟⎟
−1 ⎛
⎝
⎜⎜
1
−4
3 .
⎞
⎠
⎟⎟
Out[27]: array([ 1, 3, -2, 1])
[ 1 3 -2 1]
Out[29]: 1
Out[30]: 4
[[1 3 4]
 [4 3 1]
 [5 8 1]]
Out[32]: 2
Out[33]: 9
Out[34]: (3, 3)
Out[35]: 3
[1 4 5]
[[1]
 [4]
 [5]]
Out[38]: 3
Out[39]: array([-8, 1, 10])
Out[40]: array([ 4, -6, 1])
Out[44]: 7.280109889280518
Out[43]: 6.0
Out[20]: array([-1., 2., -1.])
[[-1 3 7]
 [ 2 3 1]
 [ 9 1 3]]
Out[22]: array([[ 1, 9, 49],
 [ 4, 9, 1],
 [81, 1, 9]])
Out[23]: array([[ 1, 9, 49],
 [ 4, 9, 1],
 [81, 1, 9]])
Out[24]: array([[70, 13, 17],
 [13, 16, 20],
 [20, 33, 73]])
Out[25]: array([[1., 0., 0.],
 [0., 1., 0.],
 [0., 0., 1.]])
Out[27]: array([[-51., 6., 24.],
 [-41., -12., -16.],
 [-94., 11., 41.]])
Out[28]: array([[-192431., -41089., -55681.],
 [-445549., -236391., -431777.],
 [-365625., -90152., -131486.]])
Out[30]: array([[70, 13, 17],
 [13, 16, 20],
 [20, 33, 73]])
Out[31]: array([[ 1, 9, 49],
 [ 4, 9, 1],
 [81, 1, 9]])
Out[32]: array([[70, 13, 17],
 [13, 16, 20],
 [20, 33, 73]])
Out[33]: array([[-192431., -41089., -55681.],
 [-445549., -236391., -431777.],
 [-365625., -90152., -131486.]])
Out[34]: array([[-1, 3, 7],
 [ 2, 3, 1],
 [ 9, 1, 3]])
Out[35]: array([[-1, 2, 9],
 [ 3, 3, 1],
 [ 7, 1, 3]])
Out[36]: array([[59, 14, 15],
 [14, 14, 24],
 [15, 24, 91]])
Out[37]: array([[-0.04597701, 0.01149425, 0.10344828],
 [-0.01724138, 0.37931034, -0.0862069 ],
 [ 0.14367816, -0.16091954, 0.05172414]])
Out[38]: 5
Out[39]: -174.0
Out[14]: array([[ 1, 1, 2],
 [ 0, -1, -1],
 [ 2, 1, 0]])
Out[15]: 3.605551275463989
Out[17]: 4.0
Out[18]: 3.605551275463989

Continue navegando