Introdução à Programação Aula 18 Método de eliminação de...

21
Introdução à Programação Aula 18 — Método de eliminação de Gauss Pedro Vasconcelos DCC/FCUP 2015 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 18 — Método de eliminação de Gauss 2015 1 / 23

Transcript of Introdução à Programação Aula 18 Método de eliminação de...

Page 1: Introdução à Programação Aula 18 Método de eliminação de Gausspbv/aulas/ipm/teorica-18.pdf · Nesta aula 1 Sistemas de equações lineares 2 Método de eliminação de Gauss

Introdução à ProgramaçãoAula 18 — Método de eliminação de Gauss

Pedro Vasconcelos

DCC/FCUP

2015

Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 18 — Método de eliminação de Gauss 2015 1 / 23

Page 2: Introdução à Programação Aula 18 Método de eliminação de Gausspbv/aulas/ipm/teorica-18.pdf · Nesta aula 1 Sistemas de equações lineares 2 Método de eliminação de Gauss

Nesta aula

1 Sistemas de equações lineares

2 Método de eliminação de GaussResolução de um sistema linearImplementação

Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 18 — Método de eliminação de Gauss 2015 2 / 23

Page 3: Introdução à Programação Aula 18 Método de eliminação de Gausspbv/aulas/ipm/teorica-18.pdf · Nesta aula 1 Sistemas de equações lineares 2 Método de eliminação de Gauss

Sistemas de equações lineares

Um sistema de equações lineares:2x + y − z = 8 (L1)

−3x − y + 2z = −11 (L2)−2x + y + 2z = −3 (L3)

3 equações (L1), (L2), (L3)3 incógnitas x , y , z

Em geral: pode ter zero, uma ou infinitas soluções.

Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 18 — Método de eliminação de Gauss 2015 4 / 23

Page 4: Introdução à Programação Aula 18 Método de eliminação de Gausspbv/aulas/ipm/teorica-18.pdf · Nesta aula 1 Sistemas de equações lineares 2 Método de eliminação de Gauss

Operações elementares

As seguintes operações transformam um sistema de equaçõeslineares noutro equivalente:

1 trocar a ordem das equações;2 somar uma equação com outra;3 multiplicar uma equação por uma constante diferente de zero.

Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 18 — Método de eliminação de Gauss 2015 5 / 23

Page 5: Introdução à Programação Aula 18 Método de eliminação de Gausspbv/aulas/ipm/teorica-18.pdf · Nesta aula 1 Sistemas de equações lineares 2 Método de eliminação de Gauss

Trocar equações

Podemos trocar a ordem das equações:2x + y − z = 8

−3x − y + 2z = −11−2x + y + 2z = −3

⇐⇒

−3x − y + 2z = −11

2x + y − z = 8−2x + y + 2z = −3

Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 18 — Método de eliminação de Gauss 2015 6 / 23

Page 6: Introdução à Programação Aula 18 Método de eliminação de Gausspbv/aulas/ipm/teorica-18.pdf · Nesta aula 1 Sistemas de equações lineares 2 Método de eliminação de Gauss

Somar equações

Podemos substituir uma equação pela sua soma com outra equação:2x + y − z = 8

−3x − y + 2z = −11−2x + y + 2z = −3

⇐⇒

−x + 0y + z = −3−3x − y + 2z = −11−2x + y + 2z = −3

2x +y −z = 8+ −3x −y +2z = −11−x +0y +z = −3

Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 18 — Método de eliminação de Gauss 2015 7 / 23

Page 7: Introdução à Programação Aula 18 Método de eliminação de Gausspbv/aulas/ipm/teorica-18.pdf · Nesta aula 1 Sistemas de equações lineares 2 Método de eliminação de Gauss

Multiplicar por uma constante

Podemos multiplicar uma equação por uma constante diferente dezero:

2x + y − z = 8−3x − y + 2z = −11−2x + y + 2z = −3

⇐⇒

x + 1

2y − 12z = 4

−3x − y + 2z = −11−2x + y + 2z = −3

(12×) 2x +y −z = 8

x +12y −1

2z = 4

Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 18 — Método de eliminação de Gauss 2015 8 / 23

Page 8: Introdução à Programação Aula 18 Método de eliminação de Gausspbv/aulas/ipm/teorica-18.pdf · Nesta aula 1 Sistemas de equações lineares 2 Método de eliminação de Gauss

