Baixe o app para aproveitar ainda mais
Prévia do material em texto
CA´LCULO NUME´RICO - Lista No. 1 Representac¸a˜o de nu´meros e aritme´tica de ponto flutuante Prof. Daniel G. Alfaro Vigo 1. Expresse os nu´meros a seguir usando representac¸a˜o em ponto flutuante normalizada na base indicada: a) (5, 987)10 b) (630)10 c) (0, 000000512)10 d) (1111)2 e) (10, 11)2 f) (0, 0001000)2 2. Refac¸a o exerc´ıcio anterior usando apenas 3 d´ıgitos de precisa˜o (na˜o suponha limites para o expoente). 3. Considere uma ma´quina com sistema de representac¸a˜o de nu´meros definido por: base 10, precisa˜o de 6 d´ıgitos na mantissa e expoente no intervalo: [−6; 6]. Pede–se: a) qual o menor e o maior nu´mero em mo´dulo representa´veis nesta ma´quina? b) como sera´ representado o nu´mero 1892477 nesta ma´quina se for usado o arredonda- mento? E se for usado o truncamento? c) Se a = 257820 e b = 0.6 qual o resultado de a + b se for usado o arredondamento? E se for usado o truncamento? Justifique o resultado. d) Considerando ainda, a = 257820 e b = 0.6, qual o resultado da operac¸a˜o: a + ∑10 i=1 b, considerando que esta´ sendo realizado o truncamento? e) Repetir o item (d), para a operac¸a˜o: ∑10 i=1 b + a. f) O que podemos concluir sobre a validade das propriedades como: comutativa, associa- tiva, elemento neutro da adic¸a˜o de nu´meros em aritme´tica de ponto flutuante? 4. Para a equac¸a˜o quadra´tica 10−q x2 − (1.4 + 2.5× 10−q)x + 3.5 = 0. a) Verifique que x1 = 1.4× 10q e x2 = 2.5 sa˜o as ra´ızes exatas. b) Use o software da sua prefereˆncia (Matlab, Scilab, GNU Octave, Mathematica, Python, etc.) ou uma calculadora, para determinar as ra´ızes da equac¸a˜o acima mediante a fo´rmula x1,2 = −b±√b2 − 4ac 2a , quando q = 5, 11, 12 e 15. c) Explique o desacordo entre os resultados aproximados e exatos. d) Verifique que as fo´rmulas x1 = −b− s√b2 − 4ac 2a , x2 = c ax1 , onde s representa o sinal de b sa˜o va´lidas. e) Use as fo´rmulas acima para obter as ra´ızes para os mesmos valores de q. Explique o resultado. 1 5. Escreva um programa, na linguagem de sua prefereˆncia, para obter uma tabela de nu´meros com os resultados: k, k!, para k = 1, 2, 3, . . . , n. Este programa certamente resulta em “overflow” para valores de n grande. Qual e´ este valor? Por queˆ? 6. Precisa˜o da Ma´quina A precisa˜o da ma´quina e´ definida como sendo o menor nu´mero positivo em aritme´tica de ponto flutuante, ε, tal que : (1 + ε) > 1. Este nu´mero depende totalmente do sistema de representac¸a˜o da ma´quina: base nume´rica, total de d´ıgitos na mantissa, da forma como sa˜o realizadas as operac¸o˜es e do compilador utilizado. E´ importante conhecermos a precisa˜o da ma´quina porque em va´rios algoritmos precisamos fornecer como dado de entrada um valor positivo, pro´ximo de zero para ser usado em testes de comparac¸a˜o com zero. O algoritmo abaixo estima a precisa˜o da ma´quina : Passo 1 : A = 1 s = 1 + A Passo 2 : Enquanto s > 1, fac¸a : A = A/2 s = 1 + A Passo 3 : Fac¸a Prec = A ∗ 2 e imprimir Prec . a) Teste este algoritmo, na linguagem de sua prefereˆncia. Declare as varia´veis do programa em precisa˜o simples e execute o programa; em seguida, declare as varia´veis em precisa˜o dupla e execute novamente o programa. b) Interprete o passo 3 do algoritmo, isto e´, por que a aproximac¸a˜o para Prec e´ escolhida como sendo o dobro do u´ltimo valor de A obtido no passo 2? c) Na definic¸a˜o de precisa˜o da ma´quina, usamos como refereˆncia o nu´mero 1. No algoritmo abaixo a varia´vel ω e´ um dado de entrada, escolhido pelo usua´rio: Passo 1 : A = 1 s = ω + A; Passo 2 : Enquanto s > ω, fac¸a : A = A/2 s = ω + A Passo 3 : Fac¸a Prec = A ∗ 2 e imprimir Prec . c.1) Teste seu programa atribuindo para ω os nu´meros : 10−1, 10−4, 10−8, 10, 17, 100, 184, 1000, 1575, 10000, 17893. c.2) Para cada valor diferente para ω imprima o valor correspondente obtido para Prec. Justifique por que Prec se altera quando ω e´ modificado. 7. Ca´lculo de exp(x) O objetivo e´ calcular exp(x) pela fo´rmula de Taylor ate´ ordem n em torno de zero: exp(x) ≈ 1 + x + x 2 2! + x3 3! + x4 4! + · · ·+ x n n! a) Escreva um programa numa linguagem da sua escolha para obter a aproximac¸a˜o para exp(x) usando a fo´rmula de Taylor. O valor de x e o nu´mero de termos da se´rie, n, sa˜o dados de entrada deste programa. Observe que o ca´lculo do fatorial: k!, necessa´rio na se´rie de Taylor, pode ser feito de 2 modo a evitar o ocorreˆncia de overflow. Para isso o termo k-e´simo pode ser escrito como: xk/k! = xk−1/(k − 1)! ∗ (x/k), onde o fator xk−1/(k − 1)! ja´ esta´ calculado, pois a se´rie esta´ sendo avaliada a partir do primeiro termo. (Um erro comum no uso da fo´rmula de Taylor para o ca´lculo de exp(x) e´ escrever algum “procedimento” auxiliar para avaliar o fatorial.) Evitando o overflow a se´rie de Taylor pode ser calculada com tantos termos quanto se queira. Qual seria um crite´rio de parada para se interromper o ca´lculo da se´rie, que na˜o seja a comparac¸a˜o com o valor exato de exp(x)? b) Teste seu programa com va´rios valores para x: positivos, negativos, (x ≈ 0 e x distante de zero) e, para cada valor de x, teste o ca´lculo da se´rie com va´rios valores para o nu´mero de termos: n. Analise os resultados obtidos. 8. Acesse o site www.math.psu.edu/dna/disasters/ onde esta˜o relatados tres casos reais nos quais houve um desastre ou acidente provocado por erros em aritme´tica de ponto flutuante. Escolha um, fac¸a uma ana´lise e comenta´rios. Outra pa´gina interessante sobre erros se encontra no link: http://wwwzenger.informatik.tu-muenchen.de/persons/huckle/bugse.html Para saber mais sobre ponto flutuante, existem va´rios sites que podem ser consultados, dentre eles: www.cs.berkeley.edu/~wkahan E apenas como curiosidade, pode-se ter uma ide´ia das ma´quinas com a maior capacidade computacional do mundo; essa lista esta´ dispon´ıvel no site www.top500.org. Utilidades: Conversor de base http://wims.unice.fr/wims/ Python Homepage Scilab Homepage (software livre para programac¸a˜o nume´rica Iniciac¸a˜o ao Scilab (pdf em portugueˆs, autor: Prof. Lu´ıs Soares Barreto) Tutoriais de Matlab: http://www.math.mtu.edu/~msgocken/intro/intro.html (em ingleˆs), http://w3.impa.br/~zubelli/tutorial/ (em portugueˆs). 3
Compartilhar