0% acharam este documento útil (0 voto)
84 visualizações

Álgebra Linear Com Python-1

1) O documento apresenta uma breve introdução à álgebra linear utilizando as bibliotecas NumPy e SymPy em Python. É demonstrada a definição de matrizes, operações como soma e multiplicação por escalar, e propriedades destas operações.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
84 visualizações

Álgebra Linear Com Python-1

1) O documento apresenta uma breve introdução à álgebra linear utilizando as bibliotecas NumPy e SymPy em Python. É demonstrada a definição de matrizes, operações como soma e multiplicação por escalar, e propriedades destas operações.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 28

5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

Àlgebra Linear com Python: uma breve


introdução
Autor: Ronisson Lucas Calmon da Conceição

Introdução

Este notebook objetiva demonstrar a resolução de problemas comuns da Álgebra Linear utilizando NumPy e
SymPy.

Primeiro iremos importar as bibliotecas que iremos utilizar no decorrer deste notebook:

In [1]:

import numpy as np
import sympy
from sympy.matrices import zeros,eye,ones

Definição

Da Álgebra linear sabemos que uma matriz A sobre um corpo K ou, simplesmente, uma matriz A (quando K
estiver subentendido) é uma tabela retangular de escalares, costumeiramente representada no formato que
segue:

[ ]
a 11 … a 1n
a 21 … a 2n
A=
⋮ ⋱ ⋮
a m1 … a mn

Dizemos que uma matriz com m linhas e n colunas é uma matriz m × n . O par de números m e n é dito o
tamanho da matriz.

Tipos especiais de matrizes

Consideremos uma matriz com m linhas e n colunas que denotaremos por A m × n. Apresentaremos
brevemente algumas matrizes importantes em Álgebra Linear. Utilizaremos o construtor Matrix() da
biblioteca SymPy para definir as matrizes.

1. Matriz Quadrada: matriz em que o número de linhas é igual ao número de colunas (m = n).

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 1/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

In [2]:

A = sympy.Matrix(2,2,[-1, 2, 4, 5])
A

Out[2]:

[ ] −1
4
2
5

1. Matriz Nula: matriz em que todos os elementos são nulos, ou seja, a ij = 0 para todo i e j.

In [3]:

B = sympy.zeros(2,3)
B

Out[3]:

[ 0
0
0
0
0
0 ]
1. Matriz-Coluna:matriz que possui uma única coluna (A m × 1).

In [4]:

C = sympy.Matrix(4,1, [-1, 2, 10, 5])


C

Out[4]:

[]
−1
2
10
5

1. Matriz-Linha: matriz com uma única linha (A 1 × n)

In [5]:

x,y,z = sympy.symbols(['x','y','z']) #transform string em símbolos

In [6]:

D = sympy.Matrix(1,3, [x,y,z])
D

Out[6]:

[x y z]

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 2/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

1. Matriz diagonal: matriz quadrada em que qualquer elemento fora da diagonal principal é nulo, isto é,
a ij = 0 para i ≠ j.

Assim, dizemos que uma matriz quadrada S = [s ij] é diagonal se todos os seus elementos fora da diagonal
principal forem nulos. Às vezes, denotamos uma tal matriz por S = diag s 11, s 22, . . . , s nn onde alguns s ii, ou
todos, podem ser nulos.

In [7]:

E = sympy.diag(1, -2, -7, 4)


E

Out[7]:

[ ]
1 0 0 0
0 −2 0 0
0 0 −7 0
0 0 0 4

1. Matriz identidade: matriz em que a ij = 1 , ∀i = j e a ij = 0, ∀i ≠ j. Assim, a matriz identidade, ou matriz


unitária, de ordem n, denotada por I n ou, simplesmente, por I, é a matriz quadrada com 1 na diagonal
principal e 0 em todas as demais entradas. A matriz identidade I é análoga ao escalar 1, pois, dada
qualquer matriz A m × n, temos que AI = IA = A. Para uma matriz B n × 1, verifica-se IB = B

In [8]:

I = sympy.eye(4)
I

Out[8]:

[ ]
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

1. Matriz triangular superior: matriz quadrada em que todos os elementos abaixo da diagonal principal são
nulos, ou seja, a ij = 0 se i > j.

