cálculo numérico - WWW2

Propaganda
CÁLCULO NUMÉRICO
Prof. Dr Rogério de Aguiar
Departamento de Matemática
CCT - UDESC - JOINVILLE
Email: [email protected]
Home Page: www2.joinville.udesc.br/ ~dma2ra/
Joinville, 16 de Fevereiro de 2009
Sumário
1 ALGORITMOS BÁSICOS
1.1 Precisão de Máquina . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Algorítmos Básicos . . . . . . . . . . . . . . . . . . . . . . . . . .
2 ERROS
2.1 Sistemas de Numeração . . .
2.2 Aritmética de Ponto flutuante
2.3 Representação Binária . . . .
2.4 Tipos de Erros . . . . . . . .
2.5 Cálculo do Erro . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3 SISTEMAS LINEARES
3.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1 Sistemas Lineares . . . . . . . . . . . . . . . . . . .
3.1.2 Normas . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Tipos de Algorítmos . . . . . . . . . . . . . . . . . . . . .
3.2.1 Método Direto . . . . . . . . . . . . . . . . . . . .
3.2.2 Método Iterativo . . . . . . . . . . . . . . . . . . .
3.2.3 Tipos de Erros computacionais nos algorítmos . .
3.2.4 Etapas da Resolução de um sistema Linear . . . .
3.3 Estrutura dos Algoritmos Calculadores . . . . . . . . . . .
3.4 Método de Eliminação de Gauss . . . . . . . . . . . . . .
3.4.1 Introdução . . . . . . . . . . . . . . . . . . . . . .
3.4.2 Algoritmo básico de Gauss . . . . . . . . . . . . .
3.4.3 Estratégia de Pivotamento . . . . . . . . . . . . .
3.4.4 Algoritmo de Gauss com pivotamento . . . . . . .
3.4.5 Coondicionamento de um sistema . . . . . . . . . .
3.4.6 Estabilidade e Exatidão . . . . . . . . . . . . . . .
3.4.7 Método de Eliminação de Gauss com Pivotamento
finamento . . . . . . . . . . . . . . . . . . . . . . .
3.5 Métodos Iterativos . . . . . . . . . . . . . . . . . . . . . .
3.5.1 Critério de Linhas . . . . . . . . . . . . . . . . . .
3.5.2 Critério de Sassenfeld . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
e
.
.
.
.
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
Re. . .
. . .
. . .
. . .
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
2
3
8
8
10
11
13
13
15
15
15
17
19
19
19
19
19
20
22
22
24
25
26
28
29
29
31
36
40
Capítulo 1
ALGORITMOS BÁSICOS
1.1
Precisão de Máquina
PRECISÃO DE MÁQUINA
1) Exercícios:
a) Execute o somatório:
30000
X
S=
xi
i=1
para xi = 0.5 e xi = 0.11, usando computador ( ou calculadora) e a linguagem de sua preferência
b) Escreva e xecute um programa na linguagem de sua preferência para obter
à n !
X
D = 10000 −
x
i=1
i) para n = 100000 e x = 0.1
ii) para n = 80000 e x = 0.125
Que conclusões voce pode tirar?
Precisão de máquina: A precisão de máquina é definida como sendo o menor
número positivo em aritmética de ponto flutuante, , tal que (1 + ) > 1. Este
número depende totalmente do sistema de representação da máquina: base
numérica, total de dígitos na mantissa, forma como são realizadas as operações
e do compilador utilizado. É importante conheceros a precisção de máquina
porque em vários algoritmos precisamos fornecer como dado de entrada um
valor positivo, próximo de zero para ser usado em testes de comparação com
zero. O algoritmo a seguir estima a precisão de máquina:
Passo 1
A=1
2
s=1+A
Passo 2
A = A/2
s=1+A
Passo 3
Faça prec = A ∗ 2
Imprima prec
i) Teste este algoritmo usando uma linguagem de sua escolha ( ou matlab).
Declare as variáveis do programa em precisão simples e execute o programa; em
seguida declare as variáveis em precisão dupla e execute novamente o programa.
Compare os valores obtidos com o valor obtido ao se dar o comando eps no
Matlab
ii) Interprete o passo 3 do algoritmo, isto é, por que a aproximação para
prec é escolhida como sendo o dobro do último valor de A obtido no passo 2?
1.2
Algorítmos Básicos
1) Produto escalar de dois vetores
Dados v e w vetores do Rn , o produto interno c = v t w é obtido através
do algorítmo
c=0
f or i = 1 : n
c = c + v(i) ∗ w(i)
end
Exercicio: Escreva um algoritmo para realizar uma operação do tipo :
ax + y, denominada saxpy (alpha x plus y) onde α ∈ R, x, y ∈ R.
2) Produto de matriz por vetor
O produto entre uma matriz Am×n por um vetor vn×1 (w = A · v) pode
ser realizado por linhas ou por colunas:
i) Versão linhas
f or i = 1 : m
s=0
f or j = 1 : n
s = s + A(i, j) ∗ v(j)
end
w(i) = s
end
ii) Versão colunas
f or j = 1 : n
f or i = 1 : m
w(i) = w(i) + A(i, j) ∗ v(j)
end
3
end
Exercicio: Estude os dois algoritmos e verifique a diferença entre eles. Faça
um programa para cada uma das versões acima e efetue o produto de uma matriz
de ordem 200×50 por um vetor de ordem 50×1. Efetue a soma das coordenadas
do vetor resultante e imprima o resultado.
3) Produto de matrizes
Considere as matrizes Am×p e Bp×n . Dois possíveis algoritmos para obter o
produto C = A ∗ B são:
i) f or i = 1 : m
f or j = 1 : n
s=0
f or k = 1 : p
s = s + A(i, k) ∗ B(k, j)
end
C(i, j) = s
end
end
ii) f or j = 1 : n
f or k = 1 : r
f or i = 1 : m
C(i, j) = C(i, j) + A(i, k) ∗ B(k, j)
end
end
end
Exercicio: Estude os dois algoritmos e verifique a diferença entre eles.
Faça um programa para cada uma das versões acima e efetue o produto de uma
matriz de ordem 100 × 50 por uma matriz de ordem 50 × 100. Efetue a soma
dos elementos da diagonal principal e imprima o resultado.
4) Solução de sistema linear para matriz triangular
Freqüentemente necessitamos resolver sistemas lineares onde a matriz
dos coeficientes é uma matriz triangular superior ou inferior. Abaixo fornecemos
alguns algorítmos para resolução de sistemas triangulares:
4.1) Sistema triangular inferior - Substituição direta
Considere
o sistema triangular inferior

a
x
= b1

11
1


 a21 x1 + a22 x2
= b2
..
.. ..

.
. .



an1 x1 + an2 x2 + ... + ann xn = bn
Algorítmo
i) Versão linhas
f or i = 1 : n (ídice das linhas)
s=0
f or k = 1 : (i − 1)
s = s + a(i, k) ∗ x(k)
4
end
x(i) =
(b(i)−s)
a(i,i)
ii) Versão coluna
f or j = 1 : n (índice das colunas)
b(j)
x(j) = a(j,j)
f or i = j + 1 : n (índice das equações)
b(i) = b(i) − a(i, j) ∗ x(j)
end
end
Podemos obter a solução x em cima do vetor b, ou seja, no final a solução
do sistema é o próprio vetor b, evitando que se crie um novo vetor x.
iii) Versão coluna com solução em b
f or j = 1 : n (índice das colunas)
b(j)
b(j) = a(j,j)
f or i = j + 1 : n (índice das equações)
b(i) = b(i) − a(i, j) ∗ x(j)
end
end
4.2) Sistema triangular superior - Retrossubstituição
Considere o sistema triangular superior

= b1
 a11 x1 + a12 x2 + a13 x3 + ......... + a1n xn



a22 x2 + a23 x3 + ......... + a2n xn
= b2
.
.
..
.. ...




