MS 211 Cálculo Numérico Segundo Semestre de 2011 Petronio Pulino DMA/IMECC/UNICAMP e-mail: [email protected] www.ime.unicamp.br/∼pulino/MS211/ Lista de Exercı́cios 02 Zeros Reais de Funções Reais 1. a.) Usando fórmula de Taylor, obtenha as aproximações linear e quadrática de f (x) = cos(x), em torno de π/4 ; b.) Em um mesmo gráfico, esboce a curva y = cos(x) e as aproximações linear e quadrática obtidas em (a). Através do gráfico analise o comportamento das aproximações, constatando que estas são “boas”aproximações apenas localmente. Qual das curvas você escolheria para aproximar f (x) em torno de π/4 ? ( Os gráficos podem ser traçados usando o Matlab, o Mathematica ou ainda na calculadora). 2. Localize graficamente os zeros das funções a seguir: a) f (x) = 4 cos(x) − exp(2x) b) f (x) = x/2 − tan(x) c) f (x) = 1 − ln(x) d) f (x) = 2x − 3x e) f (x) = x3 + x − 1000 3. Usando o método de Newton, obtenha um processo para obter b/a numa calculadora que soma, subtrai e multiplica. Obtenha uma aproximação para o valor de 3/13 . √ b . Aplique o método de Newton 4. A equação √ x2 − b = 0 tem como raiz exata para obter 3356 com precisão 10−4 se estiver usando um computador e precisão 10−2 se estiver usando uma calculadora não programável. 5. A equação x2 + t = 0 possui raiz real somente se t ≤ 0 . Faça t = 0 e aplique os métodos: bissecção, Newton e secante com as seguintes aproximações iniciais (use ε = 10−4 ): i) Para o método da bissecção (usando o algoritmo dado em aula com critério de parada (b − a) < ε): [a, b] = [−2, 2] e [a, b] = [−5, 2]. Justifique o que acontece em cada caso; para Newton, use x0 = −2 e para secante: x0 = −2 e x1 = 2; ii) Repita o exercı́cio para um valor de t estritamente positivo e usando as mesmas aproximações iniciais. Justifique o comportamento da sequência gerada em cada caso, considerando as hipóteses de convergência de cada método. 1 6. Use os métodos de bissecção, Newton e Secante (programados para rodar no MatLab, ou em alguma outra linguagem) para obter a menor raiz positiva das equações a seguir com precisão 10−7 , (se usar apenas uma calculadora, faça precisão igual a 10−3 ). a) x/2 − tg(x) = 0; b) 2cos(x) − exp(x)/2 = 0; c) x5 − 6 = 0. Faça uma tabela para apresentar uma comparação entre os métodos, mostrando para cada teste: o número de operações (comando flops do MatLab ) efetuadas para obter a raiz e o número de iterações. Para efeitos de comparação: se a aproximação inicial para a bissecção for o intervalo [a, b] use a como chute inicial para o método de Newton e a e b como chutes iniciais para o método da secante. 7. Calcule a raiz cúbica de 4 com precisão 10−3 através de um método para resolução de equações. Justifique sua escolha. 8. O método de Newton Modificado consiste em gerar a sequência {xk } através de: xk+1 = xk − f (xk )/f 0 (x0 ) onde x0 é uma aproximação inicial. a) com auxı́lio de um gráfico, escreva a interpretação geométrica deste método; b) cite vantagens de desvantagens deste método em relação ao método de Newton. 9. O valor de π pode ser obtido através da resolução das seguintes equações: sen(x) = 0 e cos(x) + 1 = 0. Aplique o método de Newton com x0 = 3 e precisão 10−4 em cada caso e compare os resultados. 10. Considere a função f (x) = x2 /2 + x(ln(x) − 1) . Obtenha seus pontos crı́ticos com o auxı́lio de um método para zeros de funções. 11. Seja f (x) = xe−x − e−3 . (a) verifique gráfica e analiticamente que f (x) possui um zero no intervalo [0, 1]; (b) justifique teoricamente o comportamento da sequência {xk } colocada a seguir, gerada pelo método de Newton para o cálculo de zero de f (x) em [0, 1], com x0 = 0.9 e precisão ε = 5 × 10−6 . x0 x1 x2 x3 x4 = = = = = 0.9 −6.8754 −6.0024 −5.1452 −4.3079 x5 x6 x7 x8 x9 = = = = = −3.4962 −2.7182 −1.9863 −1.3189 −0.7444 x10 x11 x12 x13 = = = = −0.3041 0.0427 0.0440 0.0480 12. Uma das dificuldades do método de Newton é o fato de uma aproximação xk ser tal que f 0 (xk ) = 0 . Uma modificação do algoritmo original para prever estes casos consiste em: dado λ um número positivo próximo de zero e supondo f 0 (x0 ) ≥ λ , a sequência xk é gerada através de: xk+1 = xk − f (xk )/F L, onde FL = 0 k = 0, 1, 2, · · · 0 f (xk ), se | f (xk ) |> λ 0 f (xw ), caso contrário 0 onde xw é a última aproximação obtida tal que f (xw ) |≥ λ. 2 Pede-se: (a) baseado no algoritmo de Newton, escreva um algoritmo para este método; (b) aplique este método à resolução da equação x3 −9x+3 = 0, com x0 = −1.275, λ = 0.05 e ε = 0.05. Alguns comandos do Matlab flops significa : operações em ponto flutuante. No MatLab, para saber quantas operações foram realizadas devemos zerar o contador de número de flops através do comando flops(0) em seguida executamos o programa; após esta execução deve ser dado o comando flops que devolverá o total de flops usadas para a execução daquele programa. Os métodos da Bissecção, Newton e Secante podem ser programados usando o MatLab. Todos precisam de um procedimento para avaliar o valor da função. Usando como exemplo a função: f (x) = ln(x) + x − 5 o arquivo para avaliar a função seria: function f=func(x) f = log(x) + x - 5; Este arquivo deverá ser denominado : func.m. A declaração “function”é necessária para estabelecer que este programa se refere a uma função que será usada por outro programa. Os nomes das variáveis “f”e “x”são escolhidos pelo usuário e, log é a função interna do Matlab para o “ln”. Em qualquer programa do MatLab que apareça a linha de comando: v = func(x0) significa que a variável v recebe o valor da função programada no arquivo func.m avaliada em x0. Portanto, x0 deverá ser calculado antes da chamada de func. Observar que no caso do método de Newton, além do programa para avaliar a função será necessário escrever um programa para avaliar a derivada. No exemplo, em que f (x) = ln(x) + x − 5 teremos f 0 (x) = 1/x + 1 e um programa para esta derivada seria: function d=deriv(x) d = 1/x + 1; Este arquivo deverá ser denominado : deriv.m. O MatLab possui uma “function”que obtém uma aproximação para o zero de uma dada função. O comando fzero( ’func’, 3, 1.e-4, 1) faz com que o zero da função programada no arquivo func.m seja encontrado usando chute inicial 3 com precisão 10−4 . O número 1 que aparece como último argumento indica que queremos ver um resumo das iterações realizadas. O comando v=[3,4] corresponde a criar o vetor v = (3,4) dentro do MatLab. O comando fzero( ’func’, v, 1.e-4, 1) faz com que o zero da função programada no arquivo func.m seja encontrado usando como chute inicial o intervalo [3, 4]. 3 Obtenha os zeros das funções do exercı́cio 5 usando o comando fzero. Conte o número de flops e o de iterações e compare com os resultados dos outros métodos: bissecção, Newton e secante. Os zeros de f (x) podem ser localizados usando o comando plot do MatLab; considerando a função f (x) = ln(x) + x − 5 como exemplo, o programa abaixo que tem como resultado o gráfico de f(x) “plotado”quando a variável x pertence ao intervalo [0.1; 7]: hx = 4.0 / 128; x = 1.0:hx:5.0; y = log(x) + x - 5.0; % figure(1), plot(x,y), grid on title(’Localizacao Grafica de Raizes’) xlabel(’Grafico da Funcao f(x) = ln(x) + x - 5’) e, o programa a seguir, plota as curvas: ln(x) e 5 − x no mesmo gráfico, para localizar os pontos onde as duas se interceptam: hx = 4.0 / 128; x = 1.0:hx:5.0; y = log(x); z = 5.0 - x; % figure(2), plot(x,y,x,z), grid on title(’Localizacao Grafica de Raizes’) xlabel(’Graficos das Funcoes g(x) = ln(x) e h(x) = 5 - x’) Nos programas acima, o comando figure(1) é dado para abrir (ou acionar) uma janela gráfica. Se a janela para figure(1) já estiver aberta, este comando simplesmente torna esta janela ativa para plotar o gráfico. O comando clf irá apagar um gráfico ou desenho da janela da figura (1). Finalmente, o comando hold é dado para que o gráfico da próxima curva seja plotado sobre o anterior. 4