aritmética de máquina

9

Click here to load reader

Upload: antonio-eduardo-assis-amorim

Post on 09-Jul-2015

3.865 views

Category:

Documents


1 download

DESCRIPTION

Curso de análise numérica - capítulo 2

TRANSCRIPT

Page 1: Aritmética de máquina

2010

FATEC-JAHU

Fatec-Jahu/CEETEPS

20/07/2010

Aritmética de máquina

Page 2: Aritmética de máquina

Aritmética de máquina

FATEC-JAHU, Fatec-Jahu/CEETEPS

Resumo

A aritmética de maquina visa a mostrar os possíveis problemas encontradas devido as limitações da máquina.

Conteúdo Resumo ....................................................................................................................................................................................... 2

Capítulo 1 Introdução .................................................................................................................................................................. 3

1.1 Valores exatos e aproximados ............................................................................................................................................... 3

1.2 Dígitos significativos .............................................................................................................................................................. 5

1.3 Truncando o número ............................................................................................................................................................. 5

1.4 Arredondamento ................................................................................................................................................................... 5

1.5 Erros ..................................................................................................................................................................................... 6

1.6 Precisão da máquina ............................................................................................................................................................. 7

1.7 Instabilidade ......................................................................................................................................................................... 7

Índice Remissivo .......................................................................................................................................................................... 9

Page 3: Aritmética de máquina

Capítulo 1 Introdução

A resolução de problemas feito em máquinas ou computadores pode apresentar comportamentos surpreendentes, devido às

limitações existentes na fabricação. Como exemplo considere as seguintes operações

1

2

2 / 3

3 / 5

( )

( )

/

h

x h

y h

e x x x h

f y y y y y h

g f e

Realizando estas operações no Excel temos os seguintes resultados

0,5 0,166667 0,1 0 0 #DIV/0!

No programa Scilab a entrada de dados é feita normalmente, ou seja, Variável = valor. Se colocar ponto e vírgula no final, a

expressão não é impressa no console enquanto sem o ponto vírgula aparece o resultado.

Figura 1. Formas para se atribuir valor à variável.

Exercício 1. Realize as seguintes operações: h=1/2, x=2/3-h, y=3/5-h, e1=3*x-h, f=5*y-h e g=e1/f.

Analiticamente temos para o dados do exercício 1 os seguintes valores

1

2

4 3 12 / 3 1/ 2

6 6

6 5 13 / 5 3 / 5 1/ 2

10 10

3 1( ) 0

6 2

5 1( ) 0

10 2

/

h

x

y h

e x x x h

f y y y y y h

g f e indefinido

Perceba a diferença de comportamento. Isto será discutido mais adiante.

1.1Valores exatos e aproximados

Consideremos um problema cuja solução é um número real. Este número é designado por valor exato do problema e, no que se

segue, será representado por x.

Page 4: Aritmética de máquina

Designa-se por valor aproximado e representa-se por x*, qualquer valor que se pretende utilizar como solução do problema.

Associado a um dado valor aproximado x* define-se o erro de aproximação como a diferença entre o valor exato e o valor

aproximado, isto é,

* *x x x

Exemplo 1.O comando PI no Scilab é %pi. Encontre este valor. Suponha que uma solução real seja 3,14159265359.

Determine o erro.

Solução: O painel fica

Figura 2.Exemplo 1.

O valor absoluto do erro é *x . O comando de módulo para um número é ABS(valor).

Exemplo 2.Calcule o erro absoluto.

Em geral este valor não é conhecido. Assim, a situação mais comum é aquela em que se conhece um determinado valor

aproximado x* e um intervalo para o erro de aproximação Δx*. Às vezes é empregado o erro máximo absoluto ε. Então, se x* for

um valor aproximado de x com um erro máximo absoluto ε, verifica-se que x ∈ [x∗ − ε, x∗ + ε], ou seja, *x x .

Ao escrever-se x = 1.23±0.02, pretende dizer-se que 1.23 é uma aproximação de x com um erro máximo absoluto de 0.02, ou