In [9]:

D = sympy.Matrix(np.triu([2,-1,4],k=0))
D

Out[9]:

[ ]
2 −1 4
0 −1 4
0 0 4

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 3/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

1. Matriz triangular inferior: matriz quadrada em que todos os elementos acima da diagonal principal são
nulos, ou seja, a ij = 0, ∀i < j.

In [10]:

F = sympy.Matrix(np.tril([[2,1,1],[1,-1,1], [1,1,2]]))
F

Out[10]:

[ ]
2 0 0
1 −1 0
1 1 2

1. Matriz simétrica: matriz quadrada em que a ij = a ji para quaisquer i, j e A T = A.

In [11]:

G = sympy.Matrix(3, 3, [4, 3, -1, 3, 2, 0, -1, 0, 5])


G

Out[11]:

[ ]
4 3 −1
3 2 0
−1 0 5

1. Matriz Idempotente: matriz quadrada em que A ⋅ A = A .

In [12]:

H = sympy.Matrix(2, 2, [5, -5, 4, -4])


H

Out[12]:

[ ] 5
4
−5
−4

In [13]:

H*H

Out[13]:

[ ] 5
4
−5
−4

1. Matriz Ortogonal: toda matriz em que A − 1 = A T.

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 4/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

Operações com matrizes

Adição e multiplicação por escalar

Sejam A = a ij e B = b ij duas matrizes de mesmo tamanho, digamos, m × n . A soma de A e B, denotada


por A + B, é a matriz obtida pela soma de elementos correspondentes de A e B, ou seja

[ ]
a 11 + b 11 … a 1n + b 1n
a 21 + b 21 … a 2n + b 2n
A+B=
⋮ ⋱ ⋮
a m1 + b m1 … a mn + b mn

O múltiplo da matriz A pelo escalar k, denotado por simplesmente kA, é a matriz obtida pelo produto de cada
elemento de A por k, ou seja,

[ ]
ka 11 … ka 1n
ka 21 … ka 2n
kA =
⋮ ⋱ ⋮
ka m1 … ka mn

Vejamos uma implementação da soma de duas matrizes utilizando o NumPy.

Seja A =
[ 1
4
2 3
5 6 ] [ 2
eB= 1
4
3
6
5 ] iremos encontrar a matriz C, dada por A + B. Iremos simplesmente

definir A e B e posteriormente usar o operador + .

In [14]:

A = np.array([[1,2,3], [4,5,6]])
B = np.array([[2,4,6],[1,3,5]])
C = A+B

In [15]:

Out[15]:

array([[ 3, 6, 9],
[ 5, 8, 11]])

Encontrada a matriz C, iremos encontrar a matriz D, dada por kC, onde k = -2.

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 5/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

In [16]:

C = np.array ([[3,6,9], [5,8,11]])


k = -2
D = k*C

In [17]:

Out[17]:

array([[ -6, -12, -18],


[-10, -16, -22]])

Poderíamos resolver este mesmo problema usando a função np.dot() - utilizada para efetuar o produto
matricial:

In [18]:

D = np.dot(k,C)

In [19]:

Out[19]:

array([[ -6, -12, -18],


[-10, -16, -22]])

Propriedades da soma de matrizes


Considerando as matrizes A,B e C de mesma ordem mxn temos que:

1. A + B = B + A (comutatividade)
2. A + (B + C) = (A + B) + C (associatividade)
3. A + 0 = A

Iremos demonstrar a validade de tais propriedades usando funções de Álgebra Linear do SymPy.Para tanto,
definiremos três matrizes quadradas genéricas de ordem 2.

In [20]:

a11, a12, a21, a22 = sympy.symbols('a_11, a_12, a_21, a_22')


b11, b12, b21, b22 = sympy.symbols('b_11, b_12, b_21, b_22')
c11, c12, c21, c22 = sympy.symbols('c_11, c_12, c_21, c_22')
A = sympy.Matrix(2, 2, [a11, a12, a21, a22])
B = sympy.Matrix(2, 2, [b11, b12, b21, b22])
C = sympy.Matrix(2, 2, [c11, c12, c21, c22])

Vejamos as matrizes definidas:

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 6/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

In [21]:

Out[21]:

[ a 11
a 21
a 12
a 22 ]
In [22]:

Out[22]:

[ b 11
b 21
b 12
b 22 ]
In [23]:

Out[23]:

[ c 11
c 21
c 12
c 22 ]
Da propriedade 1 temos que:

In [24]:

A+B

Out[24]:

[ a 11 + b 11
a 21 + b 21
a 12 + b 12
a 22 + b 22 ]
In [25]:

B+A

Out[25]:

[ a 11 + b 11
a 21 + b 21
a 12 + b 12
a 22 + b 22 ]
Então:

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 7/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

In [26]:

(A+B) == (B+A)

Out[26]:

True

Da propriedade 2 temos que:

In [27]:

A+(B+C)

Out[27]:

[ a 11 + b 11 + c 11
a 21 + b 21 + c 21
a 12 + b 12 + c 12
a 22 + b 22 + c 22 ]
In [28]:

(A+B)+C

Out[28]:

[ a 11 + b 11 + c 11
a 21 + b 21 + c 21
a 12 + b 12 + c 12
a 22 + b 22 + c 22 ]
In [29]:

A+(B+C) == (A+B)+C

Out[29]:

True

Por fim, precisaremos criar uma matriz nula para verificar a última propriedade.

In [30]:

from sympy.matrices import zeros

In [31]:

zero = zeros(2,2)

In [32]:

zero

Out[32]:

[ ] 0
0
0
0

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 8/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

Desta forma, podemos verificar que:

In [33]:

A+zero == A

Out[33]:

True

Propriedades da multiplicação por escalar


Sejam as matrizes A e B de mesma ordem e as constantes reais k, k 1, k 2, temos que:

1. k(A + B) = kA + kB
2. (k 1 + k 2)A = k 1A + k 2A
3. kA = 0, em que k=0

Voltando para as matrizes... Observe que ambas, A + B e kA, são matrizes m × n . Podemos definir –A =
(–1)A e A − B = A + (–B). Dizemos que –A é a matriz simétrica de A e que A − B é a matriz diferença de
A e B. Não se define a soma de matrizes de tamanhos distintos.

Seja A =
[ 1
4
2 3
5 6 ] encontremos a matriz simétrica de A. Definiremos a matriz A e seguidamente

obteremos sua matriz simétrica.

In [34]:

A = np.array([[1,2,3],[4,5, 6]])

In [35]:

-A

Out[35]:

array([[-1, -2, -3],


[-4, -5, -6]])

Poderíamos também ter obtido a matriz simétrica de A como segue.

In [36]:

k=-1
A_simetrica = np.dot(k,A)

In [37]:

A_simetrica

Out[37]:

array([[-1, -2, -3],


[-4, -5, -6]])

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 9/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

Vamos recuperar a matriz B definida anteriormente e calcular A − B.

In [38]:

B = np.array([[2,4,6],[1,3,5]])

In [39]:

A-B

Out[39]:

array([[-1, -2, -3],


[ 3, 2, 1]])

[ ] [ ]
1 2 3 11 0 0
Dadas as matrizes H = 4 −2 −9 eG= 41 − 21 0 encontraremos a matriz J dada por J = H+G.
0 − 12 − 29 0 −1 −2

Utilizando NumPy obtemos o seguinte resultado:

In [40]:

H = np.array([[1, 2, 3], [4, -2, -9], [0, -12, -29]])


G = np.array([[11, 0, 0], [41, -21, 0], [0, -1, -2]])
J = H+G

In [41]:

Out[41]:

array([[ 12, 2, 3],


[ 45, -23, -9],
[ 0, -13, -31]])

Podemos resolver o mesmo problema com SymPy. Usaremos a função Matrix para construir as matrizes H e
G. Informaremos a ordem das respectivas matrizes e passaremos uma lista contendo seus elementos.

In [42]:

H = sympy.Matrix(3, 3, [1, 2, 3, 4, -2, -9, 0, -12, -29])


G = sympy.Matrix(3, 3, [11, 0, 0, 41, -21, 0, 0, -1, -2])
J = G+H

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 10/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

In [43]:

Out[43]:

[ ]
12 2 3
45 − 23 −9
0 − 13 − 31

