Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Cálculo Numérico – Unitoledo 1 Desenvolvimento e Implementação e Programação Computacionais para resolução de Problemas por Métodos Numéricos 1.1 Noções Básicas Sobre Erros A resolução de problemas envolve várias fases que podem ser estruturadas da seguinte forma: Pode acontecer que os resultados estejam distantes do que se esperaria, pois, mesmo que todas as fases estejam corretas, os resultados dependem: § dos dados de entrada; § da forma como os dados são representados no computador; § das operações numéricas Representação de Números Cálculo Numérico – Unitoledo 2 A representação de um número depende da base escolhida ou disponível na máquina em uso, ou seja, um número pode ser representado na base decimal ou binária. Veja alguns exemplos: 1 - Calcular a área de uma circunferência de raio 100 metros. Resultados obtidos: (a) A = 31400m2 (b) A = 31416m2 (c) A = 31415,92654m2 Como justificar as diferenças? 2 - Efetue o somatório em uma calculadora e em um computador: 𝑥!!""""!!! para: xi = 0,5; xi = 0,11 Resultados obtidos: Para xi = 0,5 : Na calculadora: S = 15000 No computador: S = 15000 Para xi = 0,11 Na calculadora S = 3300 No computador S = 3299,99691 (Resultado do livro) No computador S = 3299,890000000628 (Resultado computador pessoal. Simulação Matlab) Como justificar a diferença entre os resultados obtidos para xi = 0,11? Os erros ocorridos nos dois problemas dependem da representação dos números na máquina utilizada. Para entender melhor a questão do erro, a próxima seção enfoca os processos de conversão de números do sistema binário para o decimal e vice-versa. Cálculo Numérico – Unitoledo 3 Conversão de Números nos Sistemas Decimal e Binário Inicialmente veremos a conversão de números inteiros (sistema decimal) para o sistema binário e vice-versa, considere os números (347)10 e (10111)2, estes números podem ser representados da seguinte forma: (347)10 = 3 . 102 + 4 . 101 + 7 .100 (10111)2 = 1 . 24 + 0 . 23 + 1 . 22 + 1 . 21 + 1 . 20 De um modo geral, um número na base 𝛽, (𝑎!𝑎!!!…𝑎!)!, 0 ≤ 𝑎! ≤ (𝛽 − 1), 𝑘 = 1,… , 𝑗, pode ser escrito na forma polinomial: 𝑎!𝛽! + 𝑎!!!𝛽!!! +⋯+ 𝑎!𝛽! Assim a representação do número (𝑎!𝑎!!!…𝑎!𝑎!𝑎!)! na base 10, denotada por 𝑏!, é obtida através do processo: 𝑏! = 𝑎! 𝑏!!! = 𝑎!!! + 2𝑏! 𝑏!!! = 𝑎!!! + 2𝑏!!! ⋮ 𝑏! = 𝑎! + 2𝑏! 𝑏! = 𝑎! + 2𝑏! Para (10111)2, a sequencia obtida será: 𝑏! = 𝑎! = 1 𝑏! = 𝑎! + 2𝑏! = 0+ 2.1 = 2 𝑏! = 𝑎! + 2𝑏! = 1+ 2.2 = 5 𝑏! = 𝑎! + 2𝑏! = 1+ 2.5 = 11 𝑏! = 𝑎! + 2𝑏! = 1+ 2.11 = 23 Cálculo Numérico – Unitoledo 4 Veremos agora um processo para converter um número inteiro representado no sistema decimal para o sistema binário. Considere o número 𝑁! = (347)!" e (𝑎!𝑎!!!…𝑎!)! a sua representação na base 2. Temos então: 347 = 2. 𝑎! . 2!!! + 𝑎!!!. 2!!! +⋯+ 𝑎!. 2! + 𝑎!. 2! + 𝑎! = 2 . 173+ 1 e portanto, 𝑎! = 1, que representa o resto da divisão de 347 por 2. Repetindo o processo para 𝑁! = 173 173 = 𝑎! . 2!!! + 𝑎!!!. 2!!! +⋯+ 𝑎!. 2! + 𝑎! obteremos agora o dígito 𝑎!, que será o resto da divisão 𝑁! por 2. Seguindo este raciocínio obtemos a sequencia de números 𝑁! e 𝑎!. 𝑁! = 347 = 2 . 173 + 1 ⇒ 𝑎! = 1 𝑁! = 173 = 2 . 86 + 1 ⇒ 𝑎! = 1 𝑁! = 86 = 2 . 43 + 0 ⇒ 𝑎! = 0 𝑁! = 43 = 2 . 21 + 1 ⇒ 𝑎! = 1 𝑁! = 21 = 2 . 10 + 1 ⇒ 𝑎! = 1 𝑁! = 10 = 2 . 5 + 0 ⇒ 𝑎! = 0 𝑁! = 5 = 2 . 2 + 1 ⇒ 𝑎! = 1 𝑁! = 2 = 2 . 1 + 0 ⇒ 𝑎! = 0 𝑁! = 1 = 2 . 0 + 1 ⇒ 𝑎8 = 1 Portanto o número (347)10 na base binária é: (101011011) No caso geral, considere um número inteiro N na base 10 e sua representação binária denotada por: (𝑎!𝑎!!!…𝑎!𝑎!𝑎!)!. O algoritmo a seguir obtém a cada k o dígito binário 𝑎!. Passo 0: Cálculo Numérico – Unitoledo 5 𝑘 = 0 𝑁! = 𝑁 Passo 1: Obtenha 𝑞! e 𝑟! tais que: 𝑁! = 2. 𝑞! + 𝑟! faça 𝑎! = 𝑟! Passo 2: Se 𝑞! = 0, pare! Caso contrário, faça 𝑁!!! = 𝑞! Faça 𝑘 = 𝑘 + 1 e volte para o passo 1. Consideremos agora a conversão de um número fracionário da base 10 para a base 2. Sejam os exemplos: 𝑟 = 0,125, 𝑠 = 0,66666…, 𝑡 = 0,414213562… Dizemos que r tem representação finita e que s e t têm representação infinita. Dado um número entre 0 e 1 no sistema decimal, como obter sua representação binária? Considerando o número 𝑟 = 0,125 , existem dígitos binários: 𝑑!,𝑑!,… ,𝑑! tais que 0,𝑑!𝑑!…𝑑! ! será sua representação na base 2. Assim, 0,125 !" = 𝑑!. 2!! + 𝑑!. 2!! +⋯+ 𝑑! . 2!! Multiplicando cada termo da expressão acima por 2, temos: 2 . 0,125 = 0,250 = 0+ 0,25 = 𝑑! + 𝑑!. 2!! + 𝑑!. 2!! +⋯+ 𝑑! . 2!!!! e portanto, 𝑑! representa a parte inteira de 2 . 0,125 que é igual a zero e 𝑑!. 2!! + 𝑑!. 2!! +⋯+ 𝑑! . 2!!!! representa a parte fracionaria de 2 . 0,125 que é 0,250 Cálculo Numérico – Unitoledo 6 Aplicando agora o mesmo procedimento para 0,250, teremos: 0,250 = 𝑑!. 2!! + 𝑑!. 2!! +⋯+ 𝑑! . 2!!!! ⇒ 2 . 0,250 = 0,5 = = 𝑑! + 𝑑!. 2!! + 𝑑!. 2!! +⋯+ 𝑑! . 2!!!! ⇒ 𝑑! = 0 e repetindo o processo para 0,5: 0,5 = 𝑑!. 2!! + 𝑑!. 2!! +⋯+ 𝑑! . 2!!!! ⇒ 2 . 0,5 = 1,0 = = 𝑑! + 𝑑!. 2!! + 𝑑!. 2!! +⋯+ 𝑑! . 2!!!! ⇒ 𝑑! = 1,0 Como a parte fracionária de 2. 0,5 é zero, o processo de conversão termina, e teremos: 𝑑! = 0,𝑑! = 0 𝑒 𝑑! = 1 portanto, o número 0,125 !" tem representação finita na base 2, 0,001 ! “Um número real entre 0 e 1 pode ter representação finita no sistema decimal, mas representação infinita no sistema binário.” No caso geral, seja r um número entre 0 e 1 no sistema decimal e 0,𝑑!𝑑!…𝑑! … ! sua representação no sistema binário. Os dígitos binários 𝑑!𝑑!…𝑑! … são obtidos através do seguinte algoritmo: Passo 0: 𝑟! = 𝑟; 𝑘 = 1 Passo 1: Calcule 2𝑟! Se 2𝑟! ≥ 1, faça: 𝑑! = 1 Caso contrário faça: 𝑑! = 0 Passo 2: Faça 𝑟!!! = 2(𝑟! − 𝑑!) Cálculo Numérico – Unitoledo 7 Se 𝑟!!! = 0, pare. Caso contrário, continue. Passo 3: 𝑘 = 𝑘 + 1 Volte ao passo 1. Ex.: 𝑘 = 1 = 0,125 ⇒ 2 . 0,125 = 0,25 < 1 ⇒ 𝑑0 = 0 𝑘 = 2 = 0, 25− 0 ⇒ 2 . 0,25 = 0,5 < 1 ⇒ 𝑑1 = 0 𝑘 = 3 = 0,5− 0 ⇒ 2 . 0,5 = 1 = 1 ⇒ 𝑑2 = 1 portanto, o número 0,125 !" tem representação finita binária igual a 0,001 ! Agora tome o número 𝑠 = 0,1. 𝑘! = 0, 1 ⇒ 0,1 . 2 = 0, 2 < 1 ⇒ 𝑑0 = 0 𝑘! = 0, 2− 0 ⇒ 0, 2 . 2 = 0,4 < 1 ⇒ 𝑑1 = 0 𝑘! = 0,4− 0 ⇒ 0,4 . 2 = 0,8 < 1 ⇒ 𝑑2 = 0 𝑘! = 0,8− 0 ⇒ 0,8 . 2 = 1, 6 ≥ 1 ⇒ 𝑑3 = 1 𝑘! = 1,6− 1 ⇒ 0,6 . 2 = 1,2 ≥ 1 ⇒ 𝑑4 = 1 𝑘! = 1,2− 1 ⇒ 0,2 . 2 = 0,4 < 1 ⇒ 𝑑5 = 0 𝑘! = 0,4− 0 ⇒ 0,4 . 2 = 0,8 < 1 ⇒ 𝑑6 = 0 𝑘! = 0,8− 0 ⇒ 0,8 . 2 = 1,6 . 1 ⇒ 𝑑7 = 1 𝑘! = 1,6− 1 ⇒ 0,6 . 2 = 1,2 . 1 ⇒ 𝑑8 = 1 𝑘!" = 1,2− 1 ⇒ 0,2 e o processo se repetirá novamente como o passo 𝑘! é igual ao passo 𝑘!, os resultados se repetirão, assim: 0,1 !" = 0,000110011 Com isso pode-se entender melhor porque o resultado da operação Cálculo Numérico – Unitoledo 8 𝑠 = 0,11!""""!!! não é obtido exatamente num computador. Já vimos que 0,11 !" não tem representação finita no sistema binário. Supondo um computador que trabalhe com apenas 6 dígitos, o número 0,11 !" seria armazenado como 0,000111 !, e este número representa exatamente 0,109375 !", portanto uma aproximação. Conversão de número binários em números decimais Considere o número (10111)2, para converter esse número para a base 10 procede-se da seguinte forma: 10111 ! = 1 . 2! + 0 . 2! + 1 . 2! + 1 . 2! + 1 . 2! colocando 2 em evidencia: 10111 ! = 2 . 1 . 2! + 0 . 2! + 1 . 2! + 1 . 2! + 1 10111 ! = 2 . 2 . 1 . 2! + 0 . 2! + 1 . 2! + 1 + 1 ⋮ 10111 ! = 23 Exercícios: 1 - Passe os números para a representação binária: (a) 25 (b) 100 (c) 0,15 Resposta: (a) (11001)2, (b) (1100100)2, (c) (0,0010011)2 2 - Passe os números abaixo para representação decimal. (a) (10010)2 (b) (111010)2 (c) (10)2 Cálculo Numérico – Unitoledo 9 Resposta: (a) 18 (b) 52 (c) 2 Aritmética de ponto flutuante Um computador ou calculadora representa um número real no sistema denominado aritmética de ponto flutuante. Neste sistema, o número r será representado na forma: ± .𝑑!𝑑!…𝑑! .𝛽! onde: 𝛽 é a base em que a máquina opera; t é o número de dígitos na mantissa: 0 ≤ 𝑑! ≤ 𝛽 − 1 , 𝑗 = 1,… , 𝑡 𝑑! ≠ 0; 𝑒 é o expoente no intervalo [1,u]. Em qualquer máquina, apenas um subconjunto dos números reais é representado exatamente, e, portanto, a representação de um número real será realizada através de truncamento ou de arredondamento. Considere, por exemplo, uma máquina que opera no sistema: 𝛽 = 10; 𝑡 = 3, 𝑒 ∈ −5,5 o menor número, em valor absoluto, representado nesta máquina é: 𝑚 = 0,100×10!! = 10!! e o maior número, em valor absoluto, é: 𝑀 = 0,999×10! = 99900 Cálculo Numérico – Unitoledo 10 Considere o conjunto dos números reais ℝ e o seguinte conjunto: 𝐺 = {𝑥 ∈ ℝ|𝑚 ≤ 𝑥 ≤ 𝑀} dado um número real x, várias situações poderão ocorrer: Caso 1) 𝑥 ∈ 𝐺 Por exemplo: 𝑥 = 235,89 = 0,23589×10! Observe que esse número tem 5 dígitos na mantissa. Estão representados exatamente nesta máquina os números: 0,235×10!(truncamento) e 0,236×10! (arredondamento). Caso 2) 𝑥 < 𝑚 Por exemplo: 𝑥 = 0,345×10!! Este número não pode ser representado nesta máquina porque o expoente 𝑒 é menor que o limite inferior (-5). A máquina acusa underflow Caso 3) |𝑥| > 𝑀 Por exemplo: 𝑥 = 0,875×10! Neste caso, o expoente 𝑒 é maior que o limite superior (5). A máquina acusa overflow. Exemplo: Dar a representação dos números a seguir num sistema de aritmética do ponto flutuante de três dígitos para 𝛽 = 10; 𝑚 = − 4 e 𝑀 = 4. x Representação obtida por arredondamento Representação obtida por truncamento 1,25 10,053 -238,15 2,71828... 0,000007 718235,82 0,125 . 10 0,101 . 102 -0,238 . 103 0,272 . 10 (expoente menor que -4) (expoente maior que 4) 0,125 . 10 0,100 . 102 -0,238 . 103 0,271 . 10 -------- --------
Compartilhar