TRABALHO DE CONCLUSÃO DE CURSO MÉTODOS NUMÉRICOS COM R: ALGUMAS NOTAS SOBRE ZEROS DE FUNÇÕES MARCELO SÁVIO RAMOS JOINVILLE, 2015 MARCELO SÁVIO RAMOS MÉTODOS NUMÉRICOS COM R: ALGUMAS NOTAS SOBRE ZEROS DE FUNÇÕES Trabalho de Graduação apresentado ao Curso de Licenciatura em Matemática do Centro de Ciências Tecnológicas, da Universidade do Estado de Santa Catarina, como requisito parcial para a obtenção do grau de Licenciatura em Matemática. Orientadora: Prof. Dra. Elisa Henning JOINVILLE, SC 2015 MARCELO SÁVIO RAMOS MÉTODOS NUMÉRICOS COM R: ALGUMAS NOTAS SOBRE ZEROS DE FUNÇÕES Trabalho de Graduação apresentado ao Curso de Licenciatura em Matemática do Centro de Ciências Tecnológicas, da Universidade do Estado de Santa Catarina, como requisito parcial para a obtenção do grau de Licenciatura em Matemática. Banca Examinadora Orientadora: Prof. Dra. Elisa Henning Universidade do Estado de Santa Catarina Membro: Prof. Dr. Jones Corso Universidade do Estado de Santa Catarina Membro: Prof. Dr. Rogério de Aguiar Universidade do Estado de Santa Catarina Joinville, 26/06/2015. À Deus e aos meus professores. Agradecimentos Agradeço primeiramente a Deus, por estar presente todos os dias na minha vida, pelas oportunidades e a capacidade de concluir esse trabalho de graduação. Em especial a Cíntia, Débora e Maiara por toda a ajuda e carinho nos meus momentos de dificuldade, sempre me incentivando a seguir em frente. As meninas da minha turma, Emanuella, Joana e Nathiele pela amizade e ajuda, pois para mim foi um presente de Deus ter a companhia, o esforço e toda a ajuda que elas me trouxeram. A Bruna e a Juliana que sempre que possível estavam estudando comigo, e também pela amizade e ajuda, para que fosse possível a conclusão desse trabalho. A minha grande amiga Gislaine que, por muita boa vontade, me ajudou em ter lido esse trabalho. Ao professor Jones e professor Rogério por aceitarem compôr a banca examinadora. Com agradecimento especial ao professor e amigo Rogério, por sempre me compreender e me ajudar em minhas dificuldades. A minha orientadora Elisa, por toda sua dedicação e ajuda para elaboração e conclusão deste trabalho, e por sempre me acalmar em meu momentos de desespero e estresse. E aos demais professores e colegas que me ajudaram durante esta trajetória. “É muito melhor lançar-se em busca de conquistas grandiosas, mesmo expondo-se ao fracasso, do que alinhar-se com os pobres de espírito, que nem gozam muito nem sofrem muito, porque vivem numa penumbra cinzenta, onde não conhecem nem vitória, nem derrota.” Theodore Roosevelt Resumo RAMOS, Marcelo Sávio. Métodos Numéricos com R: algumas notas sobre zeros de funções. 2015. 93p.. Trabalho de Conclusão de Curso (Graduação em Licenciatura em Matemática) - Universidade do Estado de Santa Catarina, Joinville, 2015. O presente trabalho tem por objetivo explorar algumas potencialidades do pacote GNU R para aplicações em Cálculo Numérico. Inicialmente é realizada uma breve apresentação dos principais métodos numéricos vistos em cursos de graduação, sua importância e aplicações, com ênfase nos métodos para encontrar zeros de funções, como o método de Newton-Raphson e o método da Secante. Foram investigados os pacotes com funções para aproximar raízes de equações e também elaboradas rotinas com a linguagem R, sob a ótica de sua utilização em cursos de graduação. As rotinas foram aplicadas em exemplos da literatura e também num problema de estatística. Os resultados alcançados mostram que o R se constitui em uma alternativa viável para aplicações, uma vez que pode ser utilizado tanto em computadores com distintos sistemas operacionais, como numa potencial opção para uso em dispositivos móveis. Palavras-chave: Métodos Numéricos. Zeros de Funções. R. Rotinas. Abstract RAMOS, Marcelo Sávio. Numerical Methods with R: some notes on zeros functions. 2015. 93p.. Work of Course Conclusion (Graduate Degree in Mathematics) - Santa Catarina State University, Joinville, 2015. The present work aims to explore some potential of GNU R package for applications in Numerical Calculus. Initially, we made a brief presentation of numerical methods seen in undergraduate courses, its importance and applications, with emphasis on methods for root finding, such as Newton-Raphson and Secant method. R packages with functions to approximate zeros of equations were investigated and also routines were elaborated with the R language from the perspective of their use in undergraduate courses. The routines were used in examples from the literature and also on a statistical application problem. The results obtained show that R constitutes a viable alternative, since it can be used in computers with different operating systems and is a potential option for use in mobile devices. Key-words: Numerical methods. Zeros of functions. R. Routines. Lista de ilustrações Figura 1 – Interpretação Geométrica do Método de Newton-Raphson 30 Figura 2 – Método da Secante . . . . . . . . . . . . . . . . . . . Figura 3 – Interpretação Geométrica do Método da Secante . . . . 32 33 Figura 4 – Tela inicial do R . . . . . . . . . . . . . . . . . . . . . 37 Figura 5 – Interface RStudio . . . . . . . . . . . . . . . . . . . . Figura 6 – Interface R Commander . . . . . . . . . . . . . . . . . 38 39 Figura 7 – Tela inicial e de compilação do R em IOS . . . . . . . . Figura 8 – Tela inicial do R no Android . . . . . . . . . . . . . . 40 42 Figura 9 – Máquina Diferencial . . . . . . . . . . . . . . . . . . . Figura 10 – Processo de Modelagem Matemática . . . . . . . . . . 44 46 Figura 11 – Gráfico da função ϕ(x) = ln(x) + 2 . . . . . . . . . . . Figura 12 – Gráfico da função f (x) = ln(x) − x + 2 . . . . . . . . . 64 65 Figura 13 – Gráfico da função f (x) = xsin(x) + 4 . . . . . . . . . . Figura 14 – Gráfico da função f (x) = cos3 (2x) . . . . . . . . . . . . 67 68 Figura 15 – Gráfico da função f (x) = x3 − 9x + 3 . . . . . . . . . . Figura 16 – Gráfico da função f (x) = 4sin(x) − ex . . . . . . . . . 72 73 Figura 17 – Gráfico da função f (x) = x3 − 9x + 3 . . . . . . . . . . Figura 18 – Gráfico da função f (x) = 4sin(x) − ex . . . . . . . . . 74 75 Figura 19 – Ilustração do intervalo [a, b] . . . . . . . . . . . . . . . 79 Figura 20 – Gráfico interativo utilizando x0 = 5, 5 . . . . . . . . . . Figura 21 – Gráfico interativo utilizando x0 = 3, 5 . . . . . . . . . . 83 84 Lista de abreviaturas e siglas ARL Average Run Length CEP Controle Estatístico de Processos CRAN Comprehensive R Archive Network CUSUM Cumulative Sum Control Chart GPL General Public License EDO Equações Diferenciais Ordinárias EDP Equações Diferenciais Parciais HTML HyperText Markup Language IDE Integrated Development Environment Sumário INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . 21 1 MÉTODOS NUMÉRICOS . . . . . . . . . . . . . . 23 1.1 1.1.1 DEFINIÇÃO E MÉTODOS . . . . . . . . . . . . . . Zeros Reais de Funções Reais . . . . . . . . . . . . . . 23 24 1.1.1.1 Método da Bisseção 25 1.1.1.2 . . . . . . . . . . . . . . . . . . . . . Método da Falsa Posição . . . . . . . . . . . . . . . . . . 1.1.1.3 Método da Iteração Linear 27 1.1.1.4 . . . . . . . . . . . . . . . . . . Método de Newton-Raphson . . . . . . . . . . . . . . . . . 1.1.1.5 Método da Secante . . . . . . . . . . . . . . . . . . . . . 31 2 O AMBIENTE R 2.1 2.2 O SOFTWARE R . . . . . . . . . . . . . . . . . . . . O R EM DISPOSITIVOS MÓVEIS . . . . . . . . . 3 3.1 O ENSINO DE CÁLCULO NUMÉRICO . . . . . . . 43 HISTÓRIA, ENSINO E APLICAÇÕES . . . . . . . 43 4 ROTINAS E PACOTES NO R . . . . . . . . . . . . 49 4.1 4.2 ALGUMAS ROTINAS NO R . . . . . . . . . . . . . ALGUNS PACOTES DO R . . . . . . . . . . . . . . 27 28 . . . . . . . . . . . . . . . . . . . 35 35 40 49 59 CONCLUSÃO . . . . . . . . . . . . . . . . . . . . . 87 Referências . . . . . . . . . . . . . . . . . . . . . . . 89 21 INTRODUÇÃO Os Métodos Numéricos são um conjunto de técnicas pelas quais os problemas matemáticos são formulados de modo que possam ser resolvidos com operações aritméticas. Embora existam muitos tipos de métodos numéricos, eles têm uma característica em comum: envolvem um grande número de cálculos aritméticos extensos. Com o desenvolvimento de computadores digitais rápidos e eficientes, o papel dos métodos numéricos na resolução de problemas aumentou significamente nos últimos anos (CHAPRA; CANALE, 2008). Neste sentido, este trabalho é importante pelo constante uso dos métodos numéricos nas mais variadas áreas, como na Engenharia, Matemática, Física, Matemática Financeira, Estatística, entre outras. Portanto, o acadêmico deve possuir conhecimentos sobre os mais importantes métodos e saber aplicá-los a um devido problema. Como para muitas situações não há soluções analíticas, os métodos numéricos tornam-se uma alternativa mais econômica e de melhor precisão na busca de um valor numérico aproximado para um problema. Apresentamos neste trabalho uma proposta de utilização do ambiente R para a busca numérica de raízes de equações por se tratar de um software livre (software Open Source with General Public License GNU). A hipótese que orienta este trabalho é a seguinte: o pacote R é uma opção viável para ensino de Cálculo Numérico em Cursos de Graduação. Além disso, a investigação procura contribuir para responder outras duas perguntas: Seria possível sua utilização em sala de aula a partir de computadores e/ou dispositivos móveis? Como poderia ser feito o uso de pacotes e rotinas em problemas práticos? Como objetivo geral deste trabalho, nos propomos a explorar as potencialidades do software R para elaboração de rotinas para Cálculo 22 Introdução Numérico. Além disso, destacamos os obetivos específicos necessários para alcançar o objetivo geral deste trabalho: explorar alguns pacotes incluidos no R para métodos numéricos; desenvolver rotinas que possam ser aplicadas em sala de aula, com o uso de computadores e dispositivos móveis, e apresentar a importância da utilização de softwares gratuitos, como por exemplo o R, no ensino de Cálculo Numérico. Esta pesquisa se caracteriza inicialmente como exploratória descritiva, pois busca gerar conhecimento sobre algo não muito conhecido de modo a promover a reflexão sobre o assunto (GIL, 2010). Este trabalho está divido da seguinte forma: no Capítulo 1 será apresentada uma revisão referente ao conceito dos métodos numéricos, com foco em alguns métodos para zeros de funções. A partir desta revisão partimos para o Capítulo 2, onde será apresentado o ambiente R, focando em sua origem, características e o seu uso. No Capítulo 3 dissertamos brevemente sobre o ensino de Cálculo Numérico, sua importância e interação com o uso de computadores, mediante o uso de softwares. O Capítulo 4 apresenta alguns pacotes e funções existentes e rotinas elaboradas no R para zeros de funções. Ao final, serão adicionadas às conclusões deste trabalho e sugestões para trabalhos futuros. 23 1 MÉTODOS NUMÉRICOS Neste capítulo apresenta-se uma revisão dos principais métodos numéricos, juntamente com uma breve definição do que é Método Numérico. O que se pretende com esta revisão é que as informações apresentadas a seguir possam ajudar o leitor a compreender as rotinas elaboradas, reproduzi-las de forma diferente ou até mesmo construir programas para os demais métodos que não serão apresentados aqui. 1.1 DEFINIÇÃO E MÉTODOS “Método numérico é um conjunto de procedimentos utilizados para transformar um modelo matemático num problema numérico ou um conjunto de procedimentos usados para resolver um problema numérico” (SPERANDIO; MENDES; SILVA, 2003, p. 3). Segundo Gilat e Subramaniam (2008), os métodos numéricos são técnicas matemáticas utilizadas na busca de solução de problemas matemáticos que não podem ser resolvidos ou que são difíceis de resolver de forma analítica. A solução analítica é uma resposta exata na forma de uma expressão matemática associada às variáveis do problema. Já a solução numérica é um valor numérico aproximado para o problema (BURDEN; FAIRES, 2008). De acordo com Sperandio, Mendes e Silva (2003) existem inúmeros métodos para a resolução de um problema. Entretanto, a escolha do método mais eficiente para resolver um problema numérico envolve alguns aspectos, como por exemplo, a precisão desejada para os resultados, a velocidade de convergência, o tempo de processamento e a economia de memória necessária para encontrar a solução adequada. Na maioria dos cursos de graduação, em especial no curso de 24 Capítulo 1. MÉTODOS NUMÉRICOS Licenciatura em Matemática, entre os métodos estudados nas aulas de Cálculo Numérico estão os métodos de busca de aproximação para zeros de funções, como os Métodos de Newton, da Secante e da Bisseção. Além destes também são estudados métodos numéricos para resolução de sistemas lineares, por exemplo, Métodos de Gauss-Seidel e GaussJordan, métodos para interpolação numérica (Método de Lagrange e Newton), método para resolução numérica de integrais (Método de Simpson e dos Trapézios), ajuste de curvas (Método dos Quadrados Mínimos) e resolução numérica de equações diferenciais (Métodos de Runge Kuta). Neste trabalho iremos falar sobre Zeros de Funções e alguns métodos para se calcular as raízes das funções. 1.1.1 Zeros Reais de Funções Reais Muitos são os problemas científicos e de engenharia, onde te- mos a necessidade de encontrar matematicamente soluções para o qual uma função f (x) obtenha valor igual a zero, ou seja, determinar x pertencente ao conjunto dos reais tais que f (x) = 0, (1.1) sendo estas soluções denominadas de raízes da equação f (x) = 0 ou zeros da função f (RIBEIRO; MENEZES; MEZZOMO, 2012). Um dos mais antigos registros relacionado à problemática de encontrar uma raiz de uma equação data do ano de 1700 a.C. em uma tábua cuneiforme da Babilônia, sendo este considerado um dos problemas básicos mais importantes da aproximação numérica (RIBEIRO, 2012). De acordo com a autora, existem alguns métodos para se calcular analiticamente raízes de funções polinomiais de grau 2, 3 e até 4, que exigiram séculos de desenvolvimento matemático para que fossem propostos e consolidados. Mas existem diversos tipos de funções, como por exemplo, as funções não lineares, as funções de grau superior 1.1. DEFINIÇÃO E MÉTODOS 25 a quatro e as funções transcendentes, que não são possíveis de serem calculadas a partir de métodos diretos. As equações algébricas são equações em que as incógnitas são submetidas apenas às chamadas operações algébricas, ou seja, soma, subtração, multiplicação, divisão, potenciação inteira e radiciação. Já a transcendente é uma equação que contém alguma função que não é redutível a uma fração entre polinômios, e cuja solução não pode ser expressa a partir de funções elementares, ou seja, não possui uma solução exata expressa através de funções conhecidas (RIBEIRO; MENEZES; MEZZOMO, 2012). Segundo Ribeiro (2012) as funções caracterizadas como transcendentes são aquelas que não satisfazem a equação do tipo: pn y n + . . . + p1 y + p0 = 0, (1.2) onde pk (0 ≤ k ≤ n) é um polinômio em x com coeficientes racionais. Em casos assim, são recomendados métodos que encontrem uma solução aproximada para essas raízes. Esses métodos, em sua maioria, consistem em processos iterativos, onde as iterações seguintes fornecem aproximações mais precisas dos zeros das funções que as iterações anteriores (FRANCO, 2006). A seguir, serão apresentados os principais métodos para resolução de equações não lineares, tais como o Método da Bisseção, Método da Falsa Posição, Método da Iteração Linear, o Método de NewtonRhapson e o Método da Secante. 1.1.1.1 Método da Bisseção O Método da Bisseção é uma técnica iterativa que visa encurtar a amplitude do intervalo que contém a raiz até que se atinja a exatidão necessária, empregando a divisão sucessiva de [a, b] ao meio (RUGGIERO; LOPES, 1996). A cada iteração, a raiz aproximada é dada pela 26 Capítulo 1. MÉTODOS NUMÉRICOS equação (1.3) por, xk = ak + b k . 2 (1.3) onde [ak , bk ] é o subintervalo obtido na interação k. Como critério de convergência temos que a função f (x) deverá ser contínua no intervalo [a, b] e tal que f (a)f (b) < 0. Este método que também é conhecido como truncamento binário, divisão do intervalo na metade ou como Método de Bolzano. Este último nome é pelo fato que o método se baseia no Teorema de Bolzano, que será dado a seguir. Teorema 1.1. Seja f (x) uma função contínua em um intervalo [a, b]. Se f (a) e f (b) possuírem sinais contrário, então existirá pelo menos um c em [a, b], tal que f (c) = 0. Obviamente, se a f (a) e f (b) possuírem sinais contrários então: f (a)f (b) < 0. O Método da Bisseção não possui rápida convergência, conforme Cunha (2003): Embora o Método da Bisseção seja simples, ele sofre de uma séria desvantagem em se tratando de métodos númericos: é lento. Por outro lado, as aproximações fornecidas pelo método permanecem dentro do intervalo inicial, o que pode representar uma vantagem em aplicações, por exemplo, quando existem restrições nos valores da variável x. Para sabermos o momento mais adequado de se finalizar o método, fazemos o uso de um critério de parada. De acordo com Franco (2006), temos que dados xk e xk+1 duas aproximações consecutivas da raiz exata e ε uma tolerância prefixada, tem-se como principais critérios de parada os seguintes: i) |f (xk )| < ε; 1.1. DEFINIÇÃO E MÉTODOS 27 ii) |xk+1 − xk | < ε; iii) |xk+1 − xk | < ε; |xk+1 | iv) Número limite de iterações. O autor ainda complementa, que qualquer um desses critérios de parada podem ser utilizados, tanto para o Método da Bisseção como para os outros métodos. 1.1.1.2 Método da Falsa Posição O Método da Falsa Posição consiste em localizar uma raiz aproximada por meio da média ponderada entre a e b, utilizando como pesos |f (b)| e |f (a)|, respectivamente (RUGGIERO; LOPES, 1996). Logo a raiz aproximada é dada pela equação xk = af (b) − bf (a) a|f (b)| + b|f (a)| = . |f (b)| + |f (a)| f (b) − f (a) (1.4) Este método que também pode ser chamado como Método da Falsa Suposição ou, ainda, do Falso Pressuposto, é um procedimento iterativo de resolução de problemas lineares já bastante antigo. Suas origens remontam ao antigo Egito e aos primórdios da civilização chinesa, tendo sido largamente utilizado, desde então, por matemáticos de várias civilizações. Em sua essência, o Método da Falsa Posição consiste em um procedimento de tentativas e erros (MEDEIROS, A.; MEDEIROS, C. F. de, 2004). Para este método, como critério de convergência temos o mesmo já citado para o Método da Bisseção, onde a função f (x) deverá ser contínua no intervalo [a, b], tal que f (a)f (b) < 0. 1.1.1.3 Método da Iteração Linear De acordo com Ruggiero e Lopes (1996), seja uma função f (x) contínua no intervalo [a, b] que contém uma raiz da equação f (x) = 0. 28 Capítulo 1. MÉTODOS NUMÉRICOS Logo, o método da Iteração Linear consiste em transformar esta equação em uma outra equivalente x = ϕ(x) e a partir de uma aproximação inicial x0 gerar uma sequência {xk } de aproximações para uma solução ξ pela relação xk+1 = ϕ(xk ), com k = 1, 2, 3, . . . De acordo com Sperandio, Mendes e Silva (2003) o método da Iteração Linear, também chamado de Ponto Fixo, convergirá somente se escolhida a equação de iteração x = ϕ(x), com intervalo [a, b], satisfazer as seguintes condições: i) ϕ(x) e ϕ′ (x) sejam contínuas em [a, b]; ii) |ϕ′ (x)| ≤ M < 1, ∀x ∈ [a, b]; iii) x0 ∈ [a, b]. onde M é um ponto entre zero e um. O Método do Ponto Fixo não é propriamente um método, mas sim uma classe de métodos. Por exemplo, o Método de Newton é um dos que pertence a essa classe. Este método tem grande importância na resolução de todo o tipo de equações, incluindo as equações diferenciais e integrais. Ele possui convergência linear, diferente do Método de Newton-Raphson, que será visto a seguir, onde a convergência é quadrática (RIBEIRO, 2012). 1.1.1.4 Método de Newton-Raphson Este método foi publicado por Isaac Newton em 1687, com o intuito de encontrar raízes de equações não lineares. Conhecido como Método de Newton-Raphson devido à sistematização apresentada por Joseph Raphson em 1690 (CUNHA, 2003). Já para Machado e Alves (2013) o método foi proposto por Isaac Newton em dois momentos: em 1669 em De analysis per aequationes número terminorum infinitas composta por ideias adquiridas em 1665 à 1666, trabalho publicado apenas em 1711, em De metodis fluxionum et serierum infinitarum, escrito em 29 1.1. DEFINIÇÃO E MÉTODOS 1671. O método proposto foi aprimorado para qualquer tipo de função real em 1690 por Joseph Raphson. É importante salientar que o mesmo não foi apresentado tal como é trabalhado hoje, ele foi aperfeiçoado devida a atuação de tantos outros grandes matemáticos como L. A. Cauchy, J.Fourier, Kantorovich, Fine e Bennet, entre outros, os quais contribuíram com o método, provando que o mesmo convergia quadraticamente desde que o ponto inicial fosse tomado em uma vizinhança da solução procurada (Fourier). O mesmo se extende para funções de várias variáveis, sendo assim utilizado para se provar a existência de raízes de outras equações (Cauchy) (MACHADO; ALVES, 2013). Segundo Cunha (2003) este método combina duas idéias básicas comuns nas aproximações numéricas que são: a linearização e a iteração. Na linearização, procura-se substituir um problema complicado por sua aproximação linear, ou seja, no caso do Método de Newton-Raphson consiste na substituição da curva y = f (x) por sua reta tangente. Por outro lado, um processo iterativo, ou aproximações sucessivas, consiste na repetição sistemática de um procedimento até que seja atingido o grau de aproximação desejado. De acordo com Ruggiero e Lopes (1996) o Método de NewtonRaphson tenta acelerar a convergência, adotando como função de iteração a função ϕ(x) no qual |ϕ‘ (ξ)| = 0, obtendo como função de iteração a equação (1.5) dada abaixo como: xk+1 = xk − f (xk ) . f ′ (xk ) (1.5) Outra forma de se obter a equação (1.5) segundo Chapra e Canale (2008) é a partir da interpretação geométrica conforme apresenta a Figura 1 abaixo. 30 Capítulo 1. MÉTODOS NUMÉRICOS Figura 1 – Interpretação Geométrica do Método de Newton-Raphson Fonte: Adaptado de Chapra e Canale (2008) Temos então que a primeira derivada em x é equivalente à inclinação, dada pela equação (1.6) como: f ′ (xi ) = f (xi ) − 0 , xi − xi+1 (1.6) reorganizando a equação acima obtemos a equação (1.7) dada como: xi+1 = xi − f (xi ) f ′ (xi ) (1.7) De acordo com Chapra e Canale (2008) o método de NewtonRaphson embora seja em geral muito eficiente, em algumas situações ele tem um desempenho insatisfatório, como por exemplo, no caso de raízes múltiplas. Outras dificuldades podem aparecer no caso que a função possui um ponto de inflexão, ou seja, quando f ′′ (x) = 0 na vizinhança de uma raiz, e também em casos que forem encontradas inclinações próximas de zero, onde uma inclinação nula, ou seja, f ′ (x) = 31 1.1. DEFINIÇÃO E MÉTODOS 0 provocaria uma divisão por zero. Logo, sua convergência depende da natureza da função e da precisão da aproximação inicial. Pode-se dizer que o método deve satisfazer alguns critérios, como por exemplo, a f ′ (x) 6= 0 para todo x ∈ [a, b], f ′′ (x) não mudar f (b) f (a) de sinal em [a, b] e também ′ < (b − a) e ′ < (b − a). f (a) f (b) Esse último garante que as tangentes à curva em (a, f (a)) e (b, f (b)) interceptem o eixo das abcissas em (a, b) (RIBEIRO, 2012). 1.1.1.5 Método da Secante Muitos acreditam que o Método das Secantes surgiu do Método de Newton-Raphson, usando uma aproximação de diferenças finitas para a derivada. No entanto, evidências históricas revelam que um caso especial do Método da Secante, mais comumente referido como a Regra da Dupla Posição Falsa, antecedeu o Método de Newton-Raphson por mais de 3000 anos e pode ser encontrada em tabuletas de argila da Babilônia do século XVIII A.C. e no Papiro Rhind egípcio (PAPAKONSTANTINOU, 2009). Segundo Ruggiero e Lopes (1996) uma grande desvantagem do método de Newton-Raphson é o fato de ser necessário obter a f ′ (x) e calcular o seu valor numérico a cada iteração. Porém, uma das formas de se contornar isto é substituir a derivada f ′ (xk ) pelo quociente das diferenças dada pela equação (1.8) como: f (xk ) − f (xk−1 ) , f ′ (xk ) ∼ = xk − xk−1 (1.8) onde xk e xk−1 são duas aproximações para a raiz. Substituindo a equação (1.8) na equação (1.5), obtemos xk+1 = xk − f (xk ) . f (xk ) − f (xk−1 ) xk − xk−1 (1.9) 32 Capítulo 1. MÉTODOS NUMÉRICOS Desenvolvendo a equação acima obtemos a equação (1.10) dada por, xk+1 = xk−1 f (xk ) − xk f (xk−1 ) . f (xk ) − f (xk−1 ) (1.10) Segundo Ribeiro (2012) quando a alteração desenvolvida no Método de Newton acontece desta forma, o método passa ser chamado Método da Secante, onde neste caso, realiza-se a troca da inclinação da reta tangente pela inclinação da reta secante à curva. O comportamento do método pode ser visualizado na Figura 2. Figura 2 – Método da Secante Fonte: Ribeiro (2012) Outra forma de se obter a equação (1.10) para o Método da Secante, de acordo com Cunha (2003), é usando semelhança de triângulos ABC e AED, ou seja, dada pela equação (1.11) como, f (x0 ) f (x1 ) = , x0 − x2 x1 − x2 (1.11) onde x2 é o ponto denotado por A na Figura 3. A equação (1.11), retirada a partir da Figura 3 , após algumas manipulações algébricas 33 1.1. DEFINIÇÃO E MÉTODOS se obtêm a equação dada por x2 = x0 f (x1 ) − x1 f (x0 ) . f (x1 ) − f (x0 ) (1.12) Generalizando, no Método das Secantes se utiliza duas aproximações, xk−1 e xk , para calcular uma nova aproximação xk+1 , se chega a equação (1.10), citada acima. Figura 3 – Interpretação Geométrica do Método da Secante Fonte: Cunha (2003) Considerando que o Método da Secante é uma aproximação para o Método de Newton-Raphson, as condições de convergência são as mesmas deste método, com um porém, que em casos de f (xk ) ≈ f (xk−1 ) o método poderá divergir (RUGGIERO; LOPES, 1996). Assim encerramos uma breve revisão sobre alguns métodos numéricos para encontrar zeros de funções. O que foi visto até então é uma pequena parte dos muitos métodos que existem para resolução de problemas. No próximo capítulo abordaremos o uso do software R, que torna possível a aplicação desses métodos para calcular problemas de forma mais precisa e eficaz. 35 2 O AMBIENTE R Neste capítulo apresentaremos algumas informações sobre o R, como por exemplo, a sua origem, características e o seu uso em computadores e dispositivos móveis, tais como celulares e tablets. Pelo fato do R ser considerado uma linguagem de programação, serão levantadas algumas vantagens do seu uso na elaboração de rotinas e/ou programas. Por fim, apresentaremos algumas interfaces do R, entre elas, o RStudio e o RCommander. 2.1 O SOFTWARE R O R é uma linguagem e ambiente para computação estatística e gráfica. É um projeto GNU, que é semelhante à linguagem S. O projeto GNU General Public License (GPL) foi idealizado por Richard Matthew Stallman em 1989, e baseia-se na premissa de que o autor detém a patente e em contrapartida permite-se legalmente aos úsuarios do programa o direito de copiá-lo, distribuí-lo, ou modificá-lo a partir do código-fonte, sob os termos da licença (FERREIRA; CYMROT, 2012). Foi criado originalmente por Ross Ihaka e por Robert Gentleman na universidade de Auckland, Nova Zelândia, e foi desenvolvido no Bell Laboratories (antiga AT & T, empresa Lucent Technologies) por John Chambers e colegas (R CORE TEAM, 2015). O R é um software gratuito, ou seja, pode ser obtido sem nenhum custo financeiro de direitos autorais. Está disponível diretamente da Internet a partir da página: http:www.r-project.org. Ele pode ser instalado nos sistemas operacionais Windows, Linux e Mac. Além de um conjunto de pacotes já incluído com a instalação do R, existem diversos pacotes acrescentando-lhe assim diversas funcionalidades, indo desde a 36 Capítulo 2. O AMBIENTE R implementação de métodos específicos de análise estatística, até pacotes para a criação de interfaces gráficas com o usuário. Estes pacotes estão disponíveis a partir do CRAN (Comprehensive R Archive Network) que é o conjunto de sites responsável pela locação e distribuição dos arquivos referentes ao R, desde extensões contribuídas a arquivos de instalação e documentação (FERREIRA; CYMROT, 2012). Sua origem é de um software estatístico, mas com atuações de vários colaboradores, o R passou a ser utilizado para fins mais diversificados (CORDEIRO; ALMEIDA, 2009). Como descreve Vance (2015) um dos pacotes que o R disponibiliza, chamado BiodiversityR, oferece uma interface gráfica cujo objetivo é realizar com mais facilidade cálculos de tendências ambientais. Outro pacote, conhecido como Emu, analisa padrões de fala, enquanto o GenABEL é usado para estudar o genoma humano. De acordo com Vance (2015) o que torna o R tão útil é que se pode melhorar o código de software básico ou escrever variações para tarefas específicas. Pacotes escritos para a linguagem R acrescentam algoritmos avançados, gráficos coloridos e técnicas de mineração para vasculhar bancos de dados mais a fundo. Temos que as principais qualidades que o R apresenta são: A sua implementação poder ser estendida através de packages adicionais que são continuamente disponibilizados por colaboradores; é um software gratuito e de livre distribuição; é permitida a criação e modificação de funções; é usado nas plataformas Windows, Linux, Unix e Macintosh; constantemente surgem versões mais atuais e completas; engloba várias áreas de conhecimento, tais como a Estatística, Matemática, Matemática Financeira, Atuária, Economia, etc (CORDEIRO; ALMEIDA, 2009, p.5). R é constituído por uma janela principal chamada R Console (Figura 4). O termo console, do inglês “painel de controle”, caracteriza a janela na qual os comandos são inseridos e executados, sendo 37 2.1. O SOFTWARE R diretamente ou com uso de arquivos scripts (FERREIRA; CYMROT, 2012). Seu intuito é integrar ferramentas gráficas, de cálculo e de análise de dados, em um ambiente de desenvolvimento de programação (VENABLES; SMITH; R CORE TEAM, 2015). Figura 4 – Tela inicial do R Fonte: Produção do próprio autor A sintaxe do R é similar a linguagens de programação, tais como C e C++, em características como o manuseio e tratamento de objetos por meio de funções, uso de bibliotecas de funções pré-definidas e de programação orientada ao objeto (FERREIRA; CYMROT, 2012). O termo ambiente pretende caracterizar o R como sendo um sistema totalmente planejado e coerente, ao contrário de uma aglomeração de ferramentas muito específicas e inflexíveis, e com isso permite que o usuário acrescente funcionalidade adicional por definição de novas funções (BEASLEY, 2004). Outras vantagens que Beasley (2004) julga importante seriam: a facilidade para manipulação e armagenazem de dados, a inclusão 38 Capítulo 2. O AMBIENTE R de um conjunto de operadores para cálculos matriciais, uma grande e coerente coleção integrada de funções para análise de dados e facilidades gráficas para análise e visualização dos dados, seja na tela ou impressos. O R possui também outras interfaces, como o RStudio e o R Commander. O RStudio (Figura 5) é um ambiente de desenvolvimento integrado (IDE) para R. Ele está disponível em código aberto e edições comerciais em sistemas operacionais, como Windows, Mac, Linux ou a partir de um navegador conectado a RStudio Server ou RStudio Server Pro. Pode-se obtê-lo diretamente pela internet a partir da página: http://rstudio.org/ (RSTUDIO, 2015). Figura 5 – Interface RStudio Fonte: Produção do próprio autor Algumas características que podem ser destacadas da edição Open Source são: a disponibilidade de várias ferramentas administrativas convenientes e fáceis de usar para gerenciamento de pacotes, o espaço de trabalho e arquivos, o editor de código-fonte (este é rico em 39 2.1. O SOFTWARE R recursos e integrado com o built-in console), criação de diferentes projetos com maior rapidez (cuja tela principal é composta por 4 janelas que inclui um console para sessões interativas de R), um editor de códigofonte (com guias para organizar os arquivos de um projeto) e painéis com notebooks para organizar componentes menos centrais (VERZANI, 2011). O RCommander (Figura 6) foi desenvolvido e é mantido por John Fox, no departamento de Sociologia da Universidade McMaster. Ele é também uma interface livre e sem custo de aquisição. Está disponível através do pacote Rcmdr, e funciona através de uma interface gráfica orientada por menus, tornando-se assim um ambiente atraente principalmente para uso introdutório ou quando se utiliza com pouca frequência este tipo de software (FOX, 2005). Figura 6 – Interface R Commander Fonte: Produção do próprio autor 40 Capítulo 2. O AMBIENTE R O RCommander GUI está disponível diretamente pelo R através do menu Pacotes/Instalar pacote(s). Depois é necessário escolher o local de onde será realizado o download e selecionar o pacote Rcmdr. Após a intalação, para se acessar o R Commander é necessário carregar o pacote Rcmdr digitando-se library(Rcmdr) ou require(Rcmdr) na tela principal do R. 2.2 O R EM DISPOSITIVOS MÓVEIS Atualmente é possível obter o R para alguns dispositivos móveis, como celulares e tablets para os sistemas operacionais Android e IOS (Figura 7). Figura 7 – Tela inicial e de compilação do R em IOS Fonte: Kovba (2015) 2.2. O R EM DISPOSITIVOS MÓVEIS 41 Algumas das principais características que podem ser listadas, de acordo com Kovba (2015), é a possibilidade de compilar e executar o seu programa, a entrada de texto antes de execução do programa e produção de texto, teclado adicional, linhas numeradas, temas de cores, e referência da linguagem online e vários programas simples para testar. Porém, existem algumas limitações como, é preciso que o aparelho esteja conectado a internet para compilar e executar o programa; gráficos, redes, sistemas de arquivos de entrada em tempo real não são suportados ainda; o tempo máximo para se executar o programa ainda é de 15 segundos e a plotagem ainda não é suportada. O R para o sistema operacional Android (Figura 8) pode ser obtido seguindo alguns passos para a sua instalação. Pensamos em dispor o processo de instalação, por motivos de ser um dos sistemas muito utilizado em dispositivos móveis, sendo assim, os passos para instalação serão dados a seguir (TALES OF R, 2015): 1- Instalar o GNURoot do Google Play 2- Instalar o Gnuroot Wheezy do Google Play 3- Atualizar os repositórios de pacotes: apt-get update e apt-get upgrade 4- Bloquear atualizações para o sistema Perl: apt-mark hold perl-base 5- Instalar o R: apt-get install r-base 6- Instalar todos os pacotes CRAN disponíveis nos repositórios do Debian: apt-get install r-cran* 7- Começar o R a partir da linha de comando: R 42 Capítulo 2. O AMBIENTE R Figura 8 – Tela inicial do R no Android Fonte: https://talesofr.wordpress.com/tag/r-console-free/ Os seguintes sites apresentam instruções de instalação, de modo que ajude o acadêmico durante o processo. https://talesofr.wordpress.com/tag/r-console-free/ http://www.r-ohjelmointi.org/?p=1434 Após conhecermos um pouco sobre o R, as suas qualidades e defeitos, e sua possibiidade de uso em dispositivos móveis, veremos no próximo capítulo um pouco do ensino de Cálculo Numérico. Em seguida veremos de que forma o uso do R poderia beneficiar alunos e professores no ensino dessa disciplina. 43 3 O ENSINO DE CÁLCULO NUMÉRICO Neste capítulo iremos falar brevemente sobre o ensino de Cálculo Numérico. Inicialmente um pouco de história e depois apresentamos a sua importância e ligação com o uso de computadores, utilizandose assim de alguns softwares. Entre eles optou-se pela apresentação de softwares Open Source por serem softwares gratuitos. 3.1 HISTÓRIA, ENSINO E APLICAÇÕES A maioria dos métodos numéricos foram desenvolvidos e utilizados há centenas e até mesmo há milhares de anos. No entanto, a implementação era difícil, pois todos os cálculos eram realizados de forma manual ou através de dispositivos mecânicos simples (Figura 9). Mas isto limitava a quantidade de cálculos a serem realizados, prejudicando assim, a precisão da solução (MOTA, 2011). Contudo, atualmente, os métodos numéricos são utilizados em computadores rápidos e eficientes, possibilitando a execução de um grande número de cálculos repetitivos em um curto espaço de tempo, produzindo assim soluções precisas e confiáveis (SANTOS, 2004). De acordo com Amaral, Leite e Silva (2013) a implementação de várias técnicas numéricas também se modernizou, tornando mais simples os algoritmos e consequentemente os códigos, e com isso o domínio destas técnicas numéricas é essencial para matemáticos, físicos e engenheiros. 44 Capítulo 3. O ENSINO DE CÁLCULO NUMÉRICO Figura 9 – Máquina Diferencial Fonte: http://histinf.blogs.upv.es/2010/10/28/charles-babbage/ No ensino de Cálculo Numérico percebem-se algumas dificuldades de aprendizagem, pois elas surgem da deficiência no ensino da Matemática que são vivenciadas por alunos desde a educação básica até a educação superior (NOTARE; BEHAR, 2009). Desta forma, precisa-se ajudar os estudantes a construírem estratégias de aprendizagem própria. No caso específico de Cálculo Numérico o computador deve exercer um papel fundamental para auxiliar os estudantes no auto aprendizado do conteúdo (RAMOS; ARAUJO; OLIVEIRA, 2008). Entretanto, segundo Denardi et al (2004, p. 2) O computador não deve ser inserido na educação como uma “máquina de ensinar”, como sequência de instruções programadas (informatização instrucionista), mas sim como uma “informatização construcionista” que permita a reflexão e construção de idéias a partir da relação professor, computador, aluno e conhecimento. Deve-se levar em conta que o computador não é o principal referencial do processo de ensino-aprendizagem, mas serve apenas como uma ferramenta auxiliar. 3.1. HISTÓRIA, ENSINO E APLICAÇÕES 45 Tem sempre existido uma relação muito próxima entre a matemática de um lado e a ciência e tecnologia do outro. Algumas de suas áreas surgiram e foram desenvolvidas na tentativa, em algumas vezes até frustrada, de solucionar problemas reais, ou seja, aqueles relacionados com alguma situação prática. (RAMOS; ARAUJO; OLIVEIRA, 2008). Em relação ao ensino de Cálculo Numérico, as ferramentas computacionais, softwares computacionais aplicados, possibilitam o seu ensino de maneira inovadora. Segundo Bassanezi (2002, p. 57) [...] elas constituem um meio educacional auxiliar para apoiar a aprendizagem dos alunos e permitem criar situações de aprendizagem estimulante. É outra maneira de buscar e viabilizar a construção do conhecimento, de maneira mais autônoma e independente, em um novo ambiente, onde os movimentos e as interações são diferentes e obedecem a modelos. Além disso, abrem um novo leque de possibilidades em função das inúmeras simulações que podem ser realizadas e dos questionamentos que podem ser estabelecidos. Existem atualmente diversas linguagens de programação disponíveis no mercado, com o objetivo de desenvolver aplicativos, sendo algumas pagas e outras gratuitas. Já pela própria característica da disciplina tem-se a necessidade de se programar. Então, de acordo com Cano e Ospina (2008), a utilização de softwares proprietários tem se mostrado muito custosa, principalmente para instituições educacionais e governamentais. As licenças geralmente são vendidas por máquina, aumentando ainda mais os custos para utilização de softwares deste tipo. Logo, algumas alternativas de softwares gratuito seriam o Scilab, o Octave e o R. Tanto o R como os outros dois softwares citados acima podem ser obtidos a partir de download pela internet e em dispositivos móveis. A utilização do R para o ensino, em alguns casos pode ser frustante, pois “pelo fato do R se tratar de uma linguagem de programação, alguns autores mencionam que é relativamente difícil de aprender a 46 Capítulo 3. O ENSINO DE CÁLCULO NUMÉRICO utilizá-lo, principalmente a nível introdutório” (WALTER et al, 2012). Portanto, é preciso que o aluno tenha alguns conhecimentos prévios de programação, onde já existe em grande parte dos cursos de graduação uma disciplina específica com esta finalidade. Mas o R poderia se apresentar mais "amigável", como na disciplina de Cálculo Numérico. Com a utilização das funções pré-definidas e as que podem ser elaboradas no R o aluno é capaz de interagir com o software. Este processo interativo, segundo Amaral, Leite e Silva (2013) coloca os alunos como sujeitos participantes do processo de ensino, trazendo uma efetiva participação e desenvolvimento da autonomia por meio do trabalho com o conhecimento. O acesso a um pacote computacional como o R, permite que o aluno possa testar rapidamente várias possibilidades de métodos, a observação gráfica imediata dos resultados e a interface com outras linguagens (CUNHA, 2003). Com o software é também possível trabalhar com aplicações, ou seja, problemas reais nas áreas de Engenharia, Matemática Financeira, Probabilidade e Estatística, Física, entre outras. Assim sendo, o processo de modelagem matemática (Figura 10) para resolver problemas reais pode ser visto pelas seguintes etapas: Figura 10 – Processo de Modelagem Matemática Fonte: Ramos, Araujo e Oliveira (2008) As aplicações em cálculo numérico são largamente utilizadas em diversos processos da engenharia. Sua utilização vai desde aplicações para determinação de raízes de equações, passando por interpolação de valores tabela- 3.1. HISTÓRIA, ENSINO E APLICAÇÕES 47 dos, equações diferenciais parciais ou ordinárias até integração numérica entre outros. Desta forma, torna-se cada vez mais comum a necessidade de programarem-se tais aplicações para a resolução de problemas do cotidiano do profissional da área de engenharia (RAMOS; ARAUJO; OLIVEIRA, 2008, p. 3). Para resolvermos problemas utilizando processos numéricos, é importante conhecermos os conceitos fundamentais envolvidos. Em geral os métodos numéricos para solução de problemas fazem uso de repetições do mesmo processo até que se chegue a uma solução considerada adequada ao problema, com base em uma condição de parada, que pode ser o número máximo de repetições ou a diferença entre a solução obtida e a anterior ser menor que a condição de erro. Os métodos, por utilizarem a mesma simulação repetidas vezes com os dados, podem ser implementados computacionalmente, auxiliando e acelerando a busca pela solução aproximada de um dado problema (ROMIO; SOARES, 2013). É pertinente observar que cada um desses métodos possui limitações, e o mais importante é que a partir da evolução das iterações, ou seja, dos resultados obtidos, cabe ao aluno analisar as saídas de dados a fim de verificar se os mesmos fazem sentido (RUGGIERO; LOPES, 1996). No próximo capítulo veremos como pode ser aplicado o R no ensino de zeros de funções. Tudo que foi visto até agora será utilizado para a elaboração das rotinas e a exploração de alguns pacotes. 49 4 ROTINAS E PACOTES NO R Neste capítulo serão apresentadas algumas rotinas elaboradas no R, que correspondem a uma entre várias propostas, afim de se desenvolver um determinado método computacionalmente. Também se fará uso de exemplos para demonstrar o funcionamento de cada rotina. Além disso, serão apresentados alguns pacotes que o R disponibiliza, como por exemplo, o pacote animation que cria gráficos animados. 4.1 ALGUMAS ROTINAS NO R Como foi visto no primeiro capítulo, para se obter os zeros de uma função, ou seja, as raízes de uma equação, pode-se fazer uso de algum daqueles métodos apresentados. O primeiro método apresentado aqui, será o Método da Bisseção. Apresentaremos inicialmente o seu algoritmo dado pelo Quadro 4.1 e em sequência a rotina de própria autoria. As rotinas aqui presentes podem ser escritas na forma de funções, similar ao que é realizado com o pacote comercial MATLAB. Quadro 4.1: Algoritmo do Método da Bisseção Algoritmo do Método da Bisseção Dados f (x), a e b tais que f (a)f (b) < 0, max, tol 1) Para k = 0 : max, faça a+b 2) x = 2 3) Se f (a)f (x) < 0 então 4) b=x 5) Caso contrário 6) a=x b−a 7) Se |b − a| < tol então x∗ = , pare 2 Fonte: Adaptado de Cunha (2003) 50 Capítulo 4. ROTINAS E PACOTES NO R > bissec <- function(fx,a,b,tol){ if(fx(a)*fx(b)>0) cat("Por favor entre com um outro intervalo [a,b] ou troque de função\n") else{ x <- 0 i <- 0 while(abs(b-a)>tol){ i <- i + 1 x=(a+b)/2 if(fx(a)*fx(x)<0) b=x else a=x cat("Iteração:",i,"\n") cat("Raiz:",x,"\n\n") } } } A partir da rotina acima teremos os argumentos de entrada, a saber: a função definida como fx, o intervalo [a, b], sendo o ponto inicial dado por a e o ponto final por b, e o erro, ou seja, a precisão a ser considerada no momento de se encontrar a melhor aproximação para a raiz, definida como tol. Além disso, temos a hipótese que se fx(a)*fx(b)>0, será preciso que o usuário entre com um novo intervalo ou função, caso contrário, teremos o valor da raiz aproximada. Como critério de parada foi utilizado o segundo critério citado no capítulo 1, como sendo: |xk+1 − xk | < ε. A partir dele teremos os argumentos de saída a saber: o valor da iteração, identificado como i e o valor aproximado da raiz como sendo o x. Para que seja observado o funcionamento da rotina foi utilizado um exemplo extraído de Ruggiero e Lopes (1996, p. 44), dado a seguir, 51 4.1. ALGUMAS ROTINAS NO R onde a cada iteração tem-se um novo valor aproximado para a raiz. Exemplo 4.1. Seja a função f (x) = x3 − 9x + 3 no intervalo [0, 1] e com erro ε = 10−4 . > fx=function(x) x^3-9*x+3 > bissec(fx,a=0,b=1,tol=10^-4) Iteração: 1 Iteração: 8 Raiz: 0.5 Raiz: 0.3398438 Iteração: 2 Iteração: 9 Raiz: 0.25 Raiz: 0.3378906 Iteração: 3 Raiz: 0.375 Iteração: 10 Raiz: 0.3369141 Iteração: 4 Iteração: 11 Raiz: 0.3125 Raiz: 0.3374023 Iteração: 5 Raiz: 0.34375 Iteração: 12 Raiz: 0.3376465 Iteração: 6 Iteração: 13 Raiz: 0.328125 Raiz: 0.3375244 Iteração: 7 Iteração: 14 Raiz: 0.3359375 Raiz: 0.3375854 Observamos que após algumas iterações o valor aproximado da raiz estará entre 0, 3375 e 0, 3376. Logo, este também é um indicio, de que podemos parar com o processo. Em seguida está a rotina do método da Falsa Posição, que também deve satisfazer a hipótese f (a)f (b) < 0. Inicialmente será apresen- 52 Capítulo 4. ROTINAS E PACOTES NO R tado o algoritmo dado pelo Quadro 4.2, e em sequência a rotina de própria autoria. Quadro 4.2: Algoritmo do Método da Falsa Posição Algoritmo do Método da Falsa Posição Dados f (x), a e b tais que f (a)f (b) < 0, ε1 e ε2 1) Se (b − a) < ε1 então escolha para xk qualquer xk ∈ [a, b]. FIM Se |f (a)| < ε2 ou se |f (b)| < ε2 , escolha a ou b como xk . FIM 2) k=1 3) M = f (a) a|f (b)| + b|f (a)| af (b) − bf (a) 4) xk = = |f (b)| + |f (a)| f (b) − f (a) 5) Se |f (x)| < ε2 , escolha xk+1 = xk . FIM 6) Se M f (x) > 0, faça a = x. Vá para o passo 8 7) b=x 8) Se (b − a) < ε1 , então escolha para xk+1 qualquer xk ∈ [a, b]. FIM 9) k = k + 1. Volte ao passo 4 Fonte: Adaptado de Ruggiero e Lopes (1996) > FP <- function(fx,a,b,tol){ if(fx(a)*fx(b)>0) cat("Por favor entre com um outro intervalo [a,b] ou troque de função\n") else{ x <- 0 i <- 0 while(abs(fx(x))>tol){ i <- i + 1 x=(a*fx(b)-b*fx(a))/(fx(b)-fx(a)) if(fx(a)*fx(x)<0) b=x else a=x cat("Iteração:",i,"\n") cat("Raiz:",x,"\n\n") } 53 4.1. ALGUMAS ROTINAS NO R } } A partir da rotina acima teremos os argumentos de entrada, a saber: a função definida como fx, o intervalo [a, b], sendo o ponto inicial dado por a e o ponto final por b, e o erro, ou seja, a precisão a ser considerada no momento de se encontrar a melhor aproximação para a raiz, definida como tol. Para o caso da hipótese, teremos a mesma condição vista na rotina para o método da Bisseção. Como critério de parada foi utilizado o primeiro critério citado no capítulo 1, como sendo: |f (xk )| < ε. A partir dele teremos os argumentos de saída que serão: o valor da iteração, identificado como i e o valor aproximado da raiz como sendo o x. Para que seja observado o funcionamento da rotina foi utilizado um exemplo adaptado de Cunha (2003, p. 75). Exemplo 4.2. Seja a função f (x) = x2 − 2 no intervalo [1, 2] e com erro ε = 10−4 . > fx=function(x) x^2-2 > FP(fx,a=1,b=2,tol=10^-4) Iteração: 1 Iteração: 4 Raiz: 1.333333 Raiz: 1.413793 Iteração: 2 Raiz: 1.4 Iteração: 5 Raiz: 1.414141 Iteração: 3 Raiz: 1.411765 Iteração: 6 Raiz: 1.414201 Como contra-exemplo, temos a função f (x) = xsin(x) − x no intervalo [1, 2] de própria autoria. Neste caso não é possível utilizar o 54 Capítulo 4. ROTINAS E PACOTES NO R método da Bisseção nem o da Falsa Posição, pois contraria a hipótese em que f (a)f (b) < 0. Logo, o resultado obtido é dado da seguinte maneira: > fx=function(x) x*sin(x)-x > bissec(fx,1,2,tol=10^-4) Por favor entre com um outro intervalo [a,b] ou troque de função e > fx=function(x) x*sin(x)-x > FP(fx,1,2,tol=10^-4) Por favor entre com um outro intervalo [a,b] ou troque de função Agora, será apresentado o algoritmo do método do Ponto Fixo dado pelo Quadro 4.3, e em sequência a rotina de própria autoria. Quadro 4.3: Algoritmo do Método do Ponto Fixo Algoritmo do Método do Ponto Fixo Dados f (x) = 0, x = ϕ(x), x0 , ε1 e ε2 1) Se |f (x0 )| < ε1 , faça x = x0 . FIM 2) k=1 3) x1 = ϕ(x0 ) 4) Se |f (x1 )| < ε1 ou se |x1 − x0 | < ε2 , então faça x = x1 . FIM 5) x0 = x1 6) k = k + 1, volte ao passo 3 Fonte: Adaptado de Ruggiero e Lopes (1996) > iteracao <- function(fx,x,tol){ i <- 0 y <- 0 y <- fx(x) 55 4.1. ALGUMAS ROTINAS NO R i <- i + 1 cat("\nIteração:",i,"\n") cat("\nRaiz:",y,"\n") while(abs(fx(y)-fx(x))>tol){ i <- i + 1 x <- y y <- fx(x) cat("\nIteração:",i,"\n") cat("\nRaiz:",y,"\n") } } A partir da rotina acima teremos os argumentos de entrada, a saber: a função definida aqui como fx, que será a nossa função equivalente, o x como sendo o ponto inicial e o erro, ou seja, a precisão a ser considerada no momento de se encontrar a melhor aproximação para a raiz, definida como tol. Como critério de parada foi utilizado o segundo critério citado no capítulo 1, como sendo: |xk+1 − xk | < ε. A partir dele teremos os argumentos de saída, a saber: o valor da iteração, identificado como i e o valor aproximado da raiz agora como sendo o y. Para que seja observado o funcionamento da rotina foi utilizado um exemplo extraído de Ruggiero e Lopes (1996, p. 79), dado a seguir, onde a cada iteração tem-se um novo valor aproximado para a raiz. 2 Exemplo 4.3. Seja a função f (x) = e−x − cos(x), onde a sua função 2 equivalente é ϕ(x) = cos(x)−e−x +x, com aproximação inicial x0 = 1.5 e erro ε = 10−4 . > fx=function(x) cos(x)-exp(-x^2)+x > iterativo(fx,x0=1.5,tol=10^-4) Iteração: 1 Iteração: 4 56 Capítulo 4. ROTINAS E PACOTES NO R Raiz: 1.465338 Raiz: 1.44825 Iteração: 2 Raiz: 1.453792 Iteração: 5 Raiz: 1.447718 Iteração: 3 Iteração: 6 Raiz: 1.449717 Raiz: 1.447525 O método de Newton-Raphson e o da Secante serão implementados pelas rotinas a seguir. Inicialmente, temos o algoritmo dado pelo Quadro 4.4, em sequência a rotina para o método de Newton-Raphson de própria autoria que utiliza, além da função f (x), a sua derivada f ′ (x) para calcular a raiz. Quadro 4.4: Algoritmo do Método de Newton-Raphson Algoritmo do Método de Newton-Raphson Dados x0 , f (x), f ′ (x), ǫ1 e/ou ǫ2 1) Para k = 1, 2, . . ., faça f (xk−1 ) 2) xk = xk−1 − ′ f (xk−1 ) 3) Se |f (xk )| < ǫ1 então x∗ = xk 4) ou . . . 5) Se |xk − xk−1 | < ǫ2 então x∗ = xk Fonte: Adaptado de Cunha (2003) > NewtonRaphson <- function (fx,dfx,x0,tol){ x <- x0 y <- 0 i <- 0 while (abs(y - x) > tol){ i <- i + 1 y <- x x=x-fx(x)/dfx(x) cat("Iteração:",i,"\n") 57 4.1. ALGUMAS ROTINAS NO R cat("Raiz:",x,"\n\n") } } Na rotina acima teremos os argumentos de entrada, a saber: a função definida como fx, a derivada da função como sendo dfx, o ponto inicial dado por x0 e o erro, ou seja, a precisão a ser considerada no momento de se encontrar a melhor aproximação para a raiz, definida como tol. Como critério de parada foi utilizado o segundo critério citado no capítulo 1, como sendo: |xk+1 − xk | < ε. Os argumentos de saída são: o valor da iteração, identificado como i e o valor aproximado da raiz como sendo o x. Para que seja observado o funcionamento da rotina foi utilizado um exemplo extraído de Ruggiero e Lopes (1996, p. 80), dado a seguir, onde a cada iteração tem-se um novo valor aproximado para a raiz. Exemplo 4.4. Seja a função f (x) = 4sin(x)−ex , onde a sua derivada é f ′ (x) = 4cos(x)−ex , com aproximação inicial x0 = 0, 5 e erro ε = 10−5 . > fx=function(x) 4*sin(x)-exp(x) > dfx=function(x) 4*cos(x)-exp(x) > NewtonRaphson(fx,dfx,x0=0.5,tol=10^-5) Iteração: 1 Raiz: 0.3555116 Iteração: 3 Raiz: 0.3705581 Iteração: 2 Iteração: 4 Raiz: 0.3704195 Raiz: 0.3705581 Já para o método da Secante o algoritmo é dado pelo Quadro 4.5, e em sequência a rotina de própria autoria. 58 Capítulo 4. ROTINAS E PACOTES NO R Quadro 4.5: Algoritmo do Método da Secante Algoritmo do Método da Secante Dados x0 , x1 , f (x), ǫ1 e/ou ǫ2 1) Para k = 1, 2, . . ., faça xk−1 f (xk ) − xk f (xk−1 ) 2) xk+1 = f (xk ) − f (xk−1 ) 3) Se |f (xk+1 )| < ǫ1 então x∗ = xk+1 4) ou . . . 5) Se |xk+1 − xk | < ǫ2 então x∗ = xk+1 Fonte: Adaptado de Cunha (2003) > secante <- function (fx,x0,x1,tol){ y <- x0 z <- x1 i <- 0 while(abs(z - y) > tol){ i <- i + 1 x=(z*fx(y)-y*fx(z))/(fx(y)-fx(z)) y <- z z <- x cat("Iteração:",i,"\n") cat("Raiz:",x,"\n\n") } } Utilizando a rotina acima teremos os argumentos de entrada, a saber: a função definida como fx, o ponto inicial dado por x0, o ponto final por x1 do intervalo e o erro, ou seja, a precisão a ser considerada no momento de se encontrar a melhor aproximação para a raiz, definida como tol. Como critério de parada foi utilizado o segundo critério citado no capítulo 1, como sendo: |xk+1 − xk | < ε. Em seguida teremos os respectivos argumentos de saída: i, como sendo o valor da iteração e o x, como sendo o valor aproximado da raiz. 59 4.2. ALGUNS PACOTES DO R Exemplo 4.5. Aqui será utilizado o mesmo exemplo que foi aplicado anteriormente. Logo, temos a seguinte resposta: > fx=function(x) 4*sin(x)-exp(x) > secante(fx,x0=0,x1=1,tol=10^-5) Iteração: 1 Iteração: 5 Raiz: 0.6069427 Raiz: 0.3699253 Iteração: 2 Raiz: -0.2665185 Iteração: 6 Raiz: 0.3705638 Iteração: 3 Iteração: 7 Raiz: 0.4347982 Raiz: 0.3705581 Iteração: 4 Raiz: 0.3846066 A partir dos dois resultados é possível observar, que para se obter a raíz aproximada da função f (x) = 4sin(x) − ex pelo método da Secante houve três iterações a mais que pelo método de NewtonRaphson. Portanto, em casos assim o aluno possui condições de avaliar o comportamento dos diferentes métodos. Vimos nesta seção que não houve muita dificuldade em construir e aplicar as rotinas aqui elaboradas. Para o acadêmico, a construção desses programas é importante para a fixação dos conteúdos. 4.2 ALGUNS PACOTES DO R Como foi visto no Capítulo 2, o R possui inúmeros pacotes (packages). Entre estes pacotes, que serão vistos nesta seção, estão o pracma (BORCHERS, 2015), o spuRs (OWEN, 2014) e o rootSolve (SOETAERT, 2009), que possuem funções para calcular zeros de fun- 60 Capítulo 4. ROTINAS E PACOTES NO R ções. Para se obter um desses pacotes é preciso que se utilize a função install.packages("nomedopacote"), onde o nome do pacote deve estar entre aspas. Para que se utilize o pacote é preciso usar a função library(nomedopacote), já este sem aspas. Um dos primeiros pacotes mencionados acima, abaixo esplanado, será o pacote pracma. Segundo Borchers (2015) o pacote oferece implementações de funções mais avançadas em análise numérica, com uma visão especial sobre a otimização e rotinas para análises de séries temporais. Algumas dessas implementações são o resultado de cursos de Computação Científica e destinam-se principalmente para demonstrar como implementar certos algoritmos em linguagem R ou S. O pacote pracma possui várias funções de todas as áreas de análise numérica, como por exemplo, determinação de raiz pelos métodos de Newton, Newton-Raphson e Secante, interpolação, aproximação de funções, diferenciação, integração numérica, solucionadores de equações e sistemas diferenciais ordinárias (BORCHERS, 2015). As funções que aqui serão mostradas são a newtonRaphson() e a secant() para os métodos de Newton-Raphson e da Secante. Aplicando a função f (x) = 4sin(x) − ex , do exemplo 4.4, a cada uma delas obtemos os seguintes resultados: > newtonRaphson(fx,0.5) > secant(fx,0,1) $root [1] 0.3705581 $root [1] 0.3705581 $f.root $f.root [1] 0 [1] 5.26049e-09 $iter [1] 4 $iter [1] 7 $estim.prec $estim.prec 61 4.2. ALGUNS PACOTES DO R [1] 1.220853e-08 [1] 1.148128e-05 Logo, as funções nos retornarão uma lista com: root, que é a raiz; f.root, que é o valor aproximado da raiz aplicada a função; iter, o número de iterações e estim.prec, a estimativa de precisão. O próximo pacote que será visto é o spuRs. Este pacote possui os scripts, funções e conjuntos de dados para o livro Introduction to Scientific Programming and Simulation Using R. Entre as principais funções que o pacote possui estão: bisection(), fixedpoint(), fixedpoint_show(), (OWEN et al, 2014). newtonraphson() e newtonraphson_show() Com este pacote é possível calcular a raiz de uma função pelos métodos da Bisseção (bisection()), do Ponto Fixo (fixedpoint()) e de Newton-Raphson (newtonraphson()). Utilizando um exemplo extraído de Sperandio, Mendes e Silva (2003, p. 24) e aplicando a essas funções, obtemos os seguintes resultados. Exemplo 4.6. Seja a função f (x) = ln(x) − x + 2, onde a sua função equivalente é ϕ(x) = ln(x) + 2, com intervalo [3, 4], x0 = 3, 3 e erro ε = 10−5 . Para o Método da Bisseção, temos os seguintes resultados: > ftn=function(x) log(x)-x+2 > bisection(ftn,3,4,10^-5) at iteration 1 the root lies between 3 and 3.5 at iteration 2 the root lies between 3 and 3.25 at iteration 3 the root lies between 3.125 and 3.25 at iteration 4 the root lies between 3.125 and 3.1875 at iteration 5 the root lies between 3.125 and 3.15625 at iteration 6 the root lies between 3.140625 and 3.15625 at iteration 7 the root lies between 3.140625 and 3.148438 62 Capítulo 4. ROTINAS E PACOTES NO R at iteration 8 the root lies between 3.144531 and 3.148438 at iteration 9 the root lies between 3.144531 and 3.146484 at iteration 10 the root lies between 3.145508 and 3.146484 at iteration 11 the root lies between 3.145996 and 3.146484 at iteration 12 the root lies between 3.145996 and 3.14624 at iteration 13 the root lies between 3.146118 and 3.14624 at iteration 14 the root lies between 3.146179 and 3.14624 at iteration 15 the root lies between 3.146179 and 3.14621 at iteration 16 the root lies between 3.146179 and 3.146194 at iteration 17 the root lies between 3.146187 and 3.146194 [1] 3.146191 Já para o Método do Ponto Fixo, os resultados são os seguintes : > ftn1=function(x) log(x)+2 > fixedpoint(ftn1,3.3,10^-6) At iteration 1 value of x is: 3.193922 At iteration 2 value of x is: 3.16125 At iteration 3 value of x is: 3.150967 At iteration 4 value of x is: 3.14771 At iteration 5 value of x is: 3.146675 At iteration 6 value of x is: 3.146346 At iteration 7 value of x is: 3.146242 At iteration 8 value of x is: 3.146209 At iteration 9 value of x is: 3.146198 At iteration 10 value of x is: 3.146195 At iteration 11 value of x is: 3.146194 At iteration 12 value of x is: 3.146193 Algorithm converged [1] 3.146193 Por último, para o Método de Newton-Raphson, temos os resultados a seguir: 4.2. ALGUNS PACOTES DO R 63 > ftn2 <- function(x) { fx <- log(x)-x+2 dfx <- 1/x - 1 return(c(fx, dfx)) } > newtonraphson(ftn2,3.3,10^-5) At iteration 1 value of x is: 3.147802 At iteration 2 value of x is: 3.146193 Algorithm converged [1] 3.146193 A partir deste exemplo, observa-se que pela função bisection() foram necessárias 17 iterações para se obter a raiz aproximada 3,146191. Já pela função fixedpoint() foram necessárias 12 iterações para se obter a raiz aproximada 3,146193. Por último, utilizando a função newtonraphson() foram necessárias somente de duas iterações para se obter a raiz aproximada 3,146193. Conclui-se então, que a partir do Método de Newton-Raphson, neste caso, foi preciso de um número pequeno de iterações para encontrar uma raiz que se aproximasse da raiz real, ou seja, que convirja para a solução. Logo, por meio destas funções o aluno pode ter subsídios para compreender as diferenças entre os métodos. As funções fixedpoint_show() e newtonraphson_show() que além de apresentarem o valor da raiz aproximada, elas mostram o gráfico da função no intervalo (x0 − 1, x0 + 1). A cada iteração as funções encontram o valor da raiz aproximada naquele instante. As Figuras 11 e 12 ilustram o funcionamento destes métodos. Utilizando o exemplo 4.6, obtemos os seguintes resultados: > fixedpoint_show(ftn1,3.3) last x value 3.193922 continue (y or n)? y last x value 3.16125 continue (y or n)? y 64 Capítulo 4. ROTINAS E PACOTES NO R last x value 3.150967 last x value 3.14771 continue (y or n)? y continue (y or n)? y last x value 3.146675 last x value 3.146346 continue (y or n)? y continue (y or n)? y last x value 3.146242 last x value 3.146209 continue (y or n)? y continue (y or n)? y last x value 3.146198 last x value 3.146195 continue (y or n)? y continue (y or n)? y last x value 3.146194 last x value 3.146193 continue (y or n)? y continue (y or n)? n [1] 3.146193 Figura 11 – Gráfico da função ϕ(x) = ln(x) + 2 Fonte: Produção do próprio autor > newtonraphson_show(ftn2,3.3) last x value 3.147802 continue (y or n)? y 4.2. ALGUNS PACOTES DO R last x value 3.146193 continue (y or n)? y last x value 3.146193 continue (y or n)? n 65 [1] 3.146193 Figura 12 – Gráfico da função f (x) = ln(x) − x + 2 Fonte: Produção do próprio autor Com o uso dessas duas funções permite que o acadêmico visualize o processo de aproximação da raiz, pelo método da Iteração Linear e pelo método de Newton-Raphson. Para isto, é preciso que seja digitado (y) para sim ou (n) para não, para que a cada iteração se chegue mais próximo da raiz. Com isso, o acadêmico tem a possibilidade de iteragir com o software durante todo o processo e de compreender graficamente cada um dos métodos. Como por exemplo, o método de Newton-Raphson que utiliza retas tangentes à curva a cada iteração. Já o pacote rootSolve, de acordo com Soetaert (2009) serve a vários propósitos, como por exemplo, para encontrar a raiz de funções 66 Capítulo 4. ROTINAS E PACOTES NO R não-lineares, inclui funções para encontrar o estado estacionário de sistemas de equações diferenciais ordinárias (EDO) e equações diferenciais parciais (EDP) e inclui funções para calcular numericamente matrizes gradiente. Este pacote foi criado para resolver os exemplos de análise de estado estacionário e estabilidade encontrados no livro de Soetaert e Herman (2009). O pacote inclui algoritmos para localização de raiz, com o proposito de resolver raízes de equações não-lineares, utilizando o método de Newton-Raphson (SOETAERT, 2009). Logo, a função uniroot() é utilizada para encontrar uma raiz de uma equação. Já a função uniroot.all(), uma simples extensão da função uniroot(), permite encontrar todas as raízes em um dado intervalo. O exemplo extraído de Ribeiro (2012, p. 48), dado a seguir, ilustra o funcionamento da função uniroot(). Exemplo 4.7. Seja a função f (x) = xsin(x) + 4, com intervalo [1, 5] e erro ε = 10− 6) A Figura 13 ilustra a presença de uma raiz da função f (x) no intervalo dado. A raiz foi obtida a partir dos comandos abaixo citado. O comando curve() apresenta o comportamento da função em um dado intervalo, já o abline() traça uma linha, neste caso na origem, e o comando point() desenha um ponto na interseção entre a função e o eixo das abcissas, ou seja, onde está a raiz da função. > fun <- function (x) x*sin(x)+4 > curve(fun(x), 1, 5, col = 4) > abline(h = 0, lty = 3) > uni <- uniroot(fun, c(1,5))$root > points(uni, 0, pch = 16, cex = 2, col=2) 4.2. ALGUNS PACOTES DO R 67 Figura 13 – Gráfico da função f (x) = xsin(x) + 4 Fonte: Produção do próprio autor A partir do comando abaixo se obtém o valor numérico da raiz aproximada. > uniroot(function(x) x*sin(x)+4, lower = 1, upper = 5, tol = 10^-6)$root [1] 4.32324 O próximo exemplo, este extraído de Soetaert e Herman (2009, p. 2), iustra o funcionamento da função uniroot.all(). Exemplo 4.8. Seja a função f (x) = cos3 (2x), com intervalo [0, 10] e erro ε = 10− 6) A Figura 14 ilustra a presença de todas as raízes da função f (x) no intervalo [0, 10]. As raízes foram obtidas utilizando os comandos 68 Capítulo 4. ROTINAS E PACOTES NO R acima citados. Em seguida tem-se o valor aproximado das raízes que estão dentro do intervalo [0, 10] Figura 14 – Gráfico da função f (x) = cos3 (2x) Fonte: Produção do próprio autor > fun <- function (x) cos(2*x)^3 > curve(fun(x), 0, 10, col = 4) > abline(h = 0, lty = 3) > All <- uniroot.all(fun, c(0, 10)) > points(All, y = rep(0, length(All)), pch = 16, cex = 2, col = 2) > uniroot(function(x) cos(2*x)^3, lower = 0, upper = 2, tol = 10^-6)$root [1] 0.7853981 > uniroot(function(x) cos(2*x)^3, lower = 2, upper = 3, 4.2. ALGUNS PACOTES DO R 69 tol = 10^-6)$root [1] 2.356194 > uniroot(function(x) cos(2*x)^3, lower = 3, upper = 5, tol = 10^-6)$root [1] 3.926991 > uniroot(function(x) cos(2*x)^3, lower = 4, upper = 6, tol = 10^-6)$root [1] 5.497787 > uniroot(function(x) cos(2*x)^3, lower = 6, upper = 8, tol = 10^-6)$root [1] 7.068583 > uniroot(function(x) cos(2*x)^3, lower = 8, upper = 10, tol = 10^-6)$root [1] 8.63938 Também é importante citar que é possível visualizar a rotina desenvolvida para cada função que foi aqui utilizada. Deve-se digitar o nome da função no console do R, que em seguida, ele nos retorna a rotina que ali foi desenvolvida. Neste caso é muito útil ao acadêmico, pois a partir dele é possível fazer modificações, estudá-lo, com o propósito de se obter novas rotinas mais avançadas e melhoradas. Aqui mostramos a rotina desenvolvida para a função newtonraphson() do pacote pracma. Destaca-se que para calcular a raiz da f (x) não é necessário ter a sua derivada. > newtonraphson function (fun, x0, dfun = NULL, ..., maxiter = 100, tol = .Machine$double.eps^0.5) { 70 Capítulo 4. ROTINAS E PACOTES NO R if (is.null(dfun)) { dfun <- function(x, ...) { h <- tol^(2/3) (fun(x + h, ...) - fun(x - h, ...))/(2 * h) } } x <- x0 fx <- fun(x, ...) dfx <- dfun(x, ...) niter <- 0 diff <- tol + 1 while (diff >= tol && niter <= maxiter) { niter <- niter + 1 if (dfx == 0) { warning("Slope is zero: no further improvement possible.") break } diff <- -fx/dfx x <- x + diff diff <- abs(diff) fx <- fun(x, ...) dfx <- dfun(x, ...) } if (niter > maxiter) { warning("Maximum number of iterations ’maxiter’ was reached.") } return(list(root = x, f.root = fx, niter = niter, estim.prec = diff)) } 4.2. ALGUNS PACOTES DO R 71 Por último, apresentamos o pacote animation (XIE; YU; ZHU, 2014). Este pacote de acordo com Xie (2013) foi projetado principalmente para duas finalidades: i) para demonstrar idéias, conceitos, teorias e métodos em estatísticas através de animações; ii) para fornecer utilitários para exportar animações para outros formatos ou gravar animações em outros arquivos, como páginas HTML e documentos Sweave. Portanto, este pacote pode ser considerado muito útil não somente na área de Estatística, mas como em todas as áreas de ensino da Matemática, por exemplo, no ensino de Cálculo Diferencial e Integral. O pacote animation inicialmente foi escrito com finalidade de efetuar a visualização de conceitos estatísticos, e depois, o pacote também foi desenvolvido para ser uma coleção abrangente de ferramentas para criar animações usando R (XIE, 2013). Uma das finalidades deste pacote é que pode ser útil para o ensino e visualização geométrica de alguns métodos numéricos. Neste caso, utilizaremos este pacote para visualizar os métodos da Bisseção e de Newton-Raphson, feitos a partir de alguns exemplos. Exemplo 4.9. Seja a função f (x) = x3 − 9x + 3, que possui uma raiz no intervalo [2, 3]. Foi visto que no exemplo 4.6 a mesma função possui uma raiz no intervalo [0, 1]. Logo, a Figura 15 ilustra a outra raiz da função f (x) no intervalo [2, 3]. Em sequência tem-se o valor aproximado da raiz, obtida pelo comando $root, e o número de iteraçoes a partir do comando $iter. 72 Capítulo 4. ROTINAS E PACOTES NO R Figura 15 – Gráfico da função f (x) = x3 − 9x + 3 Fonte: Produção do próprio autor ani.options(interval = 0.5) xx = newton.method(function(x) x^3-9*x+3 , rg = c(-1, 5), init = 5) > xx$root [1] 2.816914 > xx$iter [1] 5 Utilizando a função interactive() o usuário não precisa definir a priori o ponto inicial. Logo, esta função permite que o usuário interaja, podendo assim escolher o ponto de partida a partir de um simples clique no mouse, sobre o eixo das abcissas, ou seja, no eixo x. Para observar o funcionamento desta função foi utilizado o exemplo 4.10 dado abaixo. 4.2. ALGUNS PACOTES DO R 73 Exemplo 4.10. Utilizando o exemplo 4.4 e escolhendo o ponto de partida em torno de x0 = −0, 5, obtemos os seguintes resultados dados conforme podemos ver na Figura 16. Figura 16 – Gráfico da função f (x) = 4sin(x) − ex Fonte: Produção do próprio autor if (interactive()) { ani.options(interval = 0.5, nmax = 50) xx = newton.method(function(x) 4*sin(x)-exp(x), rg = c(-2, 3), interact = TRUE) } > xx$root 0.3705572 > xx$iter [1] 3 74 Capítulo 4. ROTINAS E PACOTES NO R Para visualizar o Método da Bisseção serão utilizados, a seguir, os mesmos exemplos que usamos para demonstrar o Método de Newton-Raphson. A partir do exemplo 4.9 tem-se a Figura 17 que ilustra o funcionamento do método e apresenta a raiz aproximada geometricamente. Abaixo da Figura 17 tem-se o valor aproximado da raiz numérica, juntamente com o número de iterações que foi preciso para obté-la. Figura 17 – Gráfico da função f (x) = x3 − 9x + 3 Fonte: Produção do próprio autor > f = function(x) x^3-9*x+3 > xx = bisection.method(f, c(2, 3)) > xx$root [1] 2.816895 > xx$iter [1] 10 4.2. ALGUNS PACOTES DO R 75 Utlizando agora o exemplo 4.10 obtém-se os seguintes resultados, pela Figura 18. Porém, para este método é preciso possuir um ponto inicial e outro final, ou seja, um intervalo [a, b]. Então, para utilizar a função interactive() é preciso que o usuário clique com o mouse em dois pontos distintos, para que se tenha sucesso na reprodução da Figura 18, dada abaixo. Figura 18 – Gráfico da função f (x) = 4sin(x) − ex Fonte: Produção do próprio autor > if(interactive()) xx=bisection.method(f, c(0, 1), interact = TRUE) > xx$root [1] 0.3702455 > xx$iter [1] 8 76 Capítulo 4. ROTINAS E PACOTES NO R Para complementar, vamos apresentar uma aplicação destes métodos em um problema real em Estatística aplicada a Engenharia. Neste caso eles, serão aplicados para determinar o limite de decisão do gráfico de controle de somas acumuladas (CUSUM). O Controle Estatístico de Processos (CEP) possibilita monitorar as características de qualidade de interesse, assegurando que elas irão se manter dentro de limites preestabelecidos e indicando quando adotar ações de correção e melhoria. O CEP é operacionalizado a partir dos gráficos de controle, com objetivo de acompanhar o desempenho de um processo a partir da definição de uma faixa de controle aceitável. Mas, um gráfico de controle pode também ser usado para analisar tendências e padrões que acontecem ao longo do tempo (HENNING et al, 2014). Sua principal finalidade é monitorar um processo, e a partir dele verificar se está sob controle estatístico indicando sua faixa de variação. De acordo com Henning et al (2014, p. 3), Existem dois tipos de gráfico de controle: para variáveis e para atributos. Os gráficos de controle para atributos se referem às características de qualidade que classificam itens em conformes e não conformes, enquanto que os gráficos de controle para variáveis baseiam-se na medida das características de qualidade em uma escala contínua. Os gráficos de controle para variáveis, segundo Walter et al (2013), são utilizados para monitorar um processo quando a característica da qualidade é uma variável que pode ser mensurada e expressa em um valor na escala contínua. Neste caso, é mais conveniente descrever a característica da qualidade por meio da medida de sua tendência central e sua variabilidade, e representá-la em um gráfico de controle para variáveis adequado. Uma das formas de monitorar a variabilidade de um processo é utilizando os gráficos de controle, que são elementos visuais para monitoramento da conformidade de características dos processos. Por meio 4.2. ALGUNS PACOTES DO R 77 deles, pode-se rapidamente identificar alterações em pontos estratégicos na linha de produção (SAMOHYL, 2009). A eficiência de um gráfico de controle é medida pela rapidez com que este dispositivo detecta alterações no processo. Considerando uma das medidas de desempenho estatístico de um gráfico de controle como sendo o ARL (Average Run Length), que corresponde ao valor esperado de amostras até a sinalização de uma mudança. Para um bom gráfico, é preciso que se tenha um valor alto para o ARL sob controle (ARL0 ), ou seja, a probabilidade de emissão de um alarme falso, e que sinalize rapidamente quando uma mudança realmente ocorreu (HENNING et al, 2012). Assim, o CUSUM será planejado através da escolha do valor de referência k e do intervalo de decisão h do CUSUM. Deste modo, o ARL será determinado em função destes valores. Vários são os procedimentos para calcular o valor do ARL. Um enfoque popular é baseado em cadeias de Markov. Outra abordagem recomendada pela sua simplicidade é a aproximação de Siegmund. Para um CUSUM unilateral com parâmetros h e k a aproximação de Siegmund, dada pela equação 4.1 é: ARL ≈ e−2∆(h+1,166) + 2∆(h + 1, 166) − 1 , 2∆2 onde ∆ = −δ ∗ − k e δ = padrão. (4.1) (µ1 − µ0 ) , com σ correspondendo ao erro σ A partir das informações vistas até aqui, serão utilizados alguns dos métodos para calcular o ARL, dados a seguir. Inicialmente, definimos a função e os dados principais. > fx <- function(x) arl0-(exp(2*k*(x+1.166)) -2*k*(x+1.166)-1)/(2*k^2) > k<-0.5 78 Capítulo 4. ROTINAS E PACOTES NO R > arl0<-370 > x<-10 Em seguida, para identificar o intervalo [a, b] que será utilizado, com o propósito de encontrar a raiz aproximada, faremos uso do Teorema de Bolzano. Este teorema afirma, que se houver a troca de sinais ao se aplicar os pontos que estão no intervalo [a, b], logo temos que existe uma raiz entre a e b, tal que f (x) = 0. Neste caso, obtemos o intervalo a partir dos comandos abaixo ou pela Figura 19. > x=seq(0,10,by=0.1) > cbind(x,fx(x)) x [36,] [37,] 3.5 3.6 1.687884e+02 1.466350e+02 [38,] [39,] 3.7 3.8 1.221307e+02 9.502814e+01 [40,] [41,] 3.9 4.0 6.505420e+01 3.190683e+01 [42,] 4.1 -4.747704e+00 [43,] [44,] 4.2 -4.527827e+01 4.3 -9.009250e+01 [45,] [46,] 4.4 -1.396409e+02 4.5 -1.944214e+02 A partir de uma parte do resultado obtido acima, observamos que a função possui uma raiz no intervalo [4, 5]. A Figura 19 abaixo, ilustra bem este intervalo. > x=seq(3,6,by=0.1) > plot(x,fx(x),type="l",col=4) > abline(h=0,lty=3) 79 4.2. ALGUNS PACOTES DO R Figura 19 – Ilustração do intervalo [a, b] Fonte: Produção do próprio autor Com uso de algumas rotinas elaboradas pelo próprio autor e a partir de alguns pacotes do R, veremos a seguir alguns resultados obtidos. Inicialmente, aplicamos o Método da Bisseção. A partir dos resultados a seguir, obtemos a raiz aproximada como sendo x = 4, 087585, após 14 iterações utilizando como erro ε = 10−4 . > bissec(fx,4,5,10^-4) Iteração: 1 Raiz: 4.5 Iteração: 8 Raiz: 4.089844 Iteração: 2 Iteração: 9 Raiz: 4.25 Raiz: 4.087891 Iteração: 3 Raiz: 4.125 Iteração: 10 Raiz: 4.086914 80 Capítulo 4. ROTINAS E PACOTES NO R Iteração: 4 Iteração: 11 Raiz: 4.0625 Raiz: 4.087402 Iteração: 5 Raiz: 4.09375 Iteração: 12 Raiz: 4.087646 Iteração: 6 Iteração: 13 Raiz: 4.078125 Raiz: 4.087524 Iteração: 7 Raiz: 4.085938 Iteração: 14 Raiz: 4.087585 O próximo método a ser aplicado será o da Falsa Posição. A partir dos resultados a seguir, obtemos a raiz aproximada como sendo x = 4, 0876, após 14 iterações utilizando-se do mesmo erro. Mas, observa-se abaixo, que a partir da 13o iteração a raiz se repete, além de que a partir da primeira iteração já se obtem uma boa aproximação para a raiz. > FP(fx,4,5,10^-4) Iteração: 1 Iteração: 8 Raiz: 4.053167 Raiz: 4.087554 Iteração: 2 Iteração: 9 Raiz: 4.07415 Raiz: 4.087582 Iteração: 3 Raiz: 4.082359 Iteração: 10 Raiz: 4.087593 Iteração: 4 Iteração: 11 Raiz: 4.08556 Raiz: 4.087598 81 4.2. ALGUNS PACOTES DO R Iteração: 5 Iteração: 12 Raiz: 4.086806 Raiz: 4.087599 Iteração: 6 Iteração: 13 Raiz: 4.087291 Raiz: 4.0876 Iteração: 7 Raiz: 4.08748 Iteração: 14 Raiz: 4.0876 Utilizamos agora a função newtonraphson() do pacote pracma para calcular a raiz aproximada pelo Método de Newton-Raphson, tomando como ponto inicial x0 = 4. Utilizamos aqui esta função devido ao trabalho necessário para se obter a derivada da função f (x). Logo, teremos após somente 4 iterações o valor da raiz aproximada, dada abaixo. > newton(fx,4) $root [1] 4.0876 $f.root [1] 5.684342e-13 $iter [1] 4 $estim.prec [1] 3.15894e-11 Aplicando-se o Método da Secante observamos que foi preciso apenas 5 iterações para se obter a raiz aproximada x = 4, 0876. > secante(fx,4,5,10^-4) 82 Capítulo 4. ROTINAS E PACOTES NO R Iteração: 1 Iteração: 4 Raiz: 4.053167 Raiz: 4.087599 Iteração: 2 Iteração: 5 Raiz: 4.07415 Raiz: 4.0876 Iteração: 3 Raiz: 4.087835 Utilizando agora a função uniroot(), teremos os seguintes resultados abaixo. A partir da função, foi obtida a raiz aproximada x = 4.087572 em apenas 5 iterações. > uniroot(fx,c(4,5)) $root [1] 4.087572 $f.root [1] 0.01084842 $iter [1] 5 $init.it [1] NA $estim.prec [1] 6.103516e-05 Por último, utilizamos o pacote animation, que vai ilustrar o processo de como encontrar a raiz aproximada pelo método de NewtonRaphson. Juntamente com a função interactive(), será possível observar alguns comportamentos do gráfico, simplesmente alterando o 4.2. ALGUNS PACOTES DO R 83 seu ponto inicial. Foram utilizados como pontos iniciais x0 = 5, 5 e x0 = 3, 5. Logo, os dados obtidos serão apresentados a seguir. > if (interactive()) { ani.options(interval = 0.5, nmax = 50) xx = newton.method(fx, rg = c(3, 6), interact = TRUE) } Aqui, a Figura 20 ilustra o procedimento para encontrar a raiz aproximada, adotando como ponto inicial x0 = 5, 5. Neste caso, foi preciso de 5 iterações para se obter o valor. Figura 20 – Gráfico interativo utilizando x0 = 5, 5 Fonte: Produção do próprio autor > xx$root 4.0876 84 Capítulo 4. ROTINAS E PACOTES NO R > xx$iter [1] 5 Agora, a Figura 21 ilustra o procedimento para encontrar a raiz aproximada, adotando como ponto inicial x0 = 3, 5. Aqui foi preciso de 4 iterações para se obter o valor aproximado da raiz. Mas, é possível observar ao lado do gráfico, que ele nos retorna o valor da raiz aproximada naquele ponto com exatamente 14 casas decimais após a vírgula. Logo, se aqui fossemos rigorosos e adotassemos este como a nossa raiz aproximada, observaríamos que existe uma pequena diferença entre os valores encontrados, devido o ponto inicial escolhido. Em alguns casos, o valor poderá divergir, devido a má escolha do ponto inicial. Figura 21 – Gráfico interativo utilizando x0 = 3, 5 Fonte: Produção do próprio autor > xx$root 4.0876 4.2. ALGUNS PACOTES DO R 85 > xx$iter [1] 4 Com os resultados obtidos até então é possível que o aluno consiga verificar por si mesmo qual será o melhor método para cada um dos problemas que se queira resolver. Neste caso o método de NewtonRaphson nos retornou a raiz aproximada com um menor número de iterações, e utilizando o pacote animation foi possível obter um melhor resultado para a raiz aproximada. Para o acadêmico, estes pacotes se tornam uma ferramenta adicional em seu aprendizado. A partir do pacote animation é possível compreender cada método numérico aqui apresentado, permitindo assim a construção das fórmulas e conceitos a partir das animações. Além disso, as rotinas aqui elaboradas são simples, com o próposito de que pudessem ser aplicadas em sala para o ensino de Cálculo Numérico. Assim, o aluno será capaz de compreender cada método, aprender melhor cada um deles, tendo como foco uma aprendizagem mais efetiva do assunto. 87 CONCLUSÃO Este trabalho teve como objetivo principal explorar algumas potencialidades do pacote GNU R para aplicações e elaboração de rotinas em Cálculo Numérico. Os objetivos, tanto principal como específicos, foram alcançados, ressaltando, que seria importante realizar uma melhor descoberta sobre o uso do R em dispositivos móveis. No primeiro capítulo foram descritos brevemente alguns métodos para se calcular zeros de funções, em especial, apresentando suas origens e construções. No capítulo seguinte, pudemos conhecer o R como sendo uma linguagem de programação. Em seguida, no terceiro capítulo, foi retratada a importância do uso de computadores e da aplicação dos métodos em problemas práticos. No capítulo 4 deste trabalho elaboramos algumas rotinas e exploramos alguns pacotes do R, com o propósito de aplicarmos em exemplos e problemas de aplicação. Neste sentido, conclui-se que o R é uma alternativa viável para aplicações e uso em aulas de Cálculo Numérico. A partir dos pacotes que o R disponibiliza, o acadêmico possui uma maior gama de rotinas e/ou programas a serem explorados, juntamente com o uso dos gráficos animados tornando assim a aula mais atrativa e o processo de ensino aprendizagem desta disciplina mais efetivo. Assim sendo, o acadêmico será capaz de observar graficamente a construção dos métodos e de compreender os motivos de quando um dado problema de aplicação converge ou diverge. Outra característica importante de ser citada, é que as rotinas são simples de serem implementadas e aplicadas, contribuindo para a efetividade do processo ensino aprendizagem. Para finalizar, gostaríamos de deixar algumas recomendações que poderão servir como tema para trabalhos futuros. As rotinas e pacotes utilizados aqui foram para calcularmos os zeros de funções a 88 Conclusão partir de alguns métodos. Assim, seria adequado que o estudo fosse estendido para os demais métodos, como para a resolução de sistemas lineares, interpolação, integração numérica, entre outros. Uma sugestão específica para o conteúdo de Zeros de Funções é implementar uma função para o Método da Secante, com o propósito de apresentá-lo em um gráfico animado como foi visto com os demais. Outra sugestão seria aplicar o R nas aulas de Cálculo Numérico avaliando de forma quantitativa e qualitativa os resultados. Para finalizar ressaltamos que o R se configura como uma alternativa exequível e atrativa para proporcionar um aprendizado mais efetivo de Cálculo Numérico. 89 Referências AMARAL, T. R. do; LEITE, N. M. G.; SILVA, A. O. da. O Ensino de Cálculo Numérico Utilizando o Scilab. In: VI CONGRESSO INTERNACIONAL DE ENSINO DA MATEMÁTICA, 2013, Canoas. BASSANEZI, R. C. Ensino Aprendizagem com Modelagem Matemática. São Paulo: Contexto, 2002. BEASLEY, C. R. Bioestatística usando R. Universidade Federal do Pará. 2004. Disponível em: <http://www.r-project.org/other-docs. html>. Acesso em: 21 mar. 2015. BLOG HISTORIA DE LA INFORMÁTICA. Charles Babbage. Disponível em: <http://histinf.blogs.upv.es/2010/10/28/charles-babbage/>. Acesso em: 11 abr. 2015. BORCHERS, H. W. pracma: Practical Numerical Math Functions. R package version 1.8.3, 2015. Disponível em: <http://CRAN.R-project. org/package=pracma>. Acesso em: 18 mai. 2015. BURDEN, R.; FAIRES, J. Análise Numérica. São Paulo: Cengage Learning, 8a edição, 2008. CANO, J. W. R.; OSPINA, M. F. R. Scilab as a Tool to Increase Learning in Courses of Com-munication Systems. In: ELETRONICS, ROBOTICS AND AUTOMOTIVE MECHANICS CONFERENCE, 2008. CERMA’08. IEEE. 2008, p. 201-205. CHAPRA, S. C.; CANALE R. P. Métodos Numéricos para Engenharia. São Paulo: McGraw-Hill, 2008. CORDEIRO, N. J. N.; ALMEIDA, J. P. P. Mini Curso de Introdução ao R. 2009. 23 p. Trabalho realizado para a Semana da Matemática. 90 Referências CUNHA, M. C. C. Métodos Numéricos. Campinas: Editora da Unicamp, 2003. DENARDI, R. M. et al. Laboratório Computacional de Física: uma Experiência de Ensino Integrado de Matemática Numérica e Física em Engenharia, 2004. FERREIRA, D. S.; CYMROT, R. Uso do software R no tratamento estatístico de dados na Engenharia. In: CONGRESSO DE INICIAÇÃO CIENTÍFICA DO INATEL - INCITEL, 2012, Minas Gerais. Anais...São Paulo: Universidade Presbiteriana Mackenzie, 2012. p. 251257. FOX, J. The R Commander: A Basic-Statistics Graphical User Interface to R. Journal of Statistical Software, v. 14, n. 9, p. 1-42, 2005. FRANCO, N. B. Cálculo Numérico. São Paulo: Pearson, 2006. GIL, A. C. Como elaborar projetos de pesquisa. 5 ed. São Paulo: Atlas, 2010. GILAT, A.; SUBRAMANIAM, V. Métodos Numéricos para Engenheiros e cientistas. Porto Alegre: Bookman, 1a edição, 2008. HENNING, E. et al. Um Estudo para a Aplicação de Gráficos de Controle Estatístico de Processo em Indicadores de Qualidade da Água Potável. Revista Eletrônica Sistemas & Gestão, Volume 9, Número 1, p. 2-13, 2014. HENNING, E. et al. Aplicação de gráficos de Controle Estatístico de Processos para o monitoramento dos casos de meningite no município de Joinville. Revista Eletrônica Produção em Foco. Instituto Superior Tupy - SOCIESC, v. 02, n. 01: p. 01-26, 2012. KOVBA, D. R Programming Language, 2015. Disponível em: <http://itunes.apple.com/us/app/r-programming-language/>. Acesso em: 27 mar. 2015. MACHADO, I. de A.; ALVES, R. R. Método de Newton. Revista Eletrônica de Educação da Faculdade Araguaia, 4: 30-45, 2013. Referências 91 MEDEIROS, A.; MEDEIROS, C. F. de. O Método da Falsa Posição na História e na Educação Matemática. Ciência & Educação, v. 10, n. 3, p. 545-557, 2004 MOTA, R. P. B. Código livre Scilab para o ensino de Cálculo Numérico. In: XXII SBIE - XVII WIE, 2011, Aracajú. Anais... Aracajú, 2011. p. 600-609. NOTARE, M. R.; BEHAR, P. A. Aprendizagem e Comunicação Matemática em Ambientes Virtuais: Uma Experiência com o Cálculo Diferencial. In: XX SIMPÓSIO BRASILEIRO DE INFORMÁTICA NA EDUCAÇÃO, 2009, Florianópolis. OWEN, J. et al. spuRs: Functions and Datasets for "Introduction to Scientific Programming and Simulation Using R". R package version 2.0.0, 2014. Disponível em: <http://CRAN.R-project.org/ package=spuRs>. Acesso em: 25 mai. 2015. PAPAKONSTANTINOU, J. M. Historical Development of the BFGS Secant Method and Its Characterization Properties. A Thesis Submitted in Partial Fulfillment of the Requirements for the Degree Doctorate of Philosphy, Rice University, Houston, 2009. R CORE TEAM. R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria, 2011. Disponível em: <http://www.R-project.org/>. Acesso em: 17 mar. 2015. RAMOS, D. M. C.; ARAUJO, W. B. de; OLIVEIRA, A. R. de. Aplicação de métodos numéricos através ambiente gráfico no ensino de engenharia. In: XXVIII ENCONTRO NACIONAL DE ENGENHARIA DE PRODUÇÃO, 2008, Rio de Janeiro. RIBEIRO, R. R. J. Revisão Bibliográfica de Alguns Métodos Numéricos para Obtenção de Zeros Reais de Funções Transcedentes e Polinomiais. Trabalho de Conclusão de Curso, Universidade Federal Rural do Semi-árido, Rio Grande do Norte, 2012. RIBEIRO, R. R. J.; MENEZES, M. da S.; MEZZOMO, I. Métodos Numéricos para Aproximação de Raízes de Funções. In: CONGRESSO DE MATEMÁTICA APLICADA E COMPUTACIONAL, 2012, Rio Grande do Norte. Anais... Rio Grande do Norte, 2012. p. 444-446. 92 Referências ISSN 2317-3297. ROMIO, L. C.; SOARES, M. A. da S. O Ensino de Cálculo Numérico: Uma Experiência com Alunos do Curso de Ciência da Computação. In: XI ENCONTRO NACIONAL DE EDUCAÇÃO MATEMÁTICA, 2013, Curitiba. Anais... Curitiba, 2013. p. 1-10. ISSN 2178-034X. RSTUDIO. Disponível em: <http://rstudio.org>. Acesso em: 27 mar. 2015. RUGGIERO, M. A. G.; LOPES, V. L da R. Cálculo Numérico: aspectos teóricos e computacionais. São Paulo: Pearson Makron Books, 1996. SAMOHYL, R. W. Controle Estatístico da Qualidade. Rio de Janeiro: Campus, 2009. SANTOS, R. J. Álgebra Linear e Aplicações. Belo Horizonte: Imprensa Universitária da UFMG, 2010. SOETAERT, K. rootSolve: Nonlinear root finding, equilibrium and steady-state analysis of ordinary differential equations. R - package version 1.6, 2009. Disponível em: <http://CRAN.R-project.org/ package=rootSolve>. Acesso em: 30 mai. 2015. SOETAERT, K.; HERMAN, P. M.J. A Practical Guide to Ecological Modelling. Using R as a Simulation Platform. Springer, 372 p., 2009. SPERANDIO, D.; MENDES, J. T.; SILVA, L. H. M. e. Cálculo Numérico: características matemáticas e computacionais dos métodos numéricos. São Paulo: Pearson Prentice Hall, 2003. TALES OF R. Install R in Android, via GNURoot -no root required!. Disponível em: <https://talesofr.wordpress.com/tag/ r-console-free/>. Acesso em: 10 jun. 2015. VANCE, A. The New York Times, Estados Unidos, 10 jan. 2009. Disponível em: <http://tecnologia.terra.com.br/hardware-e-software/ poder-da-linguagem-r-fascinaanalistas>. Acesso em: 09 mai. 2015. Referências 93 VENABLES, W. N.; SMITH,D.M.; R CORE TEAM. An introduction to R. Disponível em: <http:// www.r-project.org>. Acesso em: 21 mar. 2015. VERZANI, J. Getting Started with RStudio. United States of America: O’Reilly Media, Inc., 2011. WALTER, O. M. F. C. et al. Uma Visão Geral do RStudio Aplicado ao Ensino de Controle Estatístico do Processo. In: XL CONGRESSO BRASILEIRO DE EDUCAÇÃO EM ENGENHARIA, 2012, Bélem. WALTER, O. M. F. C. et al. Aplicação individual e combinada dos gráficos de controle Shewhart e CUSUM: uma aplicação no setor metal mecânico. Gest. Prod. [online]. 2013, vol.20, n.2, p. 271-286. ISSN 0104-530X. XIE, Y. animation: An R Package for Creating Animations and Demonstrating Statistical Methods. Journal of Statistical Software, 53(1), 1-27, 2013. XIE, Y.; YU, L.; ZHU, W. animation: A gallery of animations in statistics and utilities to create animations. R package version 2.3, 2014.