Transposta de uma matriz

A transposta de uma matriz A, denotada por A T ou A ′ , é a matriz obtida escrevendo as colunas de A, na


mesma ordem, como linhas.

Propriedades

1. Uma matriz é simétrica se, e somente se ela é igual à sua transposta, ou seja, A = A ′ .
2. A ″ = A.
3. (A + B) ′ = A ′ + B ′ .
4. (kA) ′ = kA ′ , em que k é um escalar.

[ ]
2 0

Seja, I =
−4
5
6
11
T
− 2 então I =
0
[ 2
0
−4
11
5
−2
6
]
0 . Em linhas gerais, a linha de uma matriz passa a ser

coluna e a coluna se torna linha.

[ ]
−1 0 0
−4 11 1
T
Dada a matriz K = 5 −2 − 9 , encontremos sua matriz transposta K utilizando o NumPy.
6 0 7

In [44]:

K = np.array([[-1, 0, 0], [-4, 11, 1], [5, -2, -9], [6, 0, 7]])

In [45]:

Out[45]:

array([[-1, 0, 0],
[-4, 11, 1],
[ 5, -2, -9],
[ 6, 0, 7]])

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 11/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

Assim, a transposta de K é obtida como segue:

In [46]:

np.transpose(K)

Out[46]:

array([[-1, -4, 5, 6],


[ 0, 11, -2, 0],
[ 0, 1, -9, 7]])

Ou

In [47]:

K.T

Out[47]:

array([[-1, -4, 5, 6],


[ 0, 11, -2, 0],
[ 0, 1, -9, 7]])

[ ]
0 1 0
−4 11 1
Dada a matriz L = 5 −2 −9 encontremos L + L T utilizando NumPy.
6 0 7
36 10 57

In [48]:

L = np.array([[0, 1, 0], [-4, 11, 1], [5, -2, -9], [6, 0, 7], [36, 10, 57]])
L

Out[48]:

array([[ 0, 1, 0],
[-4, 11, 1],
[ 5, -2, -9],
[ 6, 0, 7],
[36, 10, 57]])

In [49]:

np.transpose(L)

Out[49]:

array([[ 0, -4, 5, 6, 36],


[ 1, 11, -2, 0, 10],
[ 0, 1, -9, 7, 57]])

Neste caso, não poderemos obter L + L T, pois L T não apresenta a mesma ordem de L.

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 12/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

In [50]:

np.transpose(L).shape, np.shape(L)

Out[50]:

((3, 5), (5, 3))

Multiplicação de matrizes

O produto das matrizes A e B é denotado por AB. Particularmente, iremos começar com um caso especial. O
produto AB de uma matriz linha A = [a i] e uma matriz coluna B = [b j] com o mesmo número de elementos
é definido como o escalar (ou a matriz ) obtido pela soma dos produtos das entradas correspondentes, ou

[]
b1
b2
[
seja, AB= a 1, a 2, ..., an ] ...
= a 1b 1+a 2b 2 + ... + a nb n.

bn

Enfatizamos que, nesse caso, AB é um escalar (ou, então, uma matriz 1 × 1). Não definimos o produto AB se
a matriz linha A e a matriz coluna B possuírem um número distinto de elementos. Esta definição é
particularmente importante para definição de um problema de regressão linear múltipla.

[]
3
Dadas as matrizes M = [ 7, − 4, 5] e N = 2 encontremos a matriz O = M ⋅ N.
−1

In [51]:

M = np.array([[7, -4, 5]])


N = np.array([[3],[2],[-1]])

In [52]:

Out[52]:

array([[ 7, -4, 5]])

In [53]:

Out[53]:

array([[ 3],
[ 2],
[-1]])

Para realizar a multiplicação das matrizes é necessário encontrar o número de linhas e colunas da matriz.

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 13/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

In [54]:

M.shape
Out[54]:

(1, 3)

Acima vemos que nossa matriz M possui uma linha e três colunas.

In [55]:

N.shape

Out[55]:

(3, 1)

Acima vemos que nossa matriz N possui três linhas e uma coluna. Assim, para efetuar o produto matricial o
número de colunas da primeira matriz, deve ser igual ao número de linhas da segunda matriz. Assim, a
matriz O, será :

