Conteúdo: 1.! Aritmética Computacional 2.! Solução de Equações Não-Lineares 3.! Solução de Sistemas de Equações Lineares 4.! Interpolação 5.! Aproximação de Funções 6.!

Integração Numérica 7.! Resolução Numérica de Equações Diferenciais Ordinárias Referências: •! Franco, N.B. Cálculo Numérico. São Paulo: Pearson, 2006. •! Sperandio, D.; Mendes, J.T.; Silva, L.H.M. Cálculo Numérico – Características Matemáticas e Computacionais dos Métodos Numéricos. São Paulo: Pearson, 2003. •! Ruggiero, M.A.G.; Lopes, V.L.R. Cálculo Numérico – Aspectos Teóricos e Computacionais. São Paulo: Makron Books, 1997. •! Página da disciplina: www.feg.unesp.br/~mapereira/index_arquivos/CN.htm
ELFS/MAP © 2012

Considere o seguinte problema: A velocidade v (em m/s) de um objeto, em função do tempo t (em s), satisfaz o seguinte problema de valor de contorno: v” – v’ = t2 com v(0) = 1 e v(4) = 9

Deseja-se: •! Aproximar v(t) por um polinômio do 3º grau; •! Calcular o espaço percorrido pelo objeto entre os instantes t = 0s e t = 4s; •! Determinar os instantes de tempo em que o objeto tem velocidade nula. Como usar o computador para resolver esse problema?

ELFS/MAP © 2012

Cálculo Numérico compreende: •! A análise dos processos (modelagem) que resolvem problemas matemáticos por meio de operações aritméticas; •! O desenvolvimento de uma seqüência de instruções (algoritmo) que levem às respostas numéricas desejadas; •! O uso de computadores para obter as respostas numéricas, o que implica em escrever o método numérico como um programa de computador. Espera-se, com isso, obter respostas confiáveis para problemas matemáticos. No entanto, não é raro acontecer que os resultados obtidos estejam distantes do que se esperaria obter. Por quê?

ELFS/MAP © 2012

•! Erros de arredondamento: limitação na quantidade de números com

representação exata pelo computador (números de ponto flutuante): (0.1)10 = (0.00011 0011 0011...)2

•! Erros de significação: propagação dos erros de arredondamento nos resultados das operações aritméticas realizadas pelo computador (perda de algarismos significativos). •! Erros de modelagem: imprecisão na aproximação da situação física que representa o fenômeno, ou nos dados utilizados (dados empíricos, medição grosseira etc.); •! Erros de truncamento: processos numéricos infinitos dever ser aproximados por um processo numérico finito, devido a limitações práticas:

•! Instabilidade do processo numérico: devido ao caráter iterativo de alguns processos numéricos, a propagação dos erros de significação pode apresentar taxa de crescimento exponencial.
ELFS/MAP © 2012

Seja x um número fracionário do sistema decimal:
$

( x )10 = % dk " 10 # k ,
k =1

onde dk ! {0, 1, 2, 3, ..., 9}. Exemplos:

!

= 0.25 = 2"10-1 + 5"10-2 = 0.333... = 3"10-1 + 3"10-2 + 3"10-3 + ... Se existe k’ tal que dk = 0, #k $ k’, então a fração é limitada. Do contrário, a fração é ilimitada (podendo ou não ser periódica).

ELFS/MAP © 2012

Seja x um número fracionário do sistema binário:
$

( x ) 2 = % bk " 2 # k ,
k =1

onde bk ! {0, 1}. Exemplos: ! (0.625)10 = (0.101)2 = 1"2-1 + 0"2-2 + 1"2-3 (0.6)10 = (0.10011001...)2 = 1"2-1 + 0"2-2 + 0"2-3 + 1"2-4 + 1"2-5 + 0"2-6 + 0"2-7 + 1"2-8 +... Se existe k’ tal que bk =0, #k $ k’, então a fração é limitada. Do contrário, a fração é ilimitada (podendo ou não ser periódica).

ELFS/MAP © 2012

Qualquer número x, com partes inteira e fracionária, possui representação em uma determinada base de numeração !, da seguinte forma: x =(im...i1i0.f1f2...fn)! = im!!m + ... + i1!!1 + i0!!0 + f1!!–1 + f2!!–2 + ... + fn!!–n onde ik (k = 0, 1, ..., m) e fj (j = 1, 2, ..., n) são símbolos que pertencem ao conjunto S = {s ! N : 0 ! s < !} (ou os dígitos permitidos no sistema). Exemplos: •! Sistema decimal: ! = 10 e S = {0, 1, 2, 3, 4, 5, 6, 7 ,8 , 9}. •! Sistema octal: ! = 8 e S = {0, 1, 2, 3, 4, 5, 6, 7}. •! Sistema binário: ! = 2 e S = {0, 1}.

