Cálculo Numérico IPRJ/UERJ Sílvia Mara da Costa Campos Victer ÍNDICE Aula 1- Introdução Representação de números Conversão de números Aritmética de ponto flutuante Erros em máquinas digitais Aula 1 - Introdução O Cálculo Numérico tem por objetivo estudar e aplicar algoritmos numéricos para a solução de problemas, visando o menor "custo" e confiabilidade do resultado (observar tempo de execução, número de operações aritméticas, quantidade de memória, propagação do erro, etc). Um bom algoritmo numérico deve se caracterizado por: a) Independência da máquina: a execução do programa pode ser realizada em diferentes máquinas; b) Inexistência de Erro Aritmético: problemas de overflow e underflow devem ser detectados a priori; c) Inexistência de Erro Lógico: previsão de tudo o que poderá ocorrer durante o processo (divisão por zero, por exemplo); d) Quantidade finita de cálculos; e) Existência de um critério de exatidão; f) O erro deve convergir para zero com precisão infinita. g) Eficiência: produzir a resposta correta com economia. Ao se trabalhar com um computador (ou qualquer outra máquina digital) algumas dificuldades numéricas podem ocorrer. Podem ocorrer erros devido ao processo de tradução de números decimais para números binários. 1
1.1 - Processo de Modelagem de um Fenômeno da natureza Modelagem - Fase de obtenção de um modelo matemático que descreve o comportamento do problema que se quer estudar. Resolução - Fase de obtenção da solução do modelo matemático através da aplicação de métodos numéricos. Todas as fases acima estão passíveis de erros. Muitas vezes os resultados finais estão distantes do que se poderia esperar, ou que todas as fases de resolução tenham sido realizadas corretamente. Os resultados obtidos também dependem: a) da precisão dos dados de entrada b) da forma como esses dados são representados no computador c) das operações numéricas efetuadas Estudaremos algoritmos numéricos a fim de obter uma solução numérica do problema, a qual, geralmente, difere da solução exata. Possíveis fontes de erro que geram essa diferença: a) Simplificação do modelo matemático (algumas variáveis envolvidas são desprezadas); b) Erro nos dados de entrada ( com frequência provindos de dados experimentais); c) Truncamento (por exemplo, substituição de um processo infinito por um finito e linearizações); d) Erro de arredondamento em aritmética de ponto flutuante. Aula 1 - Representação de números Os números empregados no calculo computacional podem ser de dois tipos: números inteiros e números em ponto flutuante (números reais da matemática, por exemplo 3,56 0,356 x 10 1 ). Os computadores atuais representam os números internamente no formato binário, como uma sequencia de 0s e 1s. Apesar dessa representação ser conveniente para as maquinas é antinatural para os seres humanos, cujo sistema de numeração é o decimal. Decomposição de um número num sistema de bases. Em geral qualquer numero pode ser decomposto numa soma dos dígitos que o constitui (d) vezes potências da sua base (β) conforme indicado abaixo: 2
Onde os dígitos d j pertencem aos números naturais e satisfazem a condição: 0 d j (β-1) Sistema de Numeração decimal ou base 10. Todos os múltiplos e submúltiplos de um número são escritos com potências de 10. Exemplos: Sistema de numeração binário ou base 2. Todos os múltiplos e submúltiplos de um número são escritos com potencias de 2. Exemplos: Obs. Os computadores digitais operam basicamente com dois tipos de sinais de tensão: Alto e baixo. Matematicamente, pode-se expressar esses valores por 0 (baixo) e 1 (alto). Aula 1 Conversão de números Decimal para binário: Devemos aplicar um método para a parte inteira (divisões sucessivas) e um método para a parte fracionaria, se houver (multiplicações sucessivas). Exemplos: 3
Para números fracionários, usar a regra da multiplicação. Exemplos: Concluímos então que os números (0,1) 10 e (0,11) 10 NÃO têm representação binária finita!!! independente do computador, ele nunca vai saber o que significa esses números exatamente pois a conversão para binário sempre acarretará numa aproximação (truncamento ou arredondamento) Obs. O fato de um número não ter representação finita no sistema binário pode acarretar a ocorrência de erros aparentemente inexplicáveis nos cálculos dos dispositivos eletrônicos. 4
Um número inteiro sempre pode ser representado exatamente por um inteiro binário, mas isso não é verdade para os números fracionários. Binário para decimal: Exemplos: Exercícios: 1) converta os números decimais em sua forma binária: a) 2 b)10 c) 7550 d)13,25 e) 0,4217 2) Converta os números binários em sua forma decimal: a) (10100) 2 b) (1101) 2 c)(0,1101) 2 d) (11101,01) 2 5
Aula 1 - Aritmética de ponto flutuante A representação de números reais mais utilizada em máquinas é a do ponto flutuante. Esse número tem três partes: o sinal, a parte fracionária (mantissa) e o expoente: Sendo: Exemplo: Nas maquinas digitais, um digito binário é denominado BIT (do inglês, binary digit). Um grupo de oito bits corresponde a 1 byte. Dessa forma, percebemos que a representação dos números binários em um computador é feita com um número finito de bits. A esse tamanho finito de bits é dado o nome palavra de computador. O tamanho da palavra do computador depende de características internas à arquitetura do mesmo (Ex: 32 e 64 bits). Quanto maior o tamanho da palavra do computador mais veloz e mais preciso será o computador. Uma aritmética de ponto flutuante F é caracterizada por quatro números inteiros (F é um subconjunto dos números reais): Exemplo: Considere F(2,2,-1,2 ), com número normalizado, isto é, d1 0. Os números serão: ±,10 2 e ou ±,11 2 e, sendo -1 e 2. Convertendo para decimal, temos:,10 = ½ e,11 = ¾ 6
Com isso, os únicos números positivos representáveis nesse computador são: Mantissa Expoentes 1/2 2 e 3/4 2 e para e= -1, 0, 1 e 2 Ou seja: ¼, ½, 1, 2, 3/8, 3/4, 3/2 e 3, que podem ser representados na reta numerada (reta real, base 10): Além desses números os seus respectivos números negativos e o número zero também serão representados. O número total de elementos de uma aritmética de ponto flutuante é dado por: Para o exemplo acima, o número de elementos é igual a 2(2-1)2 2-1 (2-(-1)+1) + 1 = 17 (8 positivos, 8 negativos e o zero). O conjunto dos números de ponto flutuante é discreto, e não contínuo como os números reais. Não temos mais o conceito que entre dois números sempre existe um outro. Esse fato pode ter consequência desastrosa! Exemplo: Se a máquina opera no sistema: β=10; t=3; e [-5,5] Os números são representados como: 0,d 1 d 2 d 3 x 10 e, 0 dj 9, d1 0, e [-5,5] O menor número representado nesta máquina em valor absoluto: m=0,100 x 10-5 = 10-6 O maior número representado nesta máquina em valor absoluto: M=0,999 x 10 5 = 99900 7
Aula 1 - Erros em máquinas digitais Erros na representação dos números. O conjunto de números reais é infinito, entretanto, a sua representação em um sistema de ponto flutuante é limitada, pois é um sistema finito. Essa limitação tem duas origens: (a) A faixa dos expoentes é limitada (e min e e max ); (b) A mantissa representa um número finito de números. (a) A faixa dos expoentes é limitada (e min e e max ) Fenômeno de overflow : sempre que uma operação aritmética produz um número com expoente superior ao expoente máximo. Fenômeno de underflow : ocorre sempre que uma operação resulta em um expoente inferior ao expoente mínimo. Representação do conjunto na reta real (para o caso do exemplo dado): Exemplo 1: Considere uma aritmética de ponto flutuante F(10,2,-5,5) Sejam x = 875 e y = 3172. Calcular x * y. Primeiro, deve-se arredondar os números e armazená-los no formato indicado. A operação de multiplicação é efetuada usando 2t dígitos. x = 0,88x 10 3 e y =0,32 x 10 4, x*y = 0,2816 x 10 7 Como o expoente é maior que 5, resulta em OVERFLOW. Sejam x =0,0064 e y=7312 Calcular x y. Primeiro, deve-se arredondar os números e armazená-los no formato indicado. A operação de divisão é efetuada usando 2t dígitos. x = 0,64x 10-2 e y = 0,73 x 10 4, x y = 0,8767 x 10-6 O resultado dessa operação resulta em um valor menor que o computador pode armazenar, ou seja,resulta em UNDERFLOW. (b) A mantissa representa um número finito de números Exemplo 1. Seja uma máquina que opere com apenas 6 dígitos na mantissa, ou seja, capaz de armazenar números no formato m = ± 0,d 1 d 2 d 3 d 4 d 5 d 6 x 10 e. Como armazenaríamos o número: 8
(0,11) 10 = (0,000111000010100011110101110000101000111101...) 2 nesta maquina? Como o número (0,11) 10 não tem representação binária finita, teremos neste caso: (0,11) 10 (0,000111) 2 (0,109375) 10 Para de armazenar Exemplo 2. Considere a representação binária de 0,6 e 0,7. 0,6=0,100110011001... 0,7=0,1011001100110... Se esses dois números forem representados na aritmética F(2,2,-1,2), eles serão representados igualmente por 0.10 2 0. Esse número equivale a 0,5 em decimal. Portanto, tanto o 0,6 quanto o 0,7 serão considerados 0,5. Exemplo 3. Operações em F(10,2,-5,5). Sejam x =4,32 e y=0,064. Calcular x + y. A adição aritmética de ponto flutuante requer o alinhamento dos pontos decimais dos dois números. x = 0,43 x 10 1 e y = 0,0064 x 10 1 x+y = 0,4364 x 10 1 Resultado com 2 dígitos : x+y = 0,44 x 10 1 Sejam x =372 e y=371 Calcular x - y. x = 0,37 x 10 3 e y = 0,37 x 10 3 x-y = 0,00 x 10 3 Resultado com 2 dígitos: x-y = 0,00 x 10 3 Sejam x =691 e y=2,71 Calcular x + y. x = 0,69 x 10 3 e y = 0,0027 x 10 3 x+y = 0,6927 x 10 3 Resultado com 2 dígitos : x+y = 0,69 x 10 3 ERROS A análise dos erros obtidos através de um método numérico representa uma etapa fundamental no processo de soluções numéricas. Exemplo: Calcule a área de uma circunferência de raio 100m. Alguns resultados obtidos: a) A=31400m 2 b) A=31416m 2 c) A=31415,92654 m 2 Como justificar as diferenças entre os resultados? É possível obter "exatamente" esta área? Os erros ocorridos dependem da representação dos números na máquina utilizada. A representação de um número depende da base escolhida ou disponível na máquina em uso e do número máximo de dígitos usados na sua representação. 9
O número π, por exemplo, não pode ser representado através de um número finito de dígitos decimais. Em (a), o número π foi escrito como 3,14, em (b), como 3,1416, em (c) como 3,141592654. Em cada um foi obtido um resultado diferente, e o erro neste caso depende exclusivamente da aproximação escolhida para π. Qualquer que seja a circunferência, a sua área nunca será obtida exatamente, uma vez que π é um número irracional. 1- Número aproximado Um número é dito uma aproximação para o número exato se existe uma pequena diferença entre eles. Geralmente, nos cálculos os números exatos não são conhecidos e deste modo são substituídos por suas aproximações. Se > temos uma aproximação por excesso do valor exato. Se < temos uma aproximação por falta do valor exato. Exemplo: Como 1,41 < < 1,42 tempo uma 1,41 é uma aproximação por falta e 1,42 é uma aproximação por excesso. 2- Erro Absoluto EA Diferença entre um valor exato e sua aproximação. Cota para o erro: Muitas vezes o valor exato não é conhecido, logo EAx também não será conhecido. Solução: determinar uma cota para o erro ao invés de determinar o erro. Isso permitirá saber que, mesmo não conhecendo o erro, ele estará entre dois valores conhecidos. Dizemos que um número є > 0 é uma cota para o erro se EAx < є: Assim, mesmo não conhecendo o valor exato, podemos afirmar que ele está entre e, que são valores conhecidos. Uma cota є só tem algum valor prático se. 3- Erro Relativo ER Exemplo: ; e ; Assim: EAx=0,1 e EAy=0,0002. 10
Será que a aproximação é melhor que a? Devemos verificar que as grandezas dos números envolvidos são muito diferentes! O Erro Relativo é definido por: Logo, conclui-se que a aproximação é melhor que a, pois ERx < ERy. 4- Erros relacionados a aproximação de cálculos Ocorrem quando utilizamos num processo algorítmico infinito apenas uma parte finita do processo. Exemplo: Podemos usar como uma aproximação finita para o valor exato Para isso truncamos uma série infinita utilizando apenas uma parte finita dela. Neste exemplo utilizamos, para aproximação, apenas quatro termos da série: que é uma aproximação muito pobre para. 5- Erros devido ao armazenamento. Erros originados pela representação dos números reais utilizando-se apenas um número finito de casas decimais para representar um número real (em linguagem de programação número real é chamado de número de ponto flutuante). Os equipamentos eletrônicos utilizam nos cálculos a chamada aritmética finita. Existem dois tipos de erros por arredondamento: 11
a) Arredondamento truncado Regra: Desprezam-se os algarismos que ficam acima da (t+1)-ésima casa decimal, onde t representa o número de dígitos da mantissa. b) Arredondamento simétrico (ou arredondamento apenas) Regras: Se o valor do algarismo que fica na (t+1)-ésima casa decimal for menor do que 5, arredondamos o número e desprezamos todos os algarismos após a t-ésima casa decimal; Se for maior ou igual a 5, somamos 1 ao algarismo na t-ésima casa decimal e desprezamos os algarismos restantes. Exemplo: 12
EXERCÍCIOS RESOLVIDOS: 1- Uma máquina é capaz de armazenar quatro dígitos na mantissa usando arredondamento. Considere x=17534 e y=21178. Calcule os erros absolutos e relativos das variáveis x e y. Solução: Repita o exercício usando truncamento. 2- Considere uma maquina cujo sistema de representação de números é definido por: base decimal, 4 dígitos na mantissa (t=4), e expoentes no intervalo (-5,5). Pede-se: a) Qual o menor e o maior número, em módulo, representados nesta maquina? Solução: m=0,1000 10-5 = 10-6 M=0,9999 10 5 = 99990 b) Como será representado o número 73,758 nesta maquina, se for usado o arredondamento? E se for usado o truncamento? Solução: Truncamento: 0,7375 10 2 Arredondamento: 0,7376 10 2 c) Se a=42450 e b=3 qual o resultado de a+b? Solução: a+b= 0,4245 10 5 + 0,00003 10 5 = 0,42453 10 5 (NAS OPERAÇÕES ENVOLVENDO NÚMEROS PONTO FLUTUANTES ESTES DEVEM TER A POTÊNCIA DO MAIOR DELES) Mas o resultado será armazenado com 4 dígitos na mantissa, portanto a+b=0,4245 10 5. d) Qual o resultado da soma 13
nesta máquina? Solução: e) d) Qual o resultado da soma nesta máquina? Solução: Será que o resultado deve ser o mesmo? As operações devem ser realizadas na ordem em que aparecem as parcelas, o que conduzirá a resultados distintos....até terminar o número 3 que resultará no número 0.3000x10 2. Depois é feita a soma com o número 42450 e no final teremos: 0.3000 10 2 0.0003 10 5 S2=0.0003 10 5 + 0.4245 10 5 = 0.4248 10 5 14
3- Represente os números: 0.35, 5391 e 0.0003 no sistema F (10; 3; 2; 2). Solução: b) Para o número 5391, temos: 5391 = (5x10-1 + 3x10-2 + 9X10-3 ) x 10 4 (overflow) c) Para o número 0.0003, temos: 0.0003 = (3x10-1 + 0x10-2 + 0X10-3 ) x 10-3 (underflow) Exercício proposto: Seja um sistema de aritmética de ponto flutuante de quatro dígitos e base decimal. Dados os números: x= 0,7237 10 4, y = 0,2145 10-3 e z = 0,2585 10-1, efetue as operações x+y+z e (xy)/z. 15
Referências: 1- Livro. Cálculo numérico. Márcia Ruggiero e Vera Lopes. 1- Apostila. Cálculo Numérico. Faculdade de Engenharia, Arquitetura e urbanismo. Prof. Dr. Sérgio Pilling. 3- Apostila. Cálculo Numérico. Eliete Biasotto Hauser. 16