In [56]:

O = np.dot(M,N)
O

Out[56]:

array([[8]])

[]
4
−9
Dadas as matrizes Q = [ 6, − 1, 8 3]eS= encontraremos a matriz P fruto de QS.
−2
5

In [57]:

Q = np.array([[6, -1, 8, 3]])


S = np.array ([[4], [-9], [-2], [5]])

Verificaremos se o número de colunas de Q é igual ao número de linhas de S:

In [58]:

Q.shape[1] == S.shape[0]

Out[58]:

True

Então a matriz P é obtida da seguinte forma:

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 14/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

In [59]:

P = np.dot(Q,S)
P

Out[59]:

array([[32]])

De um modo geral, dadas A = [a ik] e B = [b kj] duas matrizes tais que o número de colunas de A seja igual
ao número de linhas de B, digamos p, supomos assim que A seja uma matriz m × n e B uma matriz p × n.
Então o produto AB de A e B é a matriz m × n cuja ij-ésima entrada é dada pelo produto da i-ésima linha de
A com a j-ésima coluna de B. Assim,

[ ][ ]
a 11 ... a 1p b 11 ... b ij ... b 1n
. ... . . ... . ... .
a i1 ... a 1p . ... . ... . onde c ij = a i1b ij+a i2b j2 + ... + a ipb pj.
. ... . . ... . ... .
a m1 ... a mp b p1 ... b pj ... b pn

Não definimos o produto AB quando A é uma matriz m × p e B é uma matriz com q × n com p ≠ q.

Propriedades da Multiplicação de Matrizes

1. Em geral AB ≠ BA.
2. AI = IA = A (o que justifica o nome da matriz identidade)
3. A(B + C) = AB + AC (distributividade à esquerda da multiplicação)
4. (A + B)C = AC + BC (distributividade à direita da multiplicação)
5. (AB)C = A(BC) (associatividade)
6. (AB) ′ = B ′ A ′
7. 0⋅A=0eA⋅0=0

Demonstremos algumas destas propriedades utilizando matrizes genéricas.

In [60]:

from sympy.matrices import eye


a11, a12, a21, a22 = sympy.symbols('a_11, a_12, a_21, a_22')
b11, b12, b21, b22 = sympy.symbols('b_11, b_12, b_21, b_22')
c11, c12, c21, c22 = sympy.symbols('c_11, c_12, c_21, c_22')
A = sympy.Matrix(2, 2, [a11, a12, a21, a22])
B = sympy.Matrix(2, 2, [b11, b12, b21, b22])
C = sympy.Matrix(2, 2, [c11, c12, c21, c22])
I = eye(2)
zero = zeros(2)

Respectivamente temos as matrizes A,B,C,I e a matriz nula:

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 15/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

In [61]:

display(A)
display(B)
display(C)
display(I)
display(zero)

[ a 11
a 21
a 12
a 22 ]
[ b 11
b 21
b 12
b 22 ]
[ c 11
c 21
c 12
c 22 ]
[ ] 1
0
0
1

[ ] 0
0
0
0

1. AI = IA = I

In [62]:

A*I == I*A

Out[62]:

True

1. A(B + C) = AB + AC

In [63]:

A*(B+C)

Out[63]:

( ) ( ) ( ) ( )
[ ]
a 11 b 11 + c 11 + a 12 b 21 + c 21 a 11 b 12 + c 12 + a 12 b 22 + c 22

a 21 (b 11 + c 11 ) + a 22 ( b 21 + c 21 ) a 21 (b 12 + c 12 ) + a 22 (b 22 + c 22 )

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 16/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

In [64]:

A*B+A*C

Out[64]:

[ a 11b 11 + a 11c 11 + a 12b 21 + a 12c 21


a 21b 11 + a 21c 11 + a 22b 21 + a 22c 21
a 11b 12 + a 11c 12 + a 12b 22 + a 12c 22
a 21b 12 + a 21c 12 + a 22b 22 + a 22c 22 ]
In [65]:

sympy.expand(A*(B+C)) == A*B+A*C

Out[65]:

True

1. (A + B)C = AC + BC

In [66]:

(A+B)*C

Out[66]:

