Baixe o app para aproveitar ainda mais
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
Compartilhar