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 Sejao 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 eopivô 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 Logoa 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