( ) ( ) ( ) ( )
[ ]
c 11 a 11 + b 11 + c 21 a 12 + b 12 c 12 a 11 + b 11 + c 22 a 12 + b 12

c 11 (a 21 + b 21 ) + c 21 (a 22 + b 22 ) c 12 (a 21 + b 21 ) + c 22 (a 22 + b 22 )

In [67]:

A*C+B*C

Out[67]:

[ a 11c 11 + a 12c 21 + b 11c 11 + b 12c 21


a 21c 11 + a 22c 21 + b 21c 11 + b 22c 21
a 11c 12 + a 12c 22 + b 11c 12 + b 12c 22
a 21c 12 + a 22c 22 + b 21c 12 + b 22c 22 ]
In [68]:

sympy.expand((A+B)*C) == A*C+B*C

Out[68]:

True

1. (AB)C = A(BC)

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 17/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

In [69]:

(A*B)*C

Out[69]:

( ) ( ) ( ) ( )
[ ]
c 11 a 11b 11 + a 12b 21 + c 21 a 11b 12 + a 12b 22 c 12 a 11b 11 + a 12b 21 + c 22 a 11b 12 + a 12b 22

c 11 (a 21b 11 + a 22b 21 ) + c 21 (a 21b 12 + a 22b 22 ) c 12 (a 21b 11 + a 22b 21 ) + c 22 (a 21b 12 + a 22b 22 )

In [70]:

A*(B*C)

Out[70]:

( ) ( ) ( ) ( )
[ ]
a 11 b 11c 11 + b 12c 21 + a 12 b 21c 11 + b 22c 21 a 11 b 11c 12 + b 12c 22 + a 12 b 21c 12 + b 22c 22

a 21 (b 11c 11 + b 12c 21 ) + a 22 (b 21c 11 + b 22c 21 ) a 21 (b 11c 12 + b 12c 22 ) + a 22 (b 21c 12 + b 22c 22 )

In [71]:

sympy.expand((A*B)*C) == sympy.expand(A*(B*C))

Out[71]:

True

1. (AB) ′ = B ′ A ′

In [72]:

(A*B).transpose() == B.transpose()*A.transpose()

Out[72]:

True

1. 0 ⋅ A = 0

In [73]:

zero*A

Out[73]:

[ ] 0
0
0
0

Iremos abordar outros exemplos numéricos de multiplicação de matrizes utilizando o NumPy.

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 18/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

Encontraremos XY sendo X =
[ ] [
1
2
3
−1 eY=
2
5
0
−2
−4
6 ]
Devemos inicialmente verificar a condição do produto matricial.

In [74]:

X = np.array([[1, 3], [2, -1]])


Y = np.array([[2, 0, -4], [5, -2, 6]])
X.shape[1] == Y.shape[0]

Out[74]:

True

In [75]:

np.dot(X,Y)

Out[75]:

array([[ 17, -6, 14],


[ -1, 2, -14]])

Traço de uma matriz

O traço de uma matriz quadrada A, denotado por tr(A), é a soma dos elementos da diagonal principal, a
saber, tr(A) = a 11 + a 22 + a 33 + . . . + a nn

Propriedades

1. tr(A + B) = tr(B + A)
2. tr(α ⋅ A) = α ⋅ tr(A), com α ∈ R
3. tr(A) = tr(A ′ )
4. tr(I n) = n
5. tr(AB) = tr(BA)

A partir das matrizes definidas a seguir, calcularemos o traço utilizando SymPy e NumPy. Nosso primeiro
exemplo será com uma matriz Identidade I 2. Para construir uma matriz identidade no NumPy podemos
utilizar o comando: np.eye(). Por exemplo, a matriz

In [76]:

F = np.eye(2)
F

Out[76]:

array([[1., 0.],
[0., 1.]])

O traço da matriz F é dado pela função np.trace(). Assim,

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 19/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

In [77]:

np.trace(F)

Out[77]:

2.0

Ou,

In [78]:

F.trace()

Out[78]:

2.0

Definiremos uma matriz identidade 10 × 10 e calcularemos seu traço.

In [79]:

O = np.eye(10)

In [80]:

Out[80]:

array([[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 1., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 1., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 1., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 1., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 1.]])

In [81]:

np.trace(O)

Out[81]:

10.0

Definiremos uma matriz diagonal e em seguida obteremos seu traço utilizando o NumPy

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 20/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

In [82]:

P = np.diag(np.arange(1,6))
P

Out[82]:

array([[1, 0, 0, 0, 0],
[0, 2, 0, 0, 0],
[0, 0, 3, 0, 0],
[0, 0, 0, 4, 0],
[0, 0, 0, 0, 5]])

In [83]:

P.trace()

Out[83]:

15

Para recuperar a diagonal principal podemos utilizar o método np.diagonal() .

In [84]:

np.diagonal(P)

Out[84]:

array([1, 2, 3, 4, 5])

Ou ainda, acessando como um método do objeto criado:

In [85]:

P.diagonal()

Out[85]:

array([1, 2, 3, 4, 5])

Para encontra a diagonal secundária, podemos utilizar o método: np.flipl().

In [86]:

np.diagonal(np.fliplr(P))

Out[86]:

array([0, 0, 3, 0, 0])

Definiremos agora duas matrizes genéricas A e B utilizando o SymPy, em seguida calcularemos o traço
associado a cada matriz.

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 21/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

In [87]:

from sympy.abc import a, b, c, d,e,f,g,h


A = sympy.Matrix(2, 2, [a, b, c, d])
B = sympy.Matrix(2, 2, [e, f, g, h])

In [88]:

Out[88]:

[ ] a
c
b
d

In [89]:

Out[89]:

[ ] e
g
f
h

Traço de A:

In [90]:

sympy.trace(A)

Out[90]:

a+d

Traço de B:

In [91]:

sympy.trace(B)

Out[91]:

e+h

Vamos verificar as propriedade (1), (3) e (5) definidas anteriormente.

tr(A + B) = tr(B + A)

In [92]:

sympy.trace(A+B)

Out[92]:

a+d+e+h

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 22/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

In [93]:

sympy.trace(B+A)

Out[93]:

a+d+e+h

tr(A) = tr(A ′ )

In [94]:

sympy.trace(A) == sympy.trace(A.transpose())

Out[94]:

True

tr(AB) = tr(BA)

Temos que AB:

In [95]:

A*B

Out[95]:

[ ae + bg
ce + dg
af + bh
cf + dh ]
In [96]:

B*A

Out[96]:

[ ae + cf
ag + ch
be + df
bg + dh ]
In [97]:

sympy.trace(A*B) == sympy.trace(B*A)

Out[97]:

True

Determinante

Podemos pensar no determinante como um número associado a uma matriz quadrada A m × n. Denotamos
det A.

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 23/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

| |
a 11 a 12 … a 1n
a 21 a 22 … a 2n
⋮ ⋮ ⋱ ⋮
a n1 a n2 … a nn

Calculemos o determinante de uma matriz usando o NumPy.

[ ]
1 2 3 4
4 3 2 1
Dada a matriz V = encontremos det (V).
0 2 4 6
5 7 9 11

Basta utilizar a função np.linalg.det()

In [98]:

V=np.array([[1, 2, 3, 4], [4, 3, 1, 1], [0, 2, 4, 6], [5, 7, 9, 1]])

In [99]:

round (np.linalg.det(V))

Out[99]:

-20

Matrizes invertiveis ou não singulares

Uma matriz quadrada A é dita invertível, ou não singular, se existir uma matriz B tal que AB = BA = I onde I é
a matriz identidade. Uma tal matriz B é única.

Dizemos que uma tal matriz B é a inversa de A e a denotamos por A − 1.Observe que a relação que define a
inversa é simétrica; ou seja, se B for a inversa de A, então A será a inversa de B.

Suponha que A =
[ ] [
2 5
1 3 eB=
3
−1
−5
]
2 , verifiquemos se estas matrizes admitem inversa.

In [100]:

A= np.array ([[2,5],[1,3]])
B = np.array ([[3,-5], [-1,2]])

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 24/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

In [101]:

np.dot(A,B)

Out[101]:

array([[1, 0],
[0, 1]])

In [102]:

np.dot(B,A)

Out[102]:

array([[1, 0],
[0, 1]])

Assim, B é inversa de A e A é inversa de B.