ann xn = bn
i) Algoritmo 1
b(n)
xn = a(n,n)
f or k = n − 1 : 1
s=0
f or j = k + 1 : n
s = s + a(k, j) ∗ x(j)
end
x(k) = b(k)−s
a(k,k)
end
ii) Algoritmo 2
b(n)
xn = a(n,n)
f or k = n − 1 : 1
5
x(k) = b(k)
f or j = k + 1 : n
x(k) = x(k) − a(k, i) ∗ x(i)
end
x(k) =
x(k)
a(k,k)
end
Estude os dois algorítmos e responda: Qual dos dois algorítmos é mais eficiente? Porquê?
Implemente o mais eficiente dos dois algorítmos e resolva o seguinte sistema
triangular superior: Ax = y com A = [aij ]50×50 onde a(i, j) = i2 − 2 ∗ j ∗ i e
√
y(i) = i, i = 1, 2, ..., 50. Imprima o vetor solução.
5) Matriz Banda: Dizemos que Amxn é uma matriz banda superior com
amplitude p se aij = 0 para j − i > p e banda inferior com amplitude q se
aij = 0 para i − j > q.
Exercício: Escreva dois algorítmos (versão linha e versão coluna) para obter
o produto Av, onde Amxn é matriz banda conforme definiçao acima e vnx1.
O algoritmo deve ser escrito de modo a tirar proveito da estrutura especial da
matriz A.
6) Matriz tridiagonal: Dizemos que Anxn é matriz tridiagonal se aij = 0
para |i − j| > 1.
Exercício: Escreva dois algoritmos (versão linha e versão coluna) para obter
o produto Av, onde Anxn é matriz tridiagonal e vnx1 . O algoritmo deve ser
escrito de modo a tirar proveito da estrutura especial da matriz A.
7) Cálculo de exp(x): O objetivo é calcular o valor de ex pela fórmula de
taylor até ordem n em torno de zero:
x2 x3
x4
xn
+
+
+ .......... +
2!
3!
4!
n!
Exercício: Escreva um programa em uma linguagem de sua escolha para
obter a aproximação para exp(x) usando a fórmula de Taylor. O valor de x e
o número de termos da série, n, são dados de entrada deste programa. Calcule
exp(x) para vários de valores de x, inclusive valores negativos. Use valores de
acima de 100, tente para n=120,150,170,200
exp(x) ∼
=1+x+
8) Cálculo do valor numérico de um polinômio: em muitos problemas
numériocos necessita-se calcular o valor numérico de um polinômio avaliado em
um ponto x. Considere o polinômio
pn (x) = an xn + an−1 xn−1 + ..... + a2 x2 + a1 x + a0
6
(an 6= 0)
Para simplificar, estudaremso o processo analisando um polinômio de grau
4
p4 (x) = a4 x4 + a3 x3 + a2 x2 + a1 x + a0
(a4 6= 0)
i) uma maneira de calcular o valor de p4 (c) é usarmos diretamente a expressão de p4 , ou seja
p4 (c) = a4 c4 + a3 c3 + a2 c2 + a1 c + a0
(a4 6= 0)
ii) outra maneira de calcular o valor de p4 (c) é reescrevermos o polinômio
de outra forma:
p4 (x) = (((a4 x + a3 ) x + a2 ) x + a1 ) x + a0
conhecida como forma dos paeênteses encaixados.
Deve-se observar que o processo ii) utiliza um número de operações bem
menor que o processo i)
Vamos estabeler o algorítmo para calcular o valor de p4 (c) pelo processo ii):
= a4 x4 + a3 x3 + a2 x2 + a1 x + a0
(a4 6= 0)
Para calcular o valor de p4 (x) em x = c, basta fazer sucessivamente:
b4
b3
b2
b1
b0
=
=
=
=
=
a4
a3 + b4 c
a2 + b3 c
a1 + b2 c
a0 + b1 c
Portanto p4 (c) = b0 .
Exercícios
1) Escreva uma algoritmo para calcular o valor de pn (c) onde c, n, xi (i =
0, .., n),são dados de entrada.
Faça um programa e o execute para algun
polinômio de ordem maior ou igual que 6
2) Escreva um algoritmo para calcular o valor de p0n (c).
7
Capítulo 2
ERROS
Neste capítulo, chamamos atenção para o fato de que o conjunto dos números
representáveis em qualquer máquina é finito, e portanto discreto, ou seja não é
possível representar em uma máquina todos os números de um dado intervalo
[a, b]. A implicação imediata desse fato é que o resultado de uma simples operação aritmética ou o cálculo de uma função, realizadas com esses números,
podem conter erros. A menos que medidas apropriadas sejam tomadas, essas
imprecisões causadas, por exemplo, por simplificaçãoo no modelo matemático
(algumas vezes necessárias para se obter um modelo matemático solúvel); erro
de truncamento (troca de uma série infinita por uma finita); erro de arredondamento (devido a própria estrutura da máquina); erro nos dados (dados imprecisos obtidos de experimentos, ou arredondados na entrada); etc, podem
diminuir e algumas vezes destruir, a precisão dos resultados, mesmo em precisão dupla.
Assim, nosso objetivo aqui será o de alertar o leitor para os problemas que
possam surgir durante a resoluçãoo de um problema, bem como dar subsídios
para evitá-los e para uma melhor interpretação dos resultados obtidos.
2.1
Sistemas de Numeração
Em princípio, a representaçãoo de um número inteiro no computador não apresenta qualquer dificuldade.
Qualquer computador trabalha internamente com uma base fixa β, onde β
é um inteiro, β ≥ 2.
Assim dado um número N 6= 0, ele possui uma única representação da forma
N = ±(an an−1 ....a2 a1 a0 , a−1 a−2 ....a−n )β
onde a±i ∈ {dı́gitos} . Podemos escrever N na base β na forma polinomial
N = ±(an β n +an−1 β n−1 +....+a2 β 2 +a1 β 1 +a0 β 2 , a−1 β −1 +a−2 β −2 +....+a−n β −n )
8
Sistema
β=2
Sistema
β=8
Sistema
β = 10
Sistema
β = 12
Sistema
β = 16
Binário
Dı́gitos = {0, 1}
Octal
Dı́gitos = {0, 1, 2, 3, 4, 5, 6, 7}
Decimal
Dı́gitos = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
Duodecimal
Dı́gitos = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B}
Hexadecimal
Dı́gitos = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F }
Exemplos:
Conversão de Base 2 para base 10
(0001)2 = 0 ∗ 23 + 0 ∗ 22 + 0 ∗ 21 + 1 ∗ 20 = (1)10
(1000)2 = 1 ∗ 23 + 0 ∗ 22 + 0 ∗ 21 + 0 ∗ 20 = (8)10
(10, 1)2 = 1 ∗ 21 + 0 ∗ 20 + 1 ∗ 2−1 = 2 + 0 + 0.5 = (2.5)10
(11)2 = 1 ∗ 21 + 1 ∗ 20 = (2)10
(1, 111)2 = 1 ∗ 20 + 1 ∗ 2−1 + 1 ∗ 2−2 + 1 ∗ 2−3 = (1.875)10
Conversão de Base 10 para base 2 Método da Divisão - Números Inteiros
(N )10 = (1rn−1 ...r3 r2 r1 )2
Exemplos:
(18)10 = (10010)2
18
2 = 9, r1 = 0
9
2 = 4, r2 = 1
4
2 = 2, r3 = 0
2
2 = 1, r4 = 0
Método da Multiplicação - Números Fracionários
2 ∗ N = N1
2 ∗ bN1 c = N2
2 ∗ bN2 c = N3
..
.
2 ∗ bNn c = I (onde I é um número inteiro e bNi c é a parte fracionária de Ni )
9
(N )10 = (0, [N1 ] [N2 ] [N2 ] ...I) , onde
Exemplo:
(0, 1875)10 = (0, 0011)2
0, 1875
0, 375
0, 75
×2
×2
×2
0, 3750
0, 75
1, 5
(0, 6)10 = 0, 100110011001........
0, 6
0, 2
0, 4
0, 8
×2
×2
×2
×2
1, 2
0, 4
0, 8
1, 6
[Ni ] é a parte inteira de Ni .
0, 5
×2
1, 00
0, 6
×2
1, 2
0, 2
×2 ........
0, 4
Se o número é formado de parte inteira e fracionária, faz-se a conversão da
parte inteira pélo método da multiplicação e separadamente da parte fracionária
pelo método da multiplicação, depois junta-se a duas partes.
Exemplo;
(15, 16)10 = 1111, 0010100011110101110000101000111101011100.
Parte inteira
(15)10 = (1111)2
15
2 = 7, r1 = 1
7
2 = 3, r2 = 1
3
2 = 1, r3 = 1
Parte Fracionária
(0, 16)10 = 0, 0010100011110101110000101000111101011100....
0, 16
×2
0, 32
0, 96
×2
1, 92
0, 76
×2
1, 52
0, 32
×2
0, 64
0, 92
×2
1, 84
0, 52
×2
1, 04
0, 64
×2
1, 28
0, 84
×2
1, 68
0, 04
×2
0, 08
0, 28
0, 56
0, 12 0, 24 0, 48
×2
×2
×2
×2
×2
0, 56
1, 12
0, 24 0, 48 0, 96
0, 68
0, 36
0, 72 0, 44 0, 88
×2
×2
×2
×2
×2
1, 36
0, 72
1, 44 0, 88 1, 76
0, 08
×2
.......
0, 16
Observe que a dízima 00101000111101011100 se repete
2.2
Aritmética de Ponto flutuante
Usuarios Humanos : Trabalham e pensam em sistema de base 10
Computador: Efetua armazenamento e operações aritméticas no sistema de
base 2
Representação em ponto flutuante
N = ±0.d1 d2 ....dt ∗ β e
10
onde
di = dígitos da mantissa 0 ≤ di ≤ β − 1, di 6= 0 (Sistema normalizado)
β =base
e = expoente , e ∈ [−M, M ]
Exemplo
β = 10
t=3
e ∈ [−5, 5]
N = ±0.d1 d2 d3 ∗ 10e
(d1 6= 0)
Menor número representado neste sistema
n = 0.100 ∗ 10−5
N = 0.999 ∗ 105
Neste caso
Número maior que 99900 provoca overflow
Número menor que 10−6 provoca underflow
O valor mínimo (em valor absoluto) que é possível representar no sistema
de ponto flutuante é designado por underflow
O valor máximo (em valor absoluto) que é possível representar no sistema
de ponto flutuante é designado por overflow
No decorrer da execução de um algoritmo se o overflow ocorre verifica-se um
erro fatal responsável pelo fim precipitado da
execução
Não confundir underflow com precisão de máquina ( maq ), embora ambos
sejam pequenos, a precisão máquina depende do número de dígitos na mantissa
enquanto que o underflow é determinado pelo número de dígitos no campo do
expoente (e)
Num sistema de ponto flutuante temos 0 < underflow < maq < overflow
2.3
Representação Binária
Os computadores modernos utilizam apenas o sistema binário, isto é, todas as
informações armazenadas ou processadas no computador usam apenas DUAS
grandezas, representadas pelos algarismos 0 e 1. Essa decisão de projeto devese à maior facilidade de representação interna no computador, que é obtida
através de dois diferentes níveis de tensão. Havendo apenas dois algarismos,
portanto dígitos binários, o elemento mínimo de informação nos computadores
foi apelidado de bit (uma contração do inglês binary digit).
Armazenamento no computador
11
O armazenamento de números no computador é feito armazenando-se o
número no sistema binário. Portanto o computador armazena e efetua cálculo
no sistema de base dois (β = 2). O armazenamento de cada dígito é chamado
BIT (binary digit).
1 BYTE = 8 bits
Exemplo: Computador de 32 Bits ( 4 BYTES)
Para cada número existem 32 posições disponiveis que devem armazenar um
sequência de zeros e ums
Para o sinal temos:
BIT =0 , sinal positivo (+)
BIT=1, sinal negativo (-)
Exemplo: Máquina de Calcular
β = 2 ⇒ di ∈ {0, 1}
t = 10 ⇒ 10 Dez dígitos na mantissa
M = 15 ⇒ exp ∈ [−15, 15] (em base10) ⇒ exp ∈ [−1111, 1111] (Em base 2)
Representação interna de um número nessa calculadora
Exemplo: (25)10 = (11001)2 = 0, 11001 ∗ 25 = 0, 11001 ∗ 2101
Maior valor representado nesta calculadora
0, 1111111111 ∗ 21111 = (32736)10
12
Menor valor representado nesta calculadora
−0, 1111111111 ∗ 21111 = − (32736)10
2.4
Tipos de Erros
ERROS INERENTES: os erros inerentes aparecem na criação ou simplificação
de um modelo matemático de determinado sistema, ou ainda nas medidas em
geral
ERROS DE DISCRETIZAÇÃO: Os erros de discretização, ou aproximação,
ou truncamento são os erros cometidos quando se substitui qualquer processo
infinito por um processo finito ou discreto. Exemplo:
e=
∞
X
1
n!
n=0
Exercicio: a) Calcule o valor de pela série acima usando 3,10,50 e 1000 termos
da série
b) Obtenha o valor de e através de algum programa (
ou calculadora), considere este valor de e como sendo exato e calcule os erros
relativo e absoluto em relação aos obtidos pelo seu programa
ERROS DE ARREDONDAMENTO: Surgem quando trabalhamos com máquinas
digitais para representar os números reais. Em geral trabalha-se com arredondamento para o número de ponto flutuante mais próximo ou com arredondamento
por falta
2.5
Cálculo do Erro
Erro Absoluto: é a diferença entre o valor exato de um número x e de seu valor
aproximado x
EA = x − x
Erro Relativo: O erro relativo é definido como sendo o erro absoluto dividido
pelo valor aproximado
EA
x−x
ER =
=
x
x
O Erro relativo indica um percentual de erro
Exemplo: Tomando π ∈ (3.14, 3.15) como sendo aproximação de π temos
|EA | = |π − π| < 0.01
Exemplo: Seja x = 2112, 9 aproximação de um número x tal que |EAx | <
0.1, ou seja, x ∈ (2112.8, 2113)
Seja y representado por y = 5.3 tal que |EAy | < 0.1, ou seja, y ∈ (5.2, 5.4) .
Observe que os erros absolutos têm o mesmo limitante superior. Podemos dizer
que têm a mesma precisão? Calculando o erro relativo
13
|ERx | =
|ERy | =
|EAx |
0.1 ∼
<
= 4.7 ∗ 10−5
| x|
2112.9
|EAy |
0.1 ∼
<
= 0.02
| y|
5.3
Logo o valor de x é representado com maior precisão que o número y.
Vamos estudar três tipos de erros:
14
Capítulo 3
SISTEMAS LINEARES
3.1
Introdução
Trataremos agora de resolver sistemas lineares, que por simplicidade chamaremos apenas SELAS, usando métodos numéricos de fácil implementação computacional. Não nos preocuparemos com o formalismo excessivo por tratar-se
de um curso básico e qualquer aprofundamento teórico será remetido a bibliografia conveniente.
Todo o nosso desenvolvimento será voltado à resolução de sistemas de ordem
n x n , ou seja, a matriz A dos coeficientes é uma matriz quadrada, pois o caso
geral onde A é de ordem m x n pode ser reduzido ao caso n x n
Os métodos numéricos para resolução de sistemas de equações visam obter
uma solução do sistema, mesmo que este tenha infinitas soluções, e sendo assim
só nos interessará sistemas que possuam solução. Os sistemas que não possuem
solução podem ser identificados através dos métodos numéricos mas nenhuma
ênfase será dado a este caso.
Vamos ocupar-nos com duas classes gerais de algoritmos para resolução do
sistema Ax = y, onde A ∈ M (n, n)) e x , y são vetores de dimensão n, reais ou
complexos.
3.1.1
Sistemas Lineares
Uma equação linear é uma equação da forma
a1 x1 + a2 x2 + a3 x3 + ...... + an xn = b
na qual a1 , a2 , a3 , ...., an são os respectivos coeficientes das variáveies x1 , x2 , x3 , ...., xn
e b é o termo independente. Os números a1 , a2 , a3 , ...., an e o termo independente b geralmente são números conhecidos e as variáveis x1 , x2 , x3 , ...., xn são
as incógnitas.
Os valores das variáveis que transformam uma equação linear em uma identidade, isto é, que satisfazem a equação, constituem sua solução. Esses valores
15
são denominados raízes das equações lineares.
A um conjunto de equações lineares se dá o nome de sistema de equações
lineares e tem a seguinte representação:
a11 x1 + a12 x2 + a13 x3 + ...... + a1n xn
a21 x1 + a22 x2 + a23 x3 + ...... + a2n xn
..
..
..
..
.
.
.
.
am1 x1 + am2 x2 + am3 x3 + ...... + amn xn
=
=
..
.
b1
b2
..
.
= bm
Os valores das variáveis que transformam simultaneamente as equações de
um sistema de equações lineares em uma identidade, isto é, que satisfazem cada
equação do sistema constituem sua solução.
Diz-se que dois sistemas de equações lineares são equivalentes quando admitem a mesma solução.
Exemplo 1 Os sistemas
2x + 3y = 11
−x + y = −3
e
10x − 2y = 38
−3x + 5y = −7
são equivalentes pois possuem as mesmas soluções, x = 4 e y = 1
Quanto as soluções, três casos podem ocorrer:
1) O sistema possui uma única solução. Neste caso dizemos que os sistema
é compatível e determinado
2) O sistema possui infinitas soluções. Neste caso dizemos que o sistema é
compatível e indeterminado.
3) O sistema não possui nenhuma solução. Neste caso dizemos que o sistema
é incompatível.
Os algoritmos desenvolvidos para sistemas lineares são feitos para sistemas
de orden n×n, ou seja, para sistermas onde a matriz dos coeficientes é quadrada.
Se o sistema não for quadrado teremos dois casos:
Sistermas Sobredeterminados: Neste caso o sistema possui um número de
equações maior que o número de varáveis, ou seja, a matriz dos coeficientes é
m × n com m > n. Para resolver numericamente este tipo de sistema devemos escolher n equações deste sistema e resolver o sistema n × n correspondente. Obtida a solução, sibstituimos a solução encontrada nas m − n equações
restantes, se a solução encontrada satisfizer as m − n equações, a solução encontrada é de fato a solução do sistema m × n. Se a solução encontrada não
satisfizer as m − n equações restantes o sistema será incompatível ( não possuirá
solução)
Sistemas Subdeterminados: Neste caso o sistema possui um número de
equações menor que o número de varáveis, ou seja, a matriz dos coeficientes
é m × n com m < n. Um sistema deste tipo terá infinitas soluções ou será
incompatível. Para resolver numericamente este tipo de sistema devemos escolher n − m variáveis do sistema e atribuir valores a estas variáveis ( na prática
16
esta atribuição irá depender do problema prático que se deve resolver) e resolver
numericamente o sistema n × n resultante. A solução do sistema m × n será a
solução encontrada numericamente junto com os valores atribuidos às variáveis.
3.1.2
Normas
Definição 2 Uma norma ( ou norma vetorial) em Rn é uma função que para
cada x ∈ Rn associa um número real kxk , chamado norma de x, tal que as
seguintes propriedades são satisfeitas para todo x, y ∈ Rn e α ∈ R
i) kxk > 0 se x 6= 0 e kxk = 0 se e somente se x = 0 (positiva definida)
ii) kαxk = |α| kxk (homogeneidade absoluta)
iii) kx + yk ≤ kxk + kyk (desigualdade triangular)
Exemplos de normas: Seja x ∈ Rn
1) Norma Euclidiana
kxk2 =
à n
X
i=1
2
|xi |
! 12
1
= (xT x) 2
A discitância entre dois vetores x e y pertencentes a Rn é dada por:
v
u n
uX
|xi − yi |2
d(x, y) = kx − yk2 = t
i=1
Teorema 3 ( Desigualdade de Cauchy-Shwartz) Para todo x , y ∈ Rn :
¯ n
¯ Ã n
! 12 Ã n
! 12
¯X
¯
X
X
¯
¯
2
2
xi yi ¯ ≤
|xi |
|yi |
¯
¯
¯
i=1
i=1
i=1
ou em termos produto escalar e normas:
|x · y| ≤ kxk2 kyk2
2) Norma um
kxk1 =
3) Norma infinito
n
X
i=1
|xi |
kxk∞ = max |xi |
1≤ i ≤ n
4) Norma p: Para qualquer número real p ≥ 1
17
kxkp =
à n
X
i=1
p
|xi |
! p1
Exercício: Faça o gráfico do conjunto de pontos x do plano cartesiano R2
que satisfazem:
a) kxkp = 1, para p = 1, 3, 2, 4, 5, 6, 7, 8 e b) kxk∞ = 1
Definição 4 Uma norma ( ou norma matricial) em Rn×x é uma função que
para cada A ∈ Rn×n associa um número real kAk , chamado norma de A, tal
que as seguintes propriedades são satisfeitas para todo x, y ∈ Rn e α ∈ R
i) kAk > 0 se x 6= 0 e kAk = 0 se e somente se A = 0 (positiva definida)
ii) kαAk = |α| kAk (homogeneidade absoluta)
iii) kA + Bk ≤ kAk + kBk (desigualdade triangular)
iv) kABk ≤ kAk kBk
Exemplos de normas matriciais:
1) Norma de Frobenius
 12