ELFS/MAP © 2012

Parte inteira: divide-se sucessivamente por 2 (divisão inteira), até que o quociente final seja 0. A representação equivalente na base binária é obtida pela concatenação dos restos, na ordem inversa de sua obtenção. Exemplo: 347 2 1 173 2 1 86 0

2 43 1

2 21 1

2 10 0

% (347)10 = (101011011)2 2 5 1

2 2 0

2 1 1

2 0

ELFS/MAP © 2012

Parte fracionária: multiplica-se por 2 e subtrai-se a parte inteira, sucessivamente, até que o produto final apresente parte fracionária igual a zero ou até que seja observada a ocorrência de uma dízima. Exemplos: a) 0.625 " 2 = 1.25 0.25 " 2 = 0.5 0.5 " 2 = 1.0 b) 0.6 0.2 0.4 0.8 0.6 " " " " " 2 2 2 2 2 = = = = = 1.2 0.4 0.8 1.6 1.2

&1 &0 &1 &1 &0 &0 &1 &1…

% (0.625)10 = (0.101)2

% (0.6)10 = (0.100110011001...)2

OBS: Um número real entre 0 e 1 pode ter representação finita no sistema decimal, mas representação infinita no sistema binário.
ELFS/MAP © 2012

Basta utilizar a expressão da forma geral com ! = 2. Exemplo: (1001.1001)2 = 1"23 + 0"22 + 0"21 + 1"20 + 1"2-1 + 0"2-2 + 0"2-3 + 1"2-4 = 1"8 + 0"4 + 0"2 + 1"1 + 1" + 0" + 0" + 1"

= 8 + 0 + 0 + 1 + 0.5 + 0 + 0 + 0.0625 = (9.5625)10

ELFS/MAP © 2012

Um número real x pode ser representado como:

x = ±m " !e
•! m : mantissa •! ! : base do sistema de numeração •! e : expoente Exemplos: x = (721.5438)10 ! x = 721.5438 " 100 = 72.15438 " 101 = 721543.8 " 10–3 x = (–1101.01)2 ! x = –1101.01 " 20 = –11.0101 " 22 = –11010.1 " 2–1 Quando 1 ! |m| < ! tem-se um número real normalizado. Exemplos: x = (721.5438)10 x = (–1101.01)2

! x = 7.215438 " 102 ! x = –1.10101 " 23
ELFS/MAP © 2012

Os números reais representáveis em um computador de forma exata são denominados números de ponto flutuante. No computador, os números de ponto flutuante são representados na forma normalizada da base binária:

x = (–1)1–s " 1.f " 2e–127
onde f corresponde à parte fracionária da mantissa, s é o valor do bit de sinal e e é o valor do expoente. Segundo a norma IEEE 754-1985, a organização da memória para a representação de um número de ponto flutuante de precisão simples em um computador de 32 bits é:

ELFS/MAP © 2012

Um sistema de ponto flutuante corresponde ao conjunto de todos os números de ponto flutuante representáveis e é escrito como F(!, n, emin, emax), onde: •! ! é a base de numeração. •! n é o número de bits para representação da mantissa. •! emin é o menor expoente permitido. •! emax é o maior expoente permitido.
Precisão Simples bits para a mantissa* 24 +128 –127 8 32 Simples estendida " 32 " +1024 ! –1023 " 11 " 43 Dupla 53 +1024 –1023 11 64 Dupla estendida " 64 > +16384 ! –16383 " 15 " 79

emax emin
bits para o expoente total de bits * incluindo o bit para o sinal.

O motivo para |emin| < emax é para garantir que não haja overflow em
ELFS/MAP © 2012

Exemplo: Seja o sistema F(2, 3, –1, 2). •! qual será o maior número representável? •! qual será o menor número positivo representável?
s=1 (positivos)

mantissas 1.00 1/2 1 2 4 1.01 5/8 5/4 5/2 5 1.10 3/4 3/2 3 6 1.11 7/8 7/4 7/2 7

expoentes –1 0 1 2

•! qual o total de números representáveis neste sistema? Tem-se (2 sinais) " (4 mantissas) " (4 expoentes) + (1 zero*) = 33 números.
OBS: O número 0 existe em qualquer SPF, mesmo não sendo possível representá-lo na forma normalizada.

ELFS/MAP © 2012

•! Os números de ponto flutuante representáveis não estão uniformemente distribuídos no intervalo [–7, 7];

•! A distância entre dois números de ponto flutuante consecutivos vai aumentando ao aproximar-se do extremo superior do intervalo; •! Algumas leis da aritmética que valem em R (conjunto dos números reais) não valem para F (conjunto dos números de ponto flutuante). Seja, por exemplo, F(2, 3, –1, 2): •! x = 5/2; y = 3/4 ! F, mas x + y = 5/2 + 3/4 = 13/4 ' F
a representação normalizada de 13/4 requer 4 dígitos na mantissa e, portanto, não pode pertencer à F.

•! x = 5/4, y = 3/4, z = 3/2 ! F, mas (x + y) + z ( x + (y + z)
ELFS/MAP © 2012

A representação em computador de um número de ponto flutuante deve ser limitada ao tamanho n reservado para a mantissa.

x = d0.d1d2 ... dn–1dndn+1 ... " !e
No sistema decimal (! = 10): •! Truncamento: dj " 0, j " n •! Arredondamento: se dn < 5 % dj " 0, #j " n se dn $ 5 % dn–1 " dn–1 + 1 e dj " 0, #j " n

Na aritmética de ponto flutuante, quando um valor, para ser representado, precisa de mais dígitos na mantissa do que o máximo permitido, é preciso fazer uma aproximação:

v = 9/4 = 2.25

ELFS/MAP © 2012

Somas ou subtrações: Quando dois números em ponto flutuante são somados ou subtraídos, a mantissa do número que apresenta o menor expoente é modificada de forma a igualar os expoentes. Esse ajuste tem o efeito de alinhar os pontos decimais em relação ao número com o maior expoente. Exemplo: Calcular 1.557 " 101 + 4.381 " 10–1. 1.557 " 101 0.04381 " 101 + 1.60081 " 101 &

1.601 " 101 (após arredondamento)

Multiplicações: Os expoentes são somados e as mantissas são multiplicadas. Divisão: Os expoentes são subtraídos e as mantissas são divididas. Exemplo: 2.363 " 103 * 6.423 " 10–1 = 15.177549 " 102 ) 1.518 " 103 = 8.004 " 10–2 8.004 " 10–2 8.004 " 10–2 = 0.189655… " 105 ) 1.897 " 104. Todo resultado deve ser normalizado e depois arredondado.
ELFS/MAP © 2012

Seja v* uma aproximação para v. O erro absoluto é definido como:

e o erro relativo é definido como:

v = 3.000"100, v* = 3.100"100, EA(v) = 1.0"10–1, ER(v) = 3.33... "10–2 v = 3.000"10–4 , v* = 3.100"10–4, EA(v) = 1.0"10–5, ER(v) = 3.33... "10–2 v = 3.000"103, v* = 3.100"103, EA(v) = 1.0"102, ER(v) = 3.33... "10–2
O erro relativo é mais significativo, pois considera a magnitude dos valores. Assim, ao comparar números de ponto flutuante próximos (por exemplo, para verificar a convergência de um processo iterativo) é conveniente comparar a diferença em relação ao tamanho dos números.

ELFS/MAP © 2012

Diz-se que o número v* é uma aproximação do valor v com k dígitos significativos exatos se k é o maior número inteiro não-negativo para o qual:

Exemplo: v = 2/3 v = 2/3

v* = 0.6667 (tem 4 dígitos significativos exatos) v* = 0.66998 (tem 2 dígitos significativos exatos)

A partir da representação de um valor em função de uma aproximação e do erro absoluto associado, pode-se calcular os erros envolvidos nas principais operações realizadas em um computador: x = x* + EA(x) y = y* + EA(y)

ELFS/MAP © 2012

•! Erro absoluto: x + y = (x* + EA(x)) + (y* + EA(y)) = (x* + y*) + (EA(x) + EA(y)) Ou seja, o erro absoluto da soma é a soma dos erros absolutos das parcelas:

•! Erro relativo:

Ou seja, o erro relativo da soma é um valor intermediário entre os erros relativos das parcelas.

ELFS/MAP © 2012

•! Erro absoluto: x – y = (x* + EA(x)) – (y* + EA(y)) = (x* – y*) + (EA(x) – EA(y)) Ou seja, o erro absoluto da subtração é a diferença dos erros absolutos das parcelas: •! Erro relativo:

Se x * y % " pode ser muito grande e as parcelas podem ser números muito grandes (cancelamento subtrativo)

ELFS/MAP © 2012

•! Erro absoluto:

x • y = (x* + EA(x)) • (y* + EA(y)) = x* • y* + EA(x) • y* + x* • EA(y) + EA(x) • EA(y)
Como EA(x) • EA(y) é um número muito pequeno, podemos desconsiderar este termo e assumir que o erro absoluto do produto x • y será:

EA(x • y) * x* • EA(y) + y* • EA(x)
•! Erro relativo:

ELFS/MAP © 2012

•! Erro absoluto:
admite representação em série infinita

•! Erro relativo:

ELFS/MAP © 2012

Um método numérico pode ser: •! estável: se a propagação dos erros de arredondamento e/ou truncamento tem taxa de crescimento linear: O(+) = k +. •! instável: se a propagação dos erros de arredondamento e/ou truncamento tem taxa de crescimento exponencial: O(+) = kn +, onde n é o número de iterações do processo. Exemplo: Calcular Para n = 0: % Para n > 0: %
ELFS/MAP © 2012

com , > 0, para n = 0, 1, 2, ...

O valor de In deve ser sempre positivo. Além disso, In deve decrescer à medida que n aumenta.
n 0 1 2 3 4 5 6 7 8 9 10 11 , = 0.5 1.09861 0.45069 0.27465 0.19601 0.15200 0.12400 0.10467 0.09052 0.07974 0.07124 0.06438 0.05872 , = 5.0 0.18232 0.08839 0.05804 0.04314 0.03431 0.02845 0.02443 0.02072 0.02141 0.00408 0.07962 - 0.30718

Por que os absurdos, quando , = 5.0?
ELFS/MAP © 2012

Considere que existe um erro (de arredondamento) + no valor de I0:

I0 = I0 + +
Neste caso, as próximas aproximações serão:

. . .

Se , > 1, a contribuição do erro vai crescendo de forma exponencial a cada iteração. O método iterativo proposto é, portanto, um processo numérico instável.
ELFS/MAP © 2012

Um problema é mal-condicionado se, pequenas alterações nos seus dados, resultam em grandes modificações em sua solução. O mal-condicionamento é uma propriedade do problema em si, e não do método numérico usado para resolvê-lo. Exemplo:

Solução:

Solução:

ELFS/MAP © 2012

Calcular

e

pela expansão em série de Taylor:

Para x = 1:

e ) 1 + 1 + 0.5 + 0.1667 + 4.1667"10–2 + 8.3333"10–3 + 1.3889"10–3 + 1.9841"10–4 + 2.4801"10–5 + 2.7557"10–6 = 2.7183
Comparado ao valor 2.718281828, tem-se um erro relativo de 0.66851"10–5, resultando em uma aproximação com 4 dígitos significativos.

ELFS/MAP © 2012

Para x = –5.5:

e

–5.5

= 1 – 5.5 + 15.125 – 27.730 + 38.129 – 41.942 + 38.446 – 30.208 + 20.768 – 12.692 + 6.9803 – 3.4902 + 1.5997 – ... = = 0.0026363

Comparando com valor 0.00408671439, obtido com uma calculadora, tem-se um erro relativo de 0.3549, resultando em uma aproximação com nenhum dígito significativo (devido principalmente a erros de arredondamento). Uma alternativa seria calcular .

Dessa forma, obtém-se para a aproximação o valor 0.0040865, com erro relativo de 0.5246"10–4 e 3 dígitos significativos na mantissa.

ELFS/MAP © 2012

Calcular a média aritmética de dois números a e b: Algoritmo 1 1.! 2.! 3.! 4.! ler(a, b); s - a + b; m - s / 2; exibir(m); Algoritmo 2 1.! 2.! 3.! 4.! 5.! ler(a, b); s1 - a / 2; s2 - b / 2; m - s1 + s2; exibir(m); Algoritmo 3 1.! 2.! 3.! 4.! 5.! ler(a, b); d1 - a – b; d1 - d1 / 2; m - b + d1; exibir(m);

Para um dado F(!, n, emin, emax) e a e b ! F, o algoritmo 1 pode apresentar overflow no passo 2. O algoritmo 2 pode apresentar underflow nos passos 2 e 3. Para o algoritmo 3, se a e b forem valores muito próximos, pode ocorrer o cancelamento subtrativo no passo 2.

ELFS/MAP © 2012