seja, isto significa que x estará no intervalo [1.21, 1.25]. Outra forma de caracterizar uma aproximação x* é através do erro

relativo, que se define por

*x

x

ou erro relativo aproximado

*

*

x

x

Definimos erro máximo relativo como sendo

'

x

na qual ε representa o erro máximo absoluto. Podemos em alguns casos usar a aproximação

'

*x

Exemplo 3.Qual o significado do valor 1,25 0,05 ? Isto significa que x está no intervalo 1,2 1,3x .

Em geral os erros máximos ou relativos se apresentam com um número reduzido de casas decimais, em torno de duas.

Page 5: Aritmética de máquina

Exemplo 4.Seja x*=3,45 e 0,01 . Determine ' . Assim

30,01' 3 10

3,45

1.2Dígitos significativos

Um número real x é representado na forma decimal (base 10) pelo seu sinal (+ ou -) e por uma seqüência finita ou não de

algarismos posicionada relativamente à vírgula ou ponto. Estes são os dígitos significativos.

1 1 0 1 2 3x = ±d d d d .d d dn n

Uma forma compacta de expressar o digito é

1 1 0 1 2 3x = ±d d d d .d d d ×10e

n n

Os d’s são conhecidos por mantissa enquanto e é o expoente.

1.3Truncando o número

Truncar um número é escrever o mesmo com um número menor de algarismos que está inicialmente apresentado. Por exemplo o

número 1,23456789 se é truncado com 6 algarismos significativos fica 1,23456. No Scilab o comando é

msprintf('%valor1.valor2f',número a ser truncado) na qual valor 1 é a quantidade de algarismos no lado esquerdo da vírgula e

valor 2 a quantidade de dígitos depois da vírgula.

Exemplo 5. Truncar o valor de PI para 5, 6 e 7 casas decimais

Solução: Obtemos os seguintes valores

-->msprintf('%3.5f',%pi)

ans = 3.14159

-->msprintf('%3.6f',%pi)

ans = 3.141593

-->msprintf('%3.7f',%pi)

ans = 3.1415927

Exercício 2.Calcule para 6, 7 e 8 os valores de 23

.

1.4Arredondamento

Arredondamento é a aproximação de um número para um número de ponto flutuante e pode ser feita de maneiras diversas.

Existem os arredondamentos para cima, para baixo ou para o número de máquina mais próximo. Seguem os seguintes

comandos no Scilab, válido para inteiros:

Arredonda para o menor inteiro – Fix(valor); por exemplo: fix(3.5), ans = 3.000D+00;

Para o inteiro mais próximo – Round; por exemplo: round(3.5), ans = 4.000D+00;

Arredondamento para o inteiro menor ou igual ao número; por exemplo: floor(3.5), ans = 3.000D+00;

Page 6: Aritmética de máquina

arredonda o número para o inteiro maior ou igual ao número; por exemplo:ceil(3.5), ans = 4.000D+00

Existe outro tipo de arredondamento que segue as regras:

se valor é menor que 5, o algarismo anterior se mantém;

se valor é maior ou igual a 5, o algarismo anterior é elevado em mais uma unidade.

O comando para Scilab é sprintf('%valor1.valor2f',valor)

Exemplo 6. Considere o valor de PI e vejas os seus valores para 3, 4, 5 e 6 algarismos após a vírgula.

Solução: -->sprintf('%3.3f',%pi) ans = 3.142

-->sprintf('%3.4f',%pi) ans = 3.1416

-->sprintf('%3.5f',%pi) ans = 3.14159

-->sprintf('%3.6f',%pi) ans = 3.141593

Exercício 3.. Calcule a expressão 6

para 5, 6, 7 e 8 dígitos.

1.5Erros

Existem vários tipos de erros mas iremos nos concentrar em apenas três: os inerentes, os de discretização e os de

arredondamento. Os inerentes aparecem na criação ou simplificação do modelo matemático.

Exemplo 7. Considere que a solução do modelo seja sin cos 0,2x x . Podemos imaginar que a solução seja próxima de

zero e que nesta região a função cos não varia muito, pois é quase 1. Logo o modelo se reduz a sin 0,2x cuja solução é

sin(0,2) 11,53ºx a . O comando no Scilab é asin se quer o ângulo em radianos ou asind se em graus. Obtemos então

asind(0.2) ans = 11.54. Contudo sabemos que 1

sin cos sin(2 )2

x x x . Logo a solução é 1/2*asind(2*0.2)

ans = 11.79. O erro desta aproximação é 0,25º ou em radianos 0,004.

Os erros de discretização ou de truncamento são erros cometidos quando se troca o processo infinito por um processo finito ou

discreto.

Exemplo 8. A constante e pode ser obtida por meio da relação

0

1

!n

en

Para obtermos estes valores vamos precisar dos seguintes comandos do Scilab: factorial(valor)1 . A soma em um

loop(laço) é feito usando o comando

For variável=valor inicial:valor final2

Comandos

1 Convém lembra que para n>9, o resultado aparece ******, mas para visualizar o valor usar sprintf

2 Aqui é assumido incremento igual a 1.

Page 7: Aritmética de máquina

End

As instruções são escritas no editor do Scilab, devendo o arquivo ser salvo. Para rodar clique em execute e load into Scilab.

Fazendo para 10 iterações temos

Figura 3. Código do exemplo 8 para 10 iterações.

h=2,718.

Exercício 4. Calcule para 30 iterações, apresentando o resultado com 10 casas decimais.

Voltando ao assunto do erro de discretização vamos comparar com o valor da constante e. No Scilab esta constante é %e.

Exercício 5. Usando 10 casas decimais, calcule a diferença entre esta constante e o valor encontrado em 10

iterações e em 30 iterações.

Erros de arredondamento surgem em máquinas digitais para representar números reais.

1.6Precisão da máquina

O seguinte programa permite identificar a precisão da máquina. O comando while(condição),comandos;end faz um loop até que

a condição seja satisfeita.

Algorítmo 1. Algoritmo para verificar precisão da máquina:

eps=1;

while eps+1>1, eps=0.5*eps; end

sprintf('%3.20f',eps)

Existe uma instrução pré-definida do Scilab que permite encontrar a precisão da máquina - %eps.

Exercício 6. Encontre a precisão da máquina.

1.7Instabilidade

Existe uma situação importante nos cálculos é verificar a estabilidade dos resultados.

Exemplo 9. Imagine que desejamos calcular a expressão 0 !

nx

n

xe

n

usando 10 iterações.Para x=1 temos o seguinte

código

Algorítmo 2. Algoritmo e

h=0;

Page 8: Aritmética de máquina

x=1;

for n=0:10

h=h+x^n/factorial(n);

end

sprintf('%3.10f',h)

O resultado é 2.7182818011 cujo erro é bem pequeno. Para isto escreva sprintf('%3.10f',(2.7182818011-%e)/%e) cujo

resultado é -0.0000000101, ou seja o erro é muito pequeno pois ocorre na oitava casa decimal.

Para x= -5.5, temos 0.4872310519 dando um erro de mais de 100%. Isto ocorre por causa de subtração de grandezas quase

iguais e soma de grandezas de diferentes ordens. Este efeito é chamado cancelamento subtrativo ou cancelamento catastrófico.

Exercício 7. As raízes da equação de segundo grau são dadas pela expressão

2 4

2

b b acx

a

Se a=1, b= 510 e c=1, calcule as raízes. O comando Scilab para raiz quadrada é sqrt(valor).

Page 9: Aritmética de máquina

Índice Remissivo

%e, 7

%pi, 4

ABS, 4

Arredondamento, 5

asin, 6

asind, 6

ceil, 6

dígitos significativos, 5

end, 7

erro de aproximação, 4

estabilidade dos resultados, 7

expoente, 5

factorial, 6

fix, 5

floor, 5

For, 6

mantissa, 5

msprintf, 5

precisão da máquina, 7

round, 5

sprintf, 6

sqrt, 8

tipos de erros, 6

Truncar, 5

valor absoluto, 4

valor aproximado, 4

valor exato, 3

while, 7