n
n X
X
¯ 2¯
¯aij ¯
kAkF = 
i=1 j=1
2)
kAk1 =
3)
kAk∞
4)
max
1≤ j ≤n
à n
X
i=1
!
|aij |


n
X
= max 
|aij |
1≤ i ≤n
kAkP = max
x 6= 0
para p = 2 a norma
kAk2 = max
x 6= 0
é chamada norma espectral.
j=1
kAxkp
kxkp
kAxk2
kxk2
Observação 5 Defina
kAkmax =
max
1≤ i, j ≤n
|aij |
Claramente esta função satisfaz as propriedades i),ii),iii) da norma matricial
mas não satisfaz a propriedade iv, portanto esta função não é uma norma matricial. Mostre atavés de um exemplo que esta função não satisfaz a propriedade
iv) da norma matricial.
18
3.2
3.2.1
Tipos de Algorítmos
Método Direto
Um método é dito direto quando a solução exata x é obtida realizando-se um
número finito de operações aritméticas em R. O algoritmos diretos servem para
implementar computacionalmente os métodos diretos.
Exemplo: Método de Cramer , Método de Eliminação de Gauss
3.2.2
Método Iterativo
Um método é dito iterativo ( iteratio vem do grego e quer dizer repetição)
quando a solução x é obtida como limite de uma seqüência de aproximações
sucessivas x1 , x2, x3 , ...., xn , ...
Exemplo: Método de Gauss Seidel
Método de Jacobi
3.2.3
Tipos de Erros computacionais nos algorítmos
Algoritmos Diretos
Nos algoritmos diretos e erro total é dado pôr
Etotal = Erro de Entrada + Erro de aritmética
Neste caso o Etotal é devido ao ERRO DE ARREDONDAMENTO.
Algoritmos Iterativos
Tal como nos algoritmos diretos, nos algoritmos iterativos também cometemos erros de entrada e os erros de aritmética. Há ainda nos métodos iterativos
o erro de discretização, ou seja, vamos truncar (cortar) a seqüência infinita
(unknown char)xi ý após n iterações. Assim o erro total é dado pôr:
Etotal = Erro de arredondamento + erro de truncamento
3.2.4
Etapas da Resolução de um sistema Linear
As etapas que devem ser seguidas para resolução de um SELA são:
1) Descomplexificação
2) Estruturação
3) Cálculo
Descomplexificação
Seja o sistema Ax = y com A e y de componentes complexos. Fazemos
A = A0 + iA00
onde i2 = −1, A0 e A00 tem componentes reais.
Fazemos também x = x0 +x00 e y = y0 + y00 , onde x0 , x00 ,y0 e y00 tem
componentes reais. Dai o sistema descomplexificado fica em forma matricial da
seguinte maneira:
19
·
A0
A00
−A00
A0
¸·
¸ · 0¸
x0
y
= 00
x00
y
que é um sistema de 2nx2n com componentes reais
Exemplo. Seja o sistema complexo:
·
¸· ¸ · ¸
5 − 6i −2 + 2i x1
1
=
−2 + 2i
3+i
0
x2

 0   
5 −2 6 −2
x1
1
−2 3 −2 −1 x02  0

  =  
−6 2
5 −2 x001  0
2
1 −2 3
0
x002
Exercício. Descomplexifique os sistemas:
a)
·
¸· ¸ · ¸
1 − 2i i x1
i
=
−i
0 x2
1

  

1 2 −i x1
2−i
2 0 i  x2  = i − 1
i 0 1
i+1
x3
3.3
Estrutura dos Algoritmos Calculadores
Veremos agora a estrutura dos algoritmos direto e iterativo. A estrutura que
apresentaremos para o método direto é a estrutura do método de eliminação
de Gauss e a estrutura do método iterativo será a estrutura dos método de
Gauss-Jacobi e Gauss-Seidel.
a) Método direto sem refinamento
20
b) Método direto com refinamento
b) Método iterativo
21
Figura 3.1:
3.4
3.4.1
Método de Eliminação de Gauss
Introdução
O método direto mais conhecido e mais usado para resolução de SELA denso
de porte pequeno a médio é o método de eliminação de Gauss. Pôr sistemas de
pequeno porte entende-se uma ordem até 30 e para médio porte podemos ter
sistemas de ordem até 50.
Vamos considerar o sistema Ax = y onde A ∈ Rnxn e x, y Rn . Vamos
calcular a solução de Ax = y em duas etapas:
1) Triangularização.
Consiste em transformar a matriz A numa matriz triangular superior mediante
um número finito de operações elementares linha. As operações consideradas
serão as seguintes: a) Li ↔ Lj , permutação das linhas Li e Lj
b) Li → kLi , substituição da linha Li pela linha kLi onde k ∈ R
c) Li → Li + kLj , substituição da linha Li pela linha Li mais a linha kLj
Computacionalmente usaremos somente a operação c) na forma Li → Li + mLj
onde m será chamado de multiplicador e a linha Lj será chamada linha de apoio.
O elemento da linha de apoio que está na diagonal será chamado de pivô.
2) Retrossubstituição
Consiste no cálculo das componentes de x, solução de Ax = y, a partir da solução
imediata do último componente de x e então substituirmos regressivamente nas
equações anteriores.
Exemplo.
22
Sejao sistema
3x1 + 2x2 + x4
=
3



9x1 + 8x2 − 3x3 + 4x4 =
6
−6x
+
4x
−
8x
=
−16

1
2
3


3x1 − 8x2 + 3x3 − 4x4 = 18
Neste caso
 temos



3
2
0
1
3
9
 6 
8 −3 4 


A= 
e
y=
−6 4 −8 0 
−16
3 −8 3 −4
18
Considere
agora
a
matriz
ampliada
do
sistema


3
2
0
1 |
3
9
8 −3 4 |
6 


−6 4 −8 0 | −16
3 −8 3 −4 | 18
Transformaremos agora matriz A em uma matriz triangular superior sendo
que as operações que serão usadas para modificar a matriz A serão aplicadas em
toda a matriz ampliada. Nosso objetivo final será obter uma matriz ampliada
na forma:


b11 b12 b13 b14 | z1
 0 b22 b23 b24 | z2 


0
0 b33 b34 | z3 
0
0
0 b44 | z4
Para chegarmos a uma matriz nesta forma faremos a triangulação zerando
os elementos da coluna que estão abaixo do pivô, sendo assim num primeiro
passo transformaremos os elemento a21 , a31 , a41 em zero. Num segundo passo
transformaremos os elementos a32 , a42 em zero e assim por diante até obtermos
nossa matriz triangularizada.
Continuando nosso exemplo temos então que nesse primeiro passo a linha de
apoio será a linha L1 e o pivôserá o elemento a11 = 3: 
3
2
0
1 |
3
0

L2 → L2 + −9
2
−3
1
|
−3
3 L1


−(−6)

0
8
−8 2 | −10
L3 → L3 + 3 L1
0 −10 3 −5 | 15
L4 → L4 + −3
3 L1
Observe que o multiplicador não é escolhido aleatoriamente e sim calculado
para cada elemento que esta sendo zerado, temos então que para anular o elemento a12 o multiplicador é calculado da forma m12 = −a12 / pivô e neste caso
m12 = −9/3. Para o elemento a13 temos m13 = −(−6)/3 e para o elemento a14
temos m14 = −3/3. Assim a regra geral para o multiplicador é:
multiplicador = - (
elemento que vai ser zerado) / pivô
Continuando a triangulação temos então nesse segundo passo que a linha de
apoio é a linha L2 e o pivô será o elemento a22 = 2:
23


3 2
0
1 | 3
0 2 −3
1 | −3



0
0
4
−2
| 2
L3 → L3 + (−8)
L
1
2
0 0 −12 0 | 0
L4 → L4 + −(−10)
L1
2
No
terceiro
passo
a
linha
de
 apoio será a linha L3 eopivô será a33 = 4:

3 2 0
1 | 3
0 2 −3 1 | −3




0 0 4 −2 | 2 

0 0 0 −6 | 6
L4 → L4 + −(−12)
L1
4
Assim chegamos na matriz ampliada do sistema:

3x1 + 2x2 + 0x3 + x4
= 3



2x2 − 3x3 + x4
= −3
4x
−
2x
= 2

3
4


− 6x4 = 6
Calcularemos agora a solução do sistema 3.4.1 pois o sistema (3.4.1) é equivalente ao sistema (3.4.1) e portanto tem as mesmas soluções que o sistema (3.4.1):
1) Da última equação retiramos o valor de x4 diretamente.
−6x4 = 6 ⇒ x4 = −1
2) Substituindo o valor de x4 na terceira equação obtemos x3 .
4x3 − 2x4 = 2
4x3 − 2(−1) = 2 ⇒ x3 = 0
3) Substituindo x3 e x4 na segunda equação obtemos x2 .
2x2 − 3x3 + x4 = −3
2x2 − 3.0 + (−1) = −3 ⇒ x2 = −1
4) Substituindo x4 , x3 , x2 na primeira equação obtemos x1
3x1 + 2x2 + x4 = 3
3x1 + 2(−1) + (−1) = 3 ⇒ x1 = 2
Logoa solução
do sistema 3.4.1 será, na forma matricial, é

2
−1

x=
0
−1
Daremos agora o algoritmo básico do método de eliminação de Gauss que
contém as etapas de triangularização e retrossubstituição que são de fácil implementação computacional. As operações no algoritmo básico de Gauss são feitas
em precisão simples.
3.4.2
Algoritmo básico de Gauss
1) Entrada de dados
Leia n, aij , yi para i = 1(1)n; j = 1(1)n
2) Triangularização
Para k = 1(1)n − 1
Para i = k + 1(1)n
mik = −aik /akk
Para j = k + 1(1)n
24
aij = aij + mik .akj
fim j
yi = yi + mik .yk
fim i
fim k
3) Retrossubstituição
xn = yn /ann
Para k = n − 1(−1)1
xk = yk
Para i = k + 1(1)n
xk = xk − aki .xi
fim i
xk = xk /akk
fim k
4) Saida de dados
imprima “solução” ,
imprima xi , para i = 1(1)n
Observação: Observe que neste algoritmo não é previsto a divisão pôr zero no
cálculo do multiplicador, assim se ocorrer o elemento akk = 0 deve-se permutar
linhas antes de entrar com os dados da matriz A de modo a evitar divisão por
zero.
O algoritmo básico de Gauss pode apresentar problemas no que diz respeito
à exatidão dos resultados. Uma das causas mais comuns de erros é quando
ocorre termos um pivô muito pequeno e o multiplicador muito grande causando
o aumento do erro de arredondamento.
3.4.3
Estratégia de Pivotamento
Este método nada mais é do que o mesmo algoritmo de Gauss com uma troca
sistemática de linhas de modo a minimizar os erros de arredondamento e para
tal a escolha dos pivôs é feita de acordo com o esquema:
Primeiro pivô: Elemento de maior valor absoluto na coluna 1
a11 = max |ai1 | , i = 1, ...., n
Segundo pivô: Elemento de maior valor absoluto na coluna 2 da matriz resto
25
a22 = max |ai2 | ,i = 2, ...., n
Continuando o processo temos o k-ésimo pivô akk = max |aik | , i = k, ...., n
Exemplo.
Consideremos
agora somente a matriz A do sistema


2 30 11
10 1 7 
20 8 9
Neste caso devemos permutar as linhas L1 e L3 para obter o maior pivo da
primeira coluna que será 20, depois permutar L2 com L3 para obter o maior
pivo da segunda coluna que será 30. A operação efetuada será da forma:
Neste caso devemos permutar as linhas L1 e L3 para obter o maior pivo da
primeira
efetuada
será da forma:
 coluna que
 será 20, A operação


2 30 11
20 8 9
10 1 7  L1 ↔ L3 10 1 7 
20 8 9
2 30 11
Na prática em determinado programa não faremos a troca efetiva das linhas
necessárias, mas criaremos um novo vetor que apontará onde ( em que nova
posição) estará certa linha. Assim, se sub(i) indica tal vetor, no início do programa teremos sub(i) = i para i = 1(1)n. Como os elementos abaixo da diagonal
principal nao são considerados após a triagularização utilizaremos estes espaços
para armazenar os multiplicadores de cada linha em cada passo para posterior
utilização.
Logo a matriz triangularizada
( supondo que não houve trocas) fica:


a11 a12 a13 · · · a1n
 m21 a22 a23 · · · a2n 


 m31 m32 a33 · · · a3n 


 m41 m42 m43 · · · a43 


 ..
..
..
..
.. 
 .
.
.
.
. 
mn1 mn2 mn3
ann
3.4.4
Algoritmo de Gauss com pivotamento
"Triangularização"
Entrada n, aij , bi : i = 1(1)n, j = 1(1)n)
Para i = 1(1)n
sub(i) = i
Fim i
Para k = 1(1)n
26
max = 0
Para i = k(1)n
vabs = |asub(i),k |
Se max < vabs então
max = vabs
indx = i
fim se
Fim i
Se max = 0
saida “matriz singular”
fim se
j = sub(k)
sub(k) = sub(indx)
sub(indx) = j
pivo = asub(k),k
Para i = k + 1(1)n
asub(i),k =
−asub(i),k
pivo
Para j = k + 1(1)n
asub(i),j = asub(i),j + asub(i),k ∗ asub(k),j
Fim j
bi = bi + asub(i),k bk
Fim i
Fim k
"Retrosubstituição"
bsub(n)
xn = asub(n),n
Para k = (n − 1) (1)n
xk = bsub(k)
Para i = (k + 1) (1)n
xk = xk − asub(k),i ∗ xi
Fim i
xk =
xk
asub(k),k
Fim k
Saida xk , k = 1(1)n.
27
3.4.5
Coondicionamento de um sistema
Um problema é “mal condicionado” ou "sensível"se pequenas alterações nos
dados de entrada ocasionam grandes erros no resultado final
Definição: Dado o SELA Ax = y seu número de condicionamento é dado por
Cond(A) = ||A||.||A−1 ||
Propriedades do Cond(A):
1. Cond(A) ≥ 1 pois 1 = ||I|| = ||A.A−1 || ≤ ||A||.||A−1 || = Cond(A), onde
I é a matriz identidade.
2. Cond(I) = 1
3. Cond(αA) = Cond(A), ∀ α ∈ R
Logo quanto maior for o valor de Cond(A) mais sensível será o sistema
Exemplo: Em uma empresa o encarregado da remessa de mercadorias faz a
pesagem de varias caixas verdes e brancas antes que elas sejam enviada para os
pontos de venda. Consideremos agora um dia em particular onde o encarregado
pesou 11 caixas brancas e 5 caixas verdes totalizando 10,1 Kg, em seguida pesou
9 caixas brancas e 4 caixas verdes totalizando 8,2 Kg. No ponto de venda o
encarregado da recepção também efetuou a mesma pesagem, ou seja, pesou 11
caixas brancas e 5 caixas verdes totalizando 10,7 Kg e pesou também 9 caixas
e 4 caixas verdes totalizando 8,6 Kg. A diferença de pesos se justifica devido as
pesagens serem feitas em balanças diferentes
Suponhamos agora que com estes dados desejamos saber o peso de cada caixa
verde e de cada caixa branca. Com isso teremos dois sistemas, um referente a
pesagem de saida e outro referente a pesagem de chegada:
Referente a primeira pesagem temos o sistema I
½
11b + 5v = 10, 1
9b + 4v = 8, 2
Resolução
do sistemas
·
¸
·
¸
11 5 | 10, 1
11
5
|
10, 1
9
L2 → L2 − 11 L1
9 4 | 8, 2
−0, 8181 −0, 0909 | −0, 06636
Logo
v = 0, 7
b = 0, 6
Referente
a segunda pesagem temos o sistema II
½
11b + 5v = 10, 7
9b + 4v = 8, 6
Resolução
do sistemas
·
¸
·
¸
11 5 | 10, 7
11
5
|
10, 7
9
L2 → L2 − 11 L1
9 4 | 8, 6
−0, 8181 −0, 0909 | −0, 1545
v = 1, 7
b = 0, 2
Calculando
o¸erro relativo
nos¸dados de entrada temos:
·
·
10, 1
10, 7
y1 =
e y2 =
8, 2
8, 6
ky1 − y2 k∞
0, 6
Er =
=
= 0, 05
ky2 k∞
10, 7
28
Logo tivemos um erro de 5% nos dados de entrada
Calculando
agora
o erro
nas soluções temos:
·
¸
· relativo
¸
0, 7
1, 7
x1 =
e x2 =
0, 6
0, 2
ky1 − y2 k∞
1
Er =
=
= 0, 59
ky2 k∞
1, 7
Logo tivemos um erro de 59% nas soluções.
Com isso verificamos que uma pequena alteração nos dados de entrada provocou
um erro muito grande nos dados de saida o que indica que o sistema é mal
condicionado. Para finalizar ester exemplo vamos agora calcular o número de
condicionamento
do sistema. Neste caso a matriz A dos coeficieentes é:
·
¸
11 5
A=
9 4
°·
¸°
¸° °·
°
°
°
° 11 5 ° ° −4
5
°
° °
cond(A) = kAk∞ °A−1 °∞ = °
° 9 4 ° ° 9 −11 ° = 16 ∗ 20 =
∞
∞
320
O que confirma o mal condicionamento do sistema.
Projeto
A matriz de Hilbert é definida por
1
H = [hij ] onde hij = i+j−1
a) Construa a matriz H, matriz de Hilbert de ordem 20 × 20.
b) Determine, usando computador, o número de condicionamento da matriz
de Hilber de ordem 20 × 20.
3.4.6
Estabilidade e Exatidão
Um algoritmo é estável se o resultado produzido for relativamente insensível a
perturbações durante a computação
Estabilidade de um algoritmo é análoga ao condicionamento do problema
original
Exatidão é a proximidade entre solução calculada da solução exata do problema. A exatidão depende do condicionamento do problema assim como da
estabilidade do algoritmo
A inexatidão pode resultar de aplicar algoritmos estáveis a problemas mal
condicionados ou algoritmos instáveis a
problemas bem condicionados
3.4.7
Método de Eliminação de Gauss com Pivotamento
e Refinamento
O método de eliminação de Gauss, mesmo com pivotamento, não produz em
geral nenhuma estimativa sobre a exatidão da resposta. Com a técnica dos
refinamentos podemos ter a medida da exatidão da resposta bem como avaliar
se o sistema dado é bem ou mal condicionado.
Descrição do Método
29
Primeiro passo: Obter uma aproximação via Gauss com pivotamento.
Segundo passo: Refinar a solução obtida a partir de xn gerando uma aproximação xn+1 e obtendo mediante condições de convergência x = lim xn
Gerações das Aproximações
Para que o refinamento seja eficaz e realmente melhore a solução encontrada
pelo algorítmo básico de Gauss todas as operações efetuadas no reinamento
devem ser feitas em precisão dupla
Dado Ax = y com aproximação x1 queremos determinar z1 tal que x = x1
+ z1 e para isso precisaremos do resíduo que é definido por r = y−Ax.
Primeiro refinamento: Determinar z1
x = x 1 + z1
z1 = x − x1
Az1 = Ax − Ax1 = y − Ax1 = r1
Logo para determinarmos z1 devemos resolver o sistema Az1 = r1 . Note
que resíduo r1 é facilmente determinado. Daí calcula-se z1 lembrando que só
precisamos efeturar as mudanças em r1 e aplicar a rotina de retrossubstituição.
Assim
x2 = x1 + ♦z1
onde ♦z1 indica o valor de z1 arredondado
Segundo refinamento: Como x2 é uma solução aproximada do sistemaAx =
ydevemos determinar uma nova aproximação x3 e seguindo o mesmo raciocínio
usado no primeiro refinamento devemos determinar z2 como solução do sistema
Az2 = Ax − Ax1 = y − Ax2 = r2
logo
x3 = x2 + ♦z2
onde ♦z2 indica o valor de z21 arredondado
Terceiro refinamento: Idem aos anteriores.
Assim teremos constituido um sequência (x1 , x2 , x3 , .....)de aproximações da
soluçõa exata do sistema para a qual veremos uma condição de convergência.
Para a análise do comportamento do SELA com o uso de refinamentos poderemos detectar o mal condicionamento sem calcular o Cond(A) diretamente ou
aproximandamente. Se os resíduos r1 , r2 , r3 , ....., rn são pequenos mas as correções z1 , z2 , z3 , ....., zn são grandes então o SELA é mal condicionado.
30
3.5
Métodos Iterativos
Seja os Sistema Linear
Ax = y
onde:
A matriz de coeficientes n × n
x vetor de variáveis n × 1
b vetor independente (constantes) n × 1
Converter o sistema de equações
Ax = y
em um processo iterativo
x = Cx + g = ϕ(x)
, onde:
C matriz com dimensões n × n
g vetor com dimensões n × 1
ϕ(x) função de iteração matricial
Esquema do Método Iterativo
Partido da aproximação inicial x(o) , constrói-se uma seqüência iterativa de
vetores:
x(1) = Cx(0) + g = ϕ(x(0) )
x(2) = Cx(1) + g = ϕ(x(1) )
..
.
x(k) = Cx(k−1) + g = ϕ(x(k−1) )
Forma geral
x(k+1) = ϕ(x(k) )
Se a sequência é tal que
lim x(k) = a ⇒ a = Ca + g
k→∞
então α é solução do sistema Ax = y
Critério de parada
Erro absoluto
°
°
°
°
EAk = °x(k) − x(k−1) °
∞
¯
¯
¯ (k)
(k−1) ¯
= max ¯xi − xi
¯
31
i=1,..,n
Erro Relativo
ERk
¯
¯
¯ (k)
(k−1) ¯
°
° (k)
−
x
max
¯x
¯
°x − x(k−1) °
i
i
i=1,..,n
∞
°
°
¯
¯
=
=
°x(k) °
¯ (k) ¯
max ¯xi ¯
∞
i=1,..,n
(k)
Dada uma precisão o vetor x será escolhido como uma aproximação da
solução se EAk < ou dependendo do caso ERk <
Método Iterativo de Gauss-Jacobi
Considere o sistema linear:

a11 x1 + a12 x2 + a13 x3 + ............a1n xn = b1




 a21 x1 + a22 x2 + a23 x3 + ............a2n xn = b2
..................................................................


..................................................................



an1 x1 + an2 x2 + an3 x3 + ............ann xn = bn
Supondo aii 6= 0, i = 1, 2, ..., n, isola-se o vetor x mediante a separação
pela diagonal da matriz de coeficientes.
1
(k)
(k)
(b1 − a12 x2 − a13 x3 − .......... − a1n xn(k) )
a11
1
(k+1)
(k)
(k)
x2
=
(b2 − a21 x1 − a23 x3 − .......... − a2n xn(k) )
a22
..
.
1
(k)
(k)
(k)
x(k+1)
=
(bn − an1 x1 − an2 x2 − .......... − ann−1 xn−1 )
n
ann
(k+1)
x1
=
Com isso obtemos o esquema de iteração
x = Cx + g
, onde:



C=

0
−a21 /a22
..
.
−a12 /a11
0
..
.
−a13 /a11
−a23 /a22
..
.
···
···
..
.
−a1n /a11
−a2n /a22
..
.
−an1 /ann
−an2 /ann

−an3 /ann

b1 /a11
b2 /a22 


..

.
bn /ann
···
0


g=

32





O métdo de Gauss- Jacobi consiste em, dado um aproximação inicial x(0) ,
obter uma sequência de aproximações x1 , x2 , ..., xk pela fórmula de recorrência
x(k+1) = Cx(k) +g. Observe que o processo iterativo utiliza somente estimativas
da iteração anterior.
Exemplo 1

 10x + y + 2z = 5.25
−x + 5y + 3z = 6.5 com precisão = 10−3 = 0.001
Resolver o sisterma

−2y + 7z= 5.5

0.1
com a aproximação inicial x(0) = 0.5
0
Esquema iterativo
 (k+1)
¡
¢
1
(k)
(k)
= 10
−
2z
5.25
−
y
 x
¡
¢
y (k+1) = 15 6.5¡ + x(k) − 3z¢(k)

z (k+1) = 17 5.5 + 2y (k)


 5.25 
−2
0 −1
10
10
10
 e g =  6.5 
C =  15 0 −3
5
5
0
5.5
2
0
7
7
7
Esquema iterativo vetorial
x(k+1) = Cx(k) +g
Geração
Aproximações
 das −1

    5.25  
0 10 −2
0.475
0.1
10
10
 0.5 +  6.5  =  1. 32 
x(1) =  51 0 −3
5
5
0
5.5
2
0.928 571 4
0
0
7
7
7



 5.25  
−1
−2
0 10 10
0.207 285 7
0.475
10
  1. 32  +  6.5  = 0.837 857 2
x(2) =  51 0 −3
5
5
2
0
5.5
1. 162 857
0.928 571 4
0
7
7
7
Verificando a 
precisão:  
 

0.207 285 7
0.475
−0.267 714 3
x(2) − x(1) = 0.837 857 2 −  1. 32  = −0.482 142 8
0.928 571 4
0.234 285 6
° (1)
° 1. 162 857
°x − x(2) ° = 0.482 142 8 >
∞



  5.25  
−2
0.208 642 9
0 −1
0.207 285 7
10
10
10
 0.837 857 2 +  6.5  = 0.643 742 9
x(3) =  51 0 −3
5
5
0
5.5
2
1. 025 102
1. 162 857
0
7
7
7 
 


0.208 642 9
−0.267 714 3
0.476 357 2
x(3) − x(2) = 0.643 742 9 − −0.482 142 8 =  1. 125 886 
0.234 285 6
0.790 816 4
° (3)
° 1. 025 102
°x − x(2) ° = 1. 125 886 >
∞



  5.25  
−2
0 −1
0.255 605 3
0.208 642 9
10
10
10
 0.643 742 9 +  6.5  = 0.726 667 4
x(4) =  51 0 −3
5
5
0
5.5
2
0.969 640 8
1. 025 102
0
7
7
7
33

 
 

0.255 605 3
0.208 642 9
0.046 962 4
x(4) − x(3) = 0.726 667 4 − 0.643 742 9 =  0.082 924 5 
1. 025 102
−0.055 461 2
° (4)
° 0.969 640 8
°x − x(3) ° = 0.082 924 5 >
∞



  5.25  
−2
0 −1
0.258 405 1
0.255 605 3
10
10
10
 0.726 667 4 +  6.5  = 0.769 336 6
x(5) =  51 0 −3
5
5
2
0
5.5
0.993 333 5
0.969 640 8
0
7
7
7
 


0.258 405 1
0.255 605 3
0.002 799 8
x(5) − x(4) = 0.769 336 6 − 0.726 667 4 = 0.042 669 2
0.969 640 8
0.023 692 7
° (5)
° 0.993 333 5
°x − x(4) ° = 0.042 669 2 >
∞



  5.25  
−2
0.249 399 6
0 −1
0.258 405 1
10
10
10
 0.769 336 6 +  6.5  = 0.755 680 9
x(6) =  51 0 −3
5
5
0
5.5
2
1. 005 525
0.993 333 5
0
7
7
7
 


0.249 399 6
0.258 405 1
−0.009 005 5
x(6) − x(5) = 0.755 680 9 − 0.769 336 6 = −0.013 655 7
0.993 333 5
0.012 191 5
° (6)
° 1. 005 525
°x − x(5) ° = 0.013 655 7 >
∞



  5.25  
−2
0 −1
0.248 326 9
0.249 399 6
10
10
10
 0.755 680 9 +  6.5  = 0.746 564 9
x(7) =  51 0 −3
5
5
0
5.5
2
1. 001 623
1. 005 525
0
7
7
7
 


0.248 326 9
0.249 399 6
−0.001 072 7
x(7) − x(6) = 0.746 564 9 − 0.755 680 9 =  −0.009 116 
1. 005 525
−0.003 902
° (7)
° 1. 001 623
°x − x(6) ° = 0.009 116 >
∞



  5.25  
−2
0 −1
0.250 018 9
0.248 326 9
10
10
10
 0.746 564 9 +  6.5  = 0.748 691 6
x(8) =  51 0 −3
5
5
0
5.5
2
0.999 018 5
1. 001 623
0
7
7
7
 


0.250 018 9
0.248 326 9
0.001 692
x(8) − x(7) = 0.748 691 6 − 0.746 564 9 =  0.002 126 7 
1. 001 623
−0.002 604 5
° (8)
° 0.999 018 5
°x − x(7) ° = 0.002 126 7 >
∞



  5.25  
−2
0 −1
0.250 327 1
0.250 018 9
10
10
10
 0.748 691 6 +  6.5  = 0.750 592 7
x(9) =  51 0 −3
5
5
0
5.5
2
0.999 626 2
0.999 018 5
0
7
7
7
 


0.250 327 1
0.250 018 9
0.000 308 2
x(9) − x(8) = 0.750 592 7 − 0.748 691 6 = 0.001 901 1
0.999 018 5
0.000 607 7
° (9)
° 0.999 626 2
°x − x(8) ° = 0.001 901 1 >
∞



  5.25  
−2
0 −1
0.250 015 5
0.250 327 1
10
10
10
 0.750 592 7 +  6.5  = 0.750 289 7
x(10) =  15 0 −3
5
5
0
5.5
2
1. 000 169
0.999 626 2
0
7
7
7
34

 
 

0.250 015 5
0.250 327 1
−0.000 311 6
x(10) − x(9) = 0.750 289 7 − 0.750 592 7 =  −0.000 303 
0.999 626 2
0.000 542 8
° (10)
° 1. 000 169
°x
− x(9) °∞ = 0.000 542 8 <
Logo a solução com a precisão desejada é


0.250 015 5
x(10) = 0.750 289 7
1. 000 169
Podemos continuar a calcular novas iterações para obtermos uma solução
com maior 
pecisão





0.249 937 2
0.249 993 2
0.250 011 9
x(11) = 0.749 901 7 , x(12) = 0.749 937 6 , x(13) = 0.750 015 5
 1. 000 083 
0.999 971 9
0.999 982 2
0.250 002
0.249 997 9
0.249 999 4
x(14) = 0.750 013 1 , x(15) =  0.749 998  , x(16) = 0.749 997 2
 1. 000 004 
 1. 000 004 
0.999 999 4
0.250 000 4
0.250 000 1
0.249 999 9
x(17) = 0.750 000 2 , x(18) = 0.750 000 6 , x(19) =  0.75 
1.0
1.0
0.999 999 2
0.25
x(20) = 0.750 000 0
1.0


0.25
Portanto a solução é x(20) == 0.75 . Facilmente se verifica que esta é a
1.0
solução exata do sistema.
Exemplo 2
·
¸· ¸ ·
¸
0.5 20 0.5
14. 25
=
25. 07
½50 0.1 0.7
· ¸
0.5x + 20y = 14.25
0.1
(0)
com aproximação inicial de x =
50x + 0.1y = 25.07
0.5
Esquema
iterativo
½
1
(14.25 − 20y)
x = 0.5
1
y = 0.1 (25.07 − 50x)
·
¸
· 14.25 ¸
−20
0
0.5
0.5
C = −50
e g = 25.07
0
0.1
0.1
x(k+1) ·
= Cx(k) + g
¸ ·
¸
¸
·
¸
·
−20
14.25
0
8. 5
0.1
(1)
0.5
0.5
x = −50
+ 25.07 =
200. 7
0.5
0
· 0.1 −20 ¸ ·
¸
¸ 0.1
· 14.25 ¸ ·
0
−7999. 5
8. 5
0.5
x(2) = −50 0.5
=
+ 25.07
−3999. 3
0
200. 7
· 0.1 −20 ¸ ·
¸
¸ 0.1
· 14.25 ¸ ·
0
160000. 5
−7999.
5
0.5
x(3) = −50 0.5
=
+ 25.07
4000001.
−3999. 3
0
0.1
0.1
35
x(4) =
·
0
−50
0.1
¸
¸·
¸ · 14.25 ¸ ·
−1. 6 × 108
160000. 5
0.5
=
+ 25.07
0
4000001.
−8. 000 000 × 107
0.1
−20
0.5
Observe que neste caso a sequência está divergindo.
3.5.1
Critério de Linhas
Teorema (Critério das linhas)
Seja o sistema linear
Ax = y
e seja:

αk =
Se


n
P
j=1
j6=k


|akj |
|akk |
α = max αk < 1
k=1,...,n
ª
©
, então o método Gauss-Jacobi gera uma seqüência x(k) convergente para a
solução do sistema dado, independentemente da escolha da aproximação inicial
x(0)
Observação: No caso do exemplo 1, o sistema satisfaz o critério das linhas e
no caso do exemplo 2 o sistema não satifaz o critério das linhas.
Note que o critério das linhas é uma condição suficiente mas não necessária,
ou seja, se a matriz dos coeficientes satisfaz o critério das linhas então o método
de Gauss-Jacobi é convergente se se a matriz dos coeficientes não satisfaz o
critério das linhas então nada se pode afirmar ( o sistema pode convergir
ou divergir).
Exemplo 1:
Seja a matriz do exemplo dado anteriormente:


10 2 1
A= 1 5 1 
2 3 10
α1 =
α2 =
α3 =
(2+1)
10
(1+1)
5
(2+3)
10
= 0, 3 < 1
= 0, 4 < 1
= 0, 2 < 1
Tem-se a convergência garantida para qualquer vetor inicial.
Exemplo 2:
Seja o sistema de equações lineares:
36
x1 + x2 = 3
x1 − 3x2 = −3
1
=1
1
1
α2 =
3
α1 =
As condições de convergência do teorema não são satisfeitas, entretanto o
Método de Gauss-Jacobi gera uma seqüência convergente para a solução exata
x=
£
3
2
3
2
¤T
. Se as condições de suficiência não são satisfeitas, não significa que o método
não possa convergir.
Exemplo 3:
Considere o sistema linear:
x1 + 3x2 + x3 = −2
5x1 + 2x2 + 2x3 = 3
0x1 + 6x2 + 8x3 = −6


1 3 1
A= 5 2 2 
0 6 8
α1 = (3+1)
=4>1
1
=
3, 5 > 1
α2 = (5+2)
2
(0+6)
α3 = 8 = 0, 75 < 1
As condições do teorema não são satisfeitas. Uma solução possível é permutar
as equações. Seja no exemplo permutar a primeira equação com a segunda
equação:


5 2 2
A= 1 3 1 
0 6 8
α1 = (2+2)
= 0, 8 < 1
1
=
0, 66 < 1
α2 = (1+1)
3
=
0, 75 < 1
α3 = (0+6)
8
As condições passam a ser satisfeitas e a convergência é garantida para qualquer
vetor inicial. Este tipo de procedimento nem sempre é possível.
Método Iterativo de Gauss-Seidel
Assim como no Método de Gauss-Jacobi o sistema linear
Ax = y
37
é escrito na forma equivalente:
x = Cx + g
Como no Método Gauss-Jacobi, é realizada uma separação diagonal, e o processo
iterativo de atualização é seqüencial, componente por componente. A diferença
é que, no momento de realizar-se a atualização das componentes do vetor numa
determinada iteração, a formulação utiliza as componentes da iteração já atualizadas na iteração atual, com as restantes não atualizadas da iteração anterior.
(k+1)
Por exemplo, ao se calcular a componente xj
da iteração (k+1), utiliza-se
no cálculo as componentes já atualizadas
(k+1)
x1
(k+1)
, x2
(k+1)
, ... , xj−1
com as componentes ainda não atualizadas da iteração anterior
(k)
(k)
xj+1 , xj+2 , ... , xn(k)
.
1
(k)
(k)
(k)
(b1 − a12 x2 − a13 x3 − a14 x4 − .......... − a1n x(k)
n )
a11
1
(k+1)
(k+1)
(k)
(k)
x2
=
(b2 − a21 x1
− a23 x3 − a24 x4 .......... − a2n x(k)
n )
a22
1
(k+1)
(k+1)
(k+1)
(k)
x3
=
(b3 − a31 x1
− a32 x2
− a34 x4 − .......... − a2n xn(k) )
a22
..
.
1
(k+1)
(k+1)
(k+1)
(k+1)
xn(k+1) =
(bn − an1 x1
− an2 x2
− an3 x3
.......... − ann−1 xn−1 )
ann
(k+1)
x1
=
Exemplo: Resolver o sistema linear utilizando o Método Iterativo de GaussSeidel, comExemplo: Resolver o sistema linear utilizando o Método Iterativo de
Gauss-Seidel, com
x(0) = [0, 0, 0]T
e tolerância
≤ 5 × 10−2
.
5x1 + x2 + x3 = 5
3x1 + 4x2 + x3 = 6
3x1 + 3x2 + 6x3 = 0
38
O processo iterativo é dado por:
(k+1)
x1
(k+1)
x2
(k+1)
x3
=
=
=
1
(k)
(k)
(5 − x2 − x3 )
5
1
(k+1)
(k)
− x3 )
(6 − 3x1
4
1
(k+1)
(k+1)
− 3x2
)
(0 − 3x1
6
Para k=0 e
x(0) = [0, 0, 0]T


1
=  0, 75 
−0, 875
x(1)
(1)
Cálculo de ER :
¯
¯
¯ (1)
(1)
(0) ¯
∆1 = ¯x1 − x1 ¯ = |1, 0 − 0| = 1, 0
¯
¯
¯ (1)
(1)
(0) ¯
∆2 = ¯x2 − x2 ¯ = |0, 75 − 0, 0| = 0, 75
¯
¯
¯ (1)
(1)
(0) ¯
∆3 = ¯x3 − x3 ¯ = |−0, 875 − 0| = 0, 875
(1)
(1)
ER
max ∆i
1, 0
¯
¯
=
¯ (1) ¯ = 1, 0 = 1, 0 >
max ¯xi ¯
i=1,3
i=1,3
Para k = 1 e
x(1) = [1, 0, 0, 75, −0, 875]T
:

(2)
∆3

1, 025
x(2) =  0, 95 
−0, 9875
¯
¯
¯ (2)
(2)
(1) ¯
∆1 = ¯x1 − x1 ¯ = |1, 025 − 1, 0| = 0, 025
¯
¯
¯ (2)
(2)
(1) ¯
∆2 = ¯x2 − x2 ¯ = |0, 95 − 0, 75| = 0, 20
¯
¯
¯ (2)
(1) ¯
= ¯x3 − x3 ¯ = |−0, 9875 − (−0, 875)| = 0, 1125
(2)
(2)
ER
max ∆i
0, 20
¯
¯
=
¯ (2) ¯ = 1, 025 = 0, 1957 >
max ¯xi ¯
i=1,3
i=1,3
39
Para k=2 e
x(2) = [1, 0025, 0, 95, −0, 9875]T
:


1, 0075
x(3) =  0, 9912 
−0, 9993
¯
¯
¯ (3)
(3)
(2) ¯
∆1 = ¯x1 − x1 ¯ = |1, 075 − 1, 025| = 0, 0175
¯
¯
¯ (3)
(3)
(2) ¯
∆2 = ¯x2 − x2 ¯ = |0, 9912 − 0, 95| = 0, 0412
¯
¯
¯ (3)
(3)
(2) ¯
∆3 = ¯x3 − x3 ¯ = |−0, 9993 − (−0, 9875)| = 0, 0118
(3)
(3)
ER
max ∆i
0, 0412
¯
¯
=
¯ (3) ¯ = 1, 0075 = 0, 0408 <
max ¯xi ¯
i=1,3
i=1,3


1, 0075
x =  0, 9912 
−0, 9993
é solução com erro menor que 0, 05.
3.5.2
Critério de Sassenfeld
Seja o sistema linear
Ax = y
, com A dimensão n × n e seja:
β1 =
|a12 | + |a13 | + |a14 | + ....... + |a1n |
|a11 |
e para j = 2, 3, .............n:
βj =
Define-se
|aj1 | β 1 + ... + |ajj−1 | β j−1 + |ajj+1 | + ...... + . |aj1 |
|ajj |
β = max β j
j=1,..,n
.
Se β < 1, então o Método de Gauss-Seidel gera uma sequência convergente
para a solução do sistema, qualquer que seja o vetor inicial. Além disso, quanto
menor for o valor de β mais rápida é a convergência.
40
Exemplo: Verificar as condições de convergência do Método de Gauss-Seidel
no sistema abaixo:
2x1 + x2 + 3x3 = 3
−x2 + x3 = 1
x1 +
3x3 = 3
a)
Critério de Linhas
α1 =
1+3
=2>1
2
β1 =
1+3
=2>1
2
não satisfaz.
b)
Critério de Sassenfeld
não satisfaz.
Como a convergência do Método de Gauss-Seidel é fortemente dependente
da posição das equações, pode-se trocar a posição das equações.
Tentativa 1: Troca-se a primeira equação pela terceira equação.
x1 +
3x3 = 3
−x2 + x3 = 1
2x1 + x2 + 3x3 = 3
a)
Critério de Linhas
α1 =
0+3
=3>1
1
β1 =
0+3
=3>1
1
não satisfaz.
b)
Critério de Sassenfeld
não satisfaz.
Tentativa 2: Troca-se a primeira coluna pela terceira coluna na equação anterior.
3x3 + 0x2 + x1 = 3
x3 − x2 + 0x1 = 1
3x3 + x2 + 2x1 = 3
a)
Critério de Linhas
41
α1 =
1
= 0.33 < 1
3
satisfaz.
α2 =
1
=1
1
não satisfaz.
b)
Critério de Sassenfeld
β1 =
1
= 0.33 < 1
3
satisfaz.
β2 =
1 · 13
= 0.33 < 1
1
satisfaz.
β3 =
3·
1
3
+1·
2
1
3
=
4
<1
6
satisfaz.
Com a última modificação o sistema passa a ser convergente para qualquer
vetor inicial. Modificações desse tipo são puramente acadêmicas e são difíceis de
serem realizadas em sistemas reais. Principalmente pelas dimensões dos problemas, resultando num grande esforço computacional, e das incertezas quanto a
sua eficiência.
Exemplo : Verifique a convergência do sistema abaixo pelo critério de linhas
e Sassenfeld.
2x1 + x2 = 3
x1 + x2 = 4
Critério de Linhas
1
2
α2 = 1
α1 =
Não satisfaz
Critério de Sassenfeld
β1 =
β2 =
1×
1
42
1
2
1
2
=
1
2
Satisfaz
Exemplo : Verifique a convergência do sistema abaixo pelo critério de linhas
e Sassenfeld.
x1 + 0, 5x2 − 0, 1x3 + 0, 1x4 = 0, 2
0, 2x1 + x2 − 0, 2x3 − 0, 1x4 = −2, 6
−0, 1x1 − 0, 2x2 + x3 + 0, 2x4 = 1, 0
0, 1x1 + 0, 3x2 + 0, 2x3 + x4 = −2, 5
Algoritmo de Gauss-Seidel
Variáveis utilizadas no algoritmo:
· Inteiras: i, j, N ;
· Reais: num, den, e ;
· Vetores: x, y, b;
· Matriz: a.
INICIO
1) Dados de Entrada
Leia e {e é a precisaõ desejada}
Leia itmax {itmax é o número máximo de iterações desejadas}
Para i = 1 até N faça
Leia bi {bi são os termos independentes do sistema}
Leia xi {xi são as coordenadas do vetor aproximação inicial}
Fim para
Para i = 1 até N faça
Para j = 1 até N faça
Leia aij {aij são os coeficientes do sistema linear}
Fim para
Fim para
2) Repita
num = 0
den = 0
Para i = 1 até N faça
yi = 0
{yi é o xk+1
)
i
Para j = 1 até N faça
Se i 6= j então
yi = yi + aij ∗ xj
Fim para
yi =
1
∗ (bi − yi )
aii
{ guarda o max |yi − xi |}
Se num < |yi − xi | então
num = |yi − xi |
Fim se
Se den < |yi | então
{ guarda o max |yi | }
43
den = |yi |
Fim se
xi = yi
{ atribui o elemento yi para xi , onde xi é xki }
Fim-Para
Se i > itmax então
Escreve "o método não convergiu em" itmax "iterações"
FIM DO PROGRAMA
fim se
Até ( num
den < e )
3) Para i = 1 até N faça
{ Impressão dos valores de x }
Escreva xi
Fim para
FIM
44
Download
Random flashcards
modelos atômicos

4 Cartões gabyagdasilva

teste

2 Cartões juh16

paulo

2 Cartões oauth2_google_ddd7feab-6dd5-47da-9583-cdda567b48b3

Criar flashcards