Determinemos a inversa da matriz Z =


[ ]
3
1
4
0

In [103]:

Z = np.array([[3,4],[1,0]])

In [104]:

np.linalg.inv(Z)

Out[104]:

array([[ 0. , 1. ],
[ 0.25, -0.75]])

Sistemas Lineares

De uma maneira geral, denomina-se sistema linear de m equações e n incógnitas x 1, x 2, . . . , x n a todo

{
a 11x 1 + a 12x 2 + . . . + a 1nx n = b 1
a 21x 1 + a 22x 2 + . . . + a 2nx n = b 2
sistema linear da forma : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . em que a 11, a 12, . . . , a 1n, b 1, b 2, . . . , b m são
a m1x 1 + a m2x 2 + . . . + a mnx n = b m

números reais.

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 25/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

Matriz associadas a um sistema linear:

{
a 11x 1 + a 12x 2 + . . . + a 1nx n = b 1
a 21x 1 + a 22x 2 + . . . + a 2nx n = b 2
Seja o sistema linear de m equações e n incógnitas ..............................
a m1x 1 + a m2x 2 + . . . + a mnx n = b m

Desse sistema, destacamos as seguintes matrizes:

[ ]
a 11 a 12 ... a 1n b1
a 21 a 22 ... a 2n b2
matriz completa do sistema
... ... ... ... ....
a n1 a n2 ... a nn b 1m

[ ]
a 11 a 12 ... a 1n
a 21 a 22 ... a 2n
matriz incompleta do sistema
... ... ... ...
a n1 a n2 ... a nn

[] []
x1 b1
x2 b2
Consideremos ainda as seguintes matrizes-colunas assosciadas ao sistema: X = ,B=
⋮ ⋮
xn bm

Multiplicando - se a matriz incompleta pela matriz das incognitas, obtemos a matriz dos temos
independentes:

[ ][ ] [ ]
a 11 a 12 ... a 1n x1 b1
a 21 a 22 ... a 2n x2 b2
⋅ =
... ... ... ... ⋮ ⋮
a n1 a n2 ... a nn xn bm

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 26/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

Denominamos então que o modelo acima é a forma matricial do sistema linear. Em notação simplificada
temos: A ⋅ X = B. Se a matriz incompleta do sistema for uma matriz quadrada, o seu determinante D A é dito
determinante do sistema. Se D A ≠ 0 então a matriz A é invertivel, isto é, existe A − 1, inversa de A. Se D A
≠ 0, o sistema admite solução única e , portanto, é possível e determinado.

Representemos o sistema
{ 3a − 7b = 1
5a + 2b = 4 na forma matricial e encontremos sua solução.

In [105]:

A = np.array ([[3, -7], [5, 2]])


B = np.array([[1], [4]])

In [106]:

X = (np.linalg.solve(A, B))

In [107]:

X #solução do sistema

Out[107]:

array([[0.73170732],
[0.17073171]])

Exercícios

[ ] [ ]
1 3 0 20 2 0
2 −1 10 13 −4 11
1. Encontre WI sendo W = eI=
3 4 10 0 5 −2
4 9 −1 0 6 0

1. Construa uma matriz 5 × 5 e encontre traço, diagonal principal e secundária.

1. Crie uma matriz 2 × 2 somente com elementos pares e calcule seu determinante.

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 27/28
5/28/2021 Algebra_Linear-Introducao(SymPy-NumPy)

1. Represente os sistemas abaixo na forma matricial e encontre as respectivas soluções.

{
2x + y = 5
a) x − 3y = 0

{
2a + b + c = − 1
b) a + c = 0
− 3a + 5b − c = 2

{
x+y+z+t=2
x − y − 2z − 3t = 5
c) 2x + y − 3z + t = − 9
3x − y − z + t = 6

1. Determine a inversa das matrizes:

a) H = [ ]
1
3
0
0

[ ]
1 0 0
b) I = 1 3 1
1 2 0

*Todos os conceitos, proposições e teoremas aqui apresentados foram retirados do livro cujo autor
é Seymour Lipschutz e/ou Simon e Blume

file:///home/lucas/Downloads/Algebra_Linear-Introducao(SymPy-NumPy).html 28/28

Você também pode gostar

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy