UFRN/CT/DCA Nota de Aula 1 – Introdução aos Métodos Computacionais e Estudo dos Erros Prof. Anderson Cavalcanti 1. Métodos Computacionais 1.1. Contextualização Muitos problemas de engenharia consistem em obter uma solução para um determinado modelo matemático que representa um certo problema real conforme mostra a Figura 1. Método Analítico Problema Real Solução Analítica Modelo Matemático Método Numérico Algoritmo Implementação Computacional Solução Numérica Figura 1 – Solução de um problema de Engenharia Um método numérico apresenta uma solução que consiste de uma sucessão de números que converge para o valor da solução real. Cada termo dessa sucessão deve ser visto como uma aproximação que é possível calcular com um número finito de operações elementares. É objetivo da análise numérica encontrar sucessões que aproximem os valores exatos com um número mínimo de operações elementares. Como um método numérico propõe uma solução com um número determinado de operações, sua implementação computacional, usualmente, é simples. Dessa forma, a capacidade de repetição e cálculo elementar dos computadores digitais é aproveitada para se obter soluções confiáveis. A escolha de um método numérico deve ser adotada, basicamente, quando: i) não existe solução analítica do modelo matemático; ii) a solução analítica é muito complexa. Dentre os problemas matemáticos que podem ser resolvidos por métodos numéricos podemos citar: i) a solução de sistemas de equações; ii) a interpolação de funções; iii) a resolução de derivadas e integrais; iv) a resolução de equações diferenciais; v) entre outros. 1.2. Exemplo de um problema A estatística estuda o comportamento de muitos fenômenos não-determinísticos a partir de funções de densidade de probabilidade. Uma das funções mais conhecidas é a distribuição gaussiana ou distribuição normal. Esta função é dada por: f ( x) = 1 2πσ ⋅ e −( x −η ) 2 / 2σ 2 em que x é a variável aleatória que se deseja avaliar, η é a média desta variável e σ é o seu desvio padrão. A probabilidade de a variável aleatória estar em uma faixa de valores é dada por: x2 P( x1 < x ≤ x 2 ) = ∫ f ( x)dx x1 No entanto, a integral acima não possui solução analítica, ou seja, utiliza-se de métodos numéricos para calculá-la. 2. Representação de Números no Computador Os serem humanos representam quantidades através de números. O sistema de numeração empregado é o decimal (base 10), ou seja, se constrói todos os números a partir de 10 algarismos (0,1,...,9). O computador, por ser um dispositivo eletrônico digital, entende apenas dois estados possíveis os quais são classificados como 0 e 1. Este sistema de representação é conhecido como sistema binário (base 2). Nesta nota de aula, para evitar dúvidas quanto a qual sistema se está utilizando, será empregada a seguinte notação: Notação: ( X ) y indica que o número X está sendo representado na base y . 2.1. Números Binários Um número decimal pode ser representado de forma binária da seguinte forma: (110100,111)2 = 1 × 2 5 + 1 × 2 4 + 0 × 2 3 + 1 × 2 2 + 0 × 21 + 0 × 2 0 + 1 × 2 −1 + 1 × 2 −2 + 1 × 2 −3 = (52,875)10 No exemplo acima, cada dígito binário é multiplicado por uma potência de dois. O expoente da referida potência é a posição do dígito no número. Cada dígito binário é chamado de bit. A Figura 2 ilustra melhor a afirmação. Figura 2 – Posição dos dígitos na conversão de binário para decimal Dado um número decimal, sua conversão para decimal é dada em duas etapas: o Separa-se o número em sua parte inteira e sua parte fracionária. No caso do número (52,875)10 teríamos (52 )10 e (0,875)10 ; o Converte-se a parte inteira através do método das divisões sucessivas por dois; o Converte-se a parte fracionário através do método das multiplicações sucessivas por dois; o Concatena-se os resultados obtidos nas etapas anteriores. O método das divisões sucessivas por dois é dado da seguinte forma: Figura 3 – Método das divisões sucessivas por 2 Neste método, divide-se o número sucessivamente por dois até que se atinja o valor 0. Feito isso, toma-se o resto das divisões como mostrado na Figura 3. Dessa forma, conclui-se que (52 )10 = (110100 )2 . O método das multiplicações sucessivas por dois é dado da seguinte forma: Figura 4 – Método das multiplicações sucessivas por 2 Neste método, multiplica-se o número fracionário sucessivamente por dois. Deste resultado, a parte inteira será o primeiro dígito do número na base 2 e a parte fracionária é novamente multiplicada por 2. O processo é repetido até que a parte fracionária do último produto seja igual a zero. Assim, conclui-se que (0,875)10 = (0,111)2 . Conclui-se também, a partir da concatenação dos dois resultados obtidos, que (52,875)10 = (110100,111)2 . Quando a parte fracionária no método das multiplicações sucessivas por dois nunca atinge zero, significa que o número não tem representação na base 2 com um número finito de dígitos. Exemplo: (0,6 )10 = (?)2 Dessa forma, temos que (0,6 )10 = (0,10011001...)2 . 2.2. Representação de um número em uma base qualquer De uma forma geral, um número x pode ser representado numa base β da seguinte forma: x = ± M ⋅ β EXP d d em que M = 11 + L + tt é a mantissa do número; 0 ≤ d i < β ; i = 1, K , t ; EXP β β representa o expoente de β e assume valores entre I e S que são os limites inferiores e superiores, respectivamente I ≤ EXP ≤ S ; t representa a quantidade de dígitos significativos do sistema de representação. Exemplo: representar o número (5,237 )10 através da notação apresentada. 2 3 7 5 5,237 = 0,5237 × 101 = 1 + 2 + 3 + 4 × 101 10 10 10 10 Para armazenar o número acima, precisamos de, no mínimo, t = 4 e I = S = 1 . Em um computador digital, β = 2 . Nessas máquinas, apenas uma pequena parte dos número pode ser representada sem erros. Considerando um computador digital com as seguintes características: t = 10 , I = −15 e S = 15 , analise os seguintes exemplos: Exemplo de representação sem erros: representar o número computador citado. (52,875)10 no (52,875)10 = (110100,111)2 = 0,110100111 × 2 6 = 11 + 2 1 0 1 0 0 1 1 1 + 3 + 4 + 5 + 6 + 7 + 8 + 9 × 26 2 2 2 2 2 2 2 2 2 Dessa forma, o número seria armazenado da seguinte forma no referido computador digital: 0 1 1 0 1 0 0 1 1 1 0 0 0 1 1 0 Sinal da mantissa: 0 positivo, 1negativo. Mantissa (10 bits) Sinal do expoente: 0 positivo, 1negativo. Expoente (4 bits) A referida máquina possui, no total, 16 bits para armazenamento de um número. Exemplo de representação com erros: representar o número computador citado. (0,1)10 no (0,1)10 = (0,00011001100K)2 = 0,11001100110011K × 2 −3 = 1 0 0 1 1 0 0 1 = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + L × 2 −3 2 2 2 2 2 2 2 2 Representado na máquina citada teríamos: 0 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 O número exato (0,1)10 é representado como (0.09997558593750)10 . Observa-se, dessa forma, que há um erro associado à representação do número. Um parâmetro comumente utilizado para se avaliar a precisão de uma máquina é dado por: PRECISAO ≤ 1 βt Para o computador digital de 16 bits citado ( β = 2, t = 10 ), temos a seguinte 1 1 precisão t = 10 ≈ 10 −3 . Neste caso, a precisão da máquina é de aproximadamente 3 β 2 dígitos significativos corretos. 3. Teoria dos Erros 3.1. Definições o Erro absoluto: Suponto que ~ p é uma aproximação de p , o erro absoluto dessa aproximação é dado por E a = p − ~ p; o Erro relativo: O erro relativo a aproximação de p por ~ p é dado por ~ p− p . Er = p 3.2. Erro de arredondamento Considerando a representação do número (50 )10 : (50)10 = (110010)2 = 0,110010 × 2 6 = 11 + 2 0 1 1 0 0 1 0 0 0 0 0 1 0 0 1 0 + 3 + 4 + 5 + 6 × 26 2 2 2 2 2 2 0 0 1 1 0 O número imediatamente após o 50 que pode ser representado sem erros nesta máquina é: 50 + 1 × 2 6 = 50,0625 10 2 Dessa forma, caso seja necessário armazenar o número p = 50,06 , o mesmo representado na máquina através do seu número significativo mais próximo ~ p = 50,0625 . ~ Assim, o erro de arredondamento associado seria E a = p − p = 50,06 − 50,0625 = −0,0025 e E E r = a = −4,994 × 10 −5 . p O erro de arredondamento ainda pode ser encontrado quando do descarte das casas decimais de modo a obter a quantidade de dígitos desejada em uma aproximação. Exemplo: Deseja-se uma representação de p = 3,14159265358979323846 K com 6 dígitos. Nesse caso, escreve-se o número na forma decimal normalizada: 0,314159265358979323846K × 101 Dessa forma, basta arredondar o sexto dígito para o inteiro mais próximo: ~ p = 3,14150 3.3. Erro de truncamento O erro de truncamento ocorre quando se substitui uma expressão matemática complexa por expressões mais simples. Um exemplo clássico consiste em substituir uma função complexa a ser integrada por uma série finita (Série de Taylor, por exemplo). Uma 2 x4 x6 x8 função como f ( x ) = e x pode ser escrita como f ( x ) ≈ 1 + x 2 + . Dessa forma, + + 2! 3! 4! qualquer operação que substitua a função por sua aproximação, irá produzir erro de truncamento. 3.4. Propagação de Erros Os erros podem ser propagados em máquinas que efetuam diversas operações. Nestes casos, aconselha-se verificar a quantidade de dígitos significativos e a ordem de prioridade para a realização dos cálculos. Exemplo: Supondo uma máquina com 4 dígitos significativos e os seguintes números: x1 = 0 ,3491 × 10 4 e x 2 = 0 ,2345 × 10 0 . Deseja-se efetuar duas operações descritas: (x2 + x1 ) − x1 = (0,2345 × 10 0 + 0,3491× 10 4 ) − 0,3491× 10 4 = 0,3491× 10 4 − 0,3491× 10 4 = 0 x 2 + ( x1 − x1 ) = 0 ,2345 × 10 0 + (0,3491 × 10 4 − 0 ,3491 × 10 4 ) = 0,2345 × 10 0 + 0 = 0 ,2345 × 10 0 Percebe-se que, devido à prioridade de execução das operações e por causa da quantidade de dígitos significativos, os resultados, que deveriam ser os mesmos para ambas as operações, são diferentes. 4. Referências Barroso, L.C.; Barroso, M. M. A.; Filho, F.F.C.; Carvalho, M.L.B.; Maia, M.L. Cálculo Numérico com Aplicações. Ed. Harbra, 2ª ed., 1987. Pires, P.S.M. Notas de Aula de Médotos Computacionais em Engenharia. UFRN. Disponível em www.dca.ufrn.br/~pmotta, 2000.