Método de eliminação de Gauss

Resolver um sistema pelo método de eliminação de Gauss:eliminamos uma incógnita usando operações elementaresrepetimos o processo até obter sistema um sistema triangularsuperiorno fim: obtemos as soluções por substituições para trás

Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 18 — Método de eliminação de Gauss 2015 10 / 23

Page 9: Introdução à Programação Aula 18 Método de eliminação de Gausspbv/aulas/ipm/teorica-18.pdf · Nesta aula 1 Sistemas de equações lineares 2 Método de eliminação de Gauss

Resolução usando eliminação de Gauss

2x +y −z = 8 (L1)−3x −y +2z = −11 (L2)−2x +y +2z = −3 (L3)

Eliminar x em (L2) usando (L1):

(32×) 2x +y −z = 8+ −3x −y +2z = −11

0x +12y +1

2z = 1

Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 18 — Método de eliminação de Gauss 2015 11 / 23

Page 10: Introdução à Programação Aula 18 Método de eliminação de Gausspbv/aulas/ipm/teorica-18.pdf · Nesta aula 1 Sistemas de equações lineares 2 Método de eliminação de Gauss

Resolução usando eliminação de Gauss

2x +y −z = 8 (L1)

+12y +1

2z = 1 (L2)−2x +y +2z = −3 (L3)

Eliminar x em (L3) usando (L1):

(1×) 2x +y −z = 8+ −2x +y +2z = −3

0x +2y +z = 5

Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 18 — Método de eliminação de Gauss 2015 12 / 23

Page 11: Introdução à Programação Aula 18 Método de eliminação de Gausspbv/aulas/ipm/teorica-18.pdf · Nesta aula 1 Sistemas de equações lineares 2 Método de eliminação de Gauss

Resolução usando eliminação de Gauss

2x +y −z = 8 (L1)

12y +1

2z = 1 (L2)2y +z = 5 (L3)

Eliminar y em (L3) usando (L2):

(−4×) 12y +1

2z = 1+ 2y +z = 5

0y −z = 1

Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 18 — Método de eliminação de Gauss 2015 13 / 23

Page 12: Introdução à Programação Aula 18 Método de eliminação de Gausspbv/aulas/ipm/teorica-18.pdf · Nesta aula 1 Sistemas de equações lineares 2 Método de eliminação de Gauss

Resolução usando eliminação de Gauss

Ficamos com um sistema triangular superior:2x +y −z = 8 (L1)

12y +1

2z = 1 (L2)−z = 1 (L3)

Podemos obter a solução por substituição:

z = 1/(−1) = −1

y =(1− 1

2z)/(1

2

)= 3

x = (8− y + z)/2 = 2

Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 18 — Método de eliminação de Gauss 2015 14 / 23

Page 13: Introdução à Programação Aula 18 Método de eliminação de Gausspbv/aulas/ipm/teorica-18.pdf · Nesta aula 1 Sistemas de equações lineares 2 Método de eliminação de Gauss

Implementar o método de eliminação de Gauss

Representamos um sistema com n equações a n incógnitas por umamatriz de n linhas e n + 1 colunas (coeficientes e termosindependentes).

2x +y −z = 8−3x −y +2z = −11−2x +y +2z = −3

−→

2 1 −1 8−3 −1 2 −11−2 1 2 −3

Em Python: uma lista de listas.

[[2.0, 1.0, -1.0, 8.0],[-3.0, -1.0, 2.0, -11.0],[-2.0, 1.0, 2.0, -3.0]]

Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 18 — Método de eliminação de Gauss 2015 15 / 23

Page 14: Introdução à Programação Aula 18 Método de eliminação de Gausspbv/aulas/ipm/teorica-18.pdf · Nesta aula 1 Sistemas de equações lineares 2 Método de eliminação de Gauss

Eliminação de uma incógnita

A0,0 . . . A0,i . . . A0,n−1 A0,n

. . ....

......

Ai,i . . . Ai,n−1 Ai,n...

......

An−1,i . . . An−1,n−1 An−1,n

Para j de i + 1 até n − 1:

nova linha j = linha j −Aj,i

Ai,i× linha i

Ai,i designa-se por elemento pivot.

Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 18 — Método de eliminação de Gauss 2015 16 / 23

Page 15: Introdução à Programação Aula 18 Método de eliminação de Gausspbv/aulas/ipm/teorica-18.pdf · Nesta aula 1 Sistemas de equações lineares 2 Método de eliminação de Gauss

Substituição num sistema triangular

A0,0 . . . . . . . . . A0,n−1 A0,n

. . .Ai,i . . . Ai,n−1 Ai,n

. . ....

An−1,n−1 An−1,n

Para i de n − 1 até 0:

xi =(

Ai,n −∑n−1

j=i+1 Ai,j xj

)/Ai,i

Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 18 — Método de eliminação de Gauss 2015 17 / 23

Page 16: Introdução à Programação Aula 18 Método de eliminação de Gausspbv/aulas/ipm/teorica-18.pdf · Nesta aula 1 Sistemas de equações lineares 2 Método de eliminação de Gauss

Implementação em Python

def resolve(A):triangular(A)x = substitui(A)return x

Duas funções auxiliares:triangular(A) transforma a matriz de coeficientes em triangular

superior;substitui(A) efectua substituições para obter o vetor solução.

Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 18 — Método de eliminação de Gauss 2015 18 / 23

Page 17: Introdução à Programação Aula 18 Método de eliminação de Gausspbv/aulas/ipm/teorica-18.pdf · Nesta aula 1 Sistemas de equações lineares 2 Método de eliminação de Gauss

Transformar sistema em triangular superior

def triangular(A):"Transforma matriz A em triangular superior."n = len(A) # n equações e incógnitasfor i in range(n):

# eliminar incógnita ipivot = A[i][i]for j in range(i+1, n): # linhas

m = -A[j][i]/pivotfor k in range(i, n+1): # colunas

A[j][k] += m*A[i][k]

Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 18 — Método de eliminação de Gauss 2015 19 / 23

Page 18: Introdução à Programação Aula 18 Método de eliminação de Gausspbv/aulas/ipm/teorica-18.pdf · Nesta aula 1 Sistemas de equações lineares 2 Método de eliminação de Gauss

Substituições

def substitui(A):"Substuições duma matriz triangular superior."n = len(A) # n equações e incógnitasx = n*[0] # vector de n zerosfor i in range(n-1, -1, -1):

# substituir incógnita is = sum([A[i][j]*x[j]

for j in range(i+1,n)])x[i] = (A[i][n] - s)/A[i][i]

return x

Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 18 — Método de eliminação de Gauss 2015 20 / 23

Page 19: Introdução à Programação Aula 18 Método de eliminação de Gausspbv/aulas/ipm/teorica-18.pdf · Nesta aula 1 Sistemas de equações lineares 2 Método de eliminação de Gauss

Exemplo de execução

>>> coefs = [[2.0,1.0,-1.0,8.0],[-3.0,-1.0,2.0,-11.0],[-2.0,1.0,2.0,-3.0]]

>>> resolve(coefs)[2.0, 3.0, -1.0]

Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 18 — Método de eliminação de Gauss 2015 21 / 23

Page 20: Introdução à Programação Aula 18 Método de eliminação de Gausspbv/aulas/ipm/teorica-18.pdf · Nesta aula 1 Sistemas de equações lineares 2 Método de eliminação de Gauss

Quando o pivot é zero

>>> coefs = [[2.,1.,-1.,8.],[-3.,-1.5,2.,-11.],[-2.,1.,2.,-3.]]

>>> resolve(coefs)ZeroDivisionError

Trocando a 2a e 3a linhas:

>>> coefs = [[2.,1.,-1.,8.],[-2.,1.,2.,-3.],[-3.,-1.5,2.,-11.]]

>>> resolve(coefs)[4.25, 1.5, 2.0]

Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 18 — Método de eliminação de Gauss 2015 22 / 23

Page 21: Introdução à Programação Aula 18 Método de eliminação de Gausspbv/aulas/ipm/teorica-18.pdf · Nesta aula 1 Sistemas de equações lineares 2 Método de eliminação de Gauss

Sumário

Implementação direta do método de eliminação de GaussAlgoritmo imperativo: modifica a matriz de coeficientesPode não encontrar a solução (falta a escolha de pivot)Exercícios (folha prática):

1 efectuar a escolha de pivot2 detectar se não existe solução (sistema indeterminado ou

impossível)3 calcular o determinante4 calcular a inversa duma matriz

Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 18 — Método de eliminação de Gauss 2015 23 / 23