Universidade Federal de Santa Maria
Ci. e nat., Santa Maria, V. 42, Special Edition, e10, 2020
DOI: http://dx.doi.org/10.5902/2179460X40478
Received: 10/10/2019 Accepted: 10/10/2019
Special Edition
Obtenção de zeros de funções utilizando Python
Obtaining zeros of functions using Python
David Lucas PereiraI
Ana Luisa SoubhiaII
Aline Brum LoretoIII
I Universidade Federal de Santa Maria, Campus Cachoeira do Sul, Brasil - lucasp.david@hotmail.com
II Universidade Federal de Santa Maria, Campus Cachoeira do Sul, Brasil - ana.soubhia@ufsm.br
III Universidade Federal de Santa Maria, Campus Cachoeira do Sul, Brasil - aline.loreto@ufsm.br
Resumo
Os métodos numéricos mostram-se de grande importância para a Engenharia, pois muitos problemas reais possuem modelagens matemáticas complicadas de serem resolvidas de forma analítica. Sendo assim, os métodos de resolução para diversos problemas vistos na disciplina de Métodos Numéricos Computacionais, bem como na disciplina de Algoritmos, são indispensáveis para a formação de um futuro Engenheiro. Dentre os diversos métodos numéricos existentes, destacam-se os métodos para obtenção de zeros de funções: Bissecção, Posição Falsa e Newton-Raphson. O método da Bissecção consiste em definir um intervalo que contém uma raiz e, utilizando a média aritmética, dividi-lo até que a precisão desejada seja alcançada. No caso do método da Posição Falsa, a média aritmética ponderada é utilizada para a obtenção da raiz aproximada. Por fim, apesar do método de Newton-Raphson ter convergência mais rápida que os demais, o inconveniente deste é a necessidade da utilização da derivada da função estudada. Com isso, em certos casos, a utilização deste método pode ser inviável. Neste trabalho, os métodos citados são implementados na linguagem de programação Python, com o intuito de fortalecer conhecimentos de programação na formação de engenheiros, bem como enfatizar a importância da aplicação de métodos numéricos em problemas práticos das diversas áreas das engenharias.
Palavras-chave: Bissecção; Posição falsa; Newton-Raphson
Abstract
Numerical Methods are very important in Engineering because many real problems have complicated mathematical models that are difficult to be solved analytically. Thus, the methods of resolution for several problems that are studied in the discipline of Computational Numerical Methods, as well as in the discipline of Algorithms, are indispensable for the formation of a future Engineer. Among the several numerical methods that exist, the following are the methods for obtaining zeros of functions: Bisection, False Position and Newton-Raphson. The Bisection method consists of defining the range containing a root and, using the arithmetic mean, dividing it until the desired precision is reached. In the case of the False Position method, the weighted arithmetic mean is used to obtain the approximate root. Finally, although Newton-Raphson's method has faster convergence than the others, the drawback of this method is the need to use the derivative of the studied function. Thus, in some cases, this method may be impracticable. In this work, the methods mentioned will be implemented in the Python programming language. In this work, the mentioned methods are implemented in the Python programming language, in order to strengthen programming knowledge in the formation of Engineers, as well as to emphasize the importance of applying numerical methods in practical problems of various engineering areas.
Keywords: Bisection; False position; Newton-Raphson
1 Introdução
Problemas de Engenharia podem ser formulados utilizando-se funções, equações e expressões matemáticas. Todavia, dificilmente, esses problemas matemáticos podem ser resolvidos utilizando-se técnicas analíticas. Devido a isso, salienta-se a importância dos métodos numéricos de resolução. Dentre os diversos métodos numéricos aplicados, existem os métodos de obtenção de zeros de funções.
Três métodos de obtenção de zeros de funções geralmente se destacam (RUGGIERO, 1997): Método da Bissecção, da Posição Falsa e de Newton-Raphson. Cada um desses métodos possui sua particularidade, entretanto, todos constam de duas fases, isto é, primeiramente, é necessário definir um intervalo no qual existe pelo menos uma raiz real da função analisada, na sequência esse intervalo é refinado. Por fim, para determinar o fim do processo iterativo é necessário estabelecer uma precisão.
No presente trabalho, os conceitos teóricos de cada método numérico citado anteriormente foram estudados, e para a implementação dos algoritmos, a linguagem de programação Python foi utilizada. Esta linguagem foi escolhida devido a sua praticidade e também pela crescente procura dos acadêmicos em aplicá-la. O diferencial de elaborar algoritmos, ao invés de utilizar programas já consolidados no mercado, é a possibilidade de obter melhores aproximações para os zeros, pois na maior parte destes softwares não é possível verificar a qualidade destas raízes. Deseja-se em um futuro próximo criar um aplicativo, de código aberto, de obtenção de zeros de funções.
Este trabalho está organizado da seguinte forma: Na seção 2 é realizada uma descrição sobre zeros de funções e os métodos aqui implementados. Posteriormente, na seção 3, são destacados alguns softwares matemáticos também utilizados em Métodos Numéricos. Na seção 4, o algoritmo do método de Newton-Raphson em linguagem Python é apresentado. Os resultados obtidos através dos algoritmos implementados são apresentados na seção 5. As conclusões são apresentadas na seção 6, seguidas dos agradecimentos e das referências.
2 Zeros de Funções
Uma forma de resolver problemas reais é modelá-los matematicamente, isto é, obter funções e/ou equações que descrevem os fenômenos físicos observados. Porém, em alguns casos, após a modelagem pode-se obter funções complexas, dificultando a procura analítica dos valores no qual essas se anulam. Em vista disto, uma alternativa é a obtenção de um resultado numérico aproximado.
Existem diversos métodos numéricos para obtenção de zeros de funções. Neste trabalho, três métodos são explorados: Método da Bissecção, Posição Falsa e Newton-Raphson (RUGGIERO, 1997 e NEIDE FRANCO, 2006). Esses métodos consistem na obtenção de um intervalo que contém uma raiz da função estudada e, em seguida, este intervalo é refinado utilizando um processo iterativo.
Para obter um intervalo, que contém uma raiz, pode-se utilizar o Teorema de Isolamento de Raízes, que consiste na análise de uma função contínua em um intervalo [a,b], tal que a função f(x) tenha sinais opostos nos limites do intervalo, isto é, f(a).f(b) < 0, então ocorrerá a existência de raiz no intervalo [a,b]. Se f´(a) e f´(b) tiverem o mesmo sinal, a existência de uma única raiz é garantida, se o oposto ocorrer, pode ou não conter somente uma única raiz no intervalo (RUGGIERO, 1997).
Um ponto importante a ser considerado é que cada método tem um ciclo de repetições intitulado de iteração (k). A cada iteração refina-se o intervalo que contém a raiz, sendo necessário o uso de um critério de parada, critério esse que serve para a verificação da qualidade da raiz obtida em cada iteração. Para o uso de um critério de parada é necessário definir uma precisão, aqui representada por e. Quanto menor for o valor do e, melhor será a qualidade da raiz obtida, porém isso pode aumentar o nível de exigência computacional do processo, levando assim no aumento de tempo computacional necessário para a obtenção da raiz.
2.1 Método da Bissecção
O método da Bissecção consiste em diminuir o tamanho do intervalo real e contínuo [a,b], que contém a raiz da função, até atingir uma precisão e predefinida (RUGGIERO, 1997). As divisões sucessivas do intervalo são realizadas utilizando-se a equação (1):
(1)
onde ak e bk são os limites inferior e superior, respectivamente, do intervalo que contém a raiz. A equação (1) é a média aritmética simples do intervalo analisado, ou seja, a cada iteração, o intervalo é dividido ao meio chegando mais próximo da raiz aproximada. A Figura 1 descreve esse procedimento.
Figura 1 – Comportamento gráfico do método da Bissecção
Fonte:RUGGIERO, 1997
A cada iteração, os limites do intervalo são alterados obedecendo ao Teorema de Isolamento de Raízes, isto pode ser observado no gráfico da Figura 1. A partir dos extremos do intervalo inicial [a0,b0] e da equação (1), obtém-se o ponto x0. Utilizando o Teorema de Isolamento de Raízes, define-se o novo intervalo a ser analisado que no caso da Figura 1 será [a0,x0], que na próxima iteração será denominado de [a1,b1]. A partir desse novo intervalo, o ponto x1 é obtido (equação (1)). Utilizando o Teorema de Isolamento de Raízes, nota-se que o novo intervalo será [x1,b1], que na próxima iteração será denominado [a2,b2]. Ou seja, a cada iteração um novo intervalo, [ak, xk] ou [xk,bk], será definido.
O processo iterativo ocorre até que o critério de parada seja satisfeito. No método da Bissecção, o critério de parada comumente utilizado é definido pela equação (2):
. (2)
Ao substituir os valores da primeira e da segunda iteração na equação (2) se obtém um determinado valor que deve ser comparado com o e predefinido. Se este valor for menor que o e, o processo de iteração é finalizado, pois a melhor raiz para o caso analisado foi encontrada. Caso contrário, o processo iterativo deve continuar.
Quando existe a necessidade de se encontrar uma estimativa de número de iterações do método da Bissecção, utiliza-se a equação (3):
. (3)
Ao efetuar a substituição do intervalo, que contém a raiz da função analisada, e também do e escolhido, na equação (3), obtém-se uma estimativa de quantas iterações serão necessárias para a aplicação do método da Bissecção. Se o valor encontrado não for inteiro, arredonda-se este valor para o seguinte valor inteiro.
2.2 Método da Posição Falsa
O método da Posição Falsa é semelhante ao método da Bissecção. A diferença consiste que no método da Bissecção a média aritmética simples é utilizada para dividir o intervalo, e no método da Posição Falsa a média ponderada do intervalo é utilizada, isto é:
. (4)
Tornando assim, o método da Posição Falsa, em alguns casos, mais eficiente, em termos de números iterações, comparado ao método da Bissecção.
Assim como o método da Bissecção, o método da Posição Falsa obedece ao Teorema de Isolamento de Raízes, então, a cada iteração, o intervalo [a,b] deve ser alterado como apresentado no método anterior. O critério de parada utilizado é o mesmo usado no método da Bissecção (equação (2)).
Figura 2 – Comportamento gráfico do método da Posição Falsa
Fonte:RUGGIERO, 1997
O comportamento do método da Posição Falsa pode ser observado na Figura 2. No começo há a existência de a0 e b0, que são os limites do intervalo inicial definido, posteriormente, utilizando a equação (4) obtém-se x0, sendo este valor a primeira proposta de uma raiz que atende a função escolhida. Isso será efetivado ou não, com a aplicação do critério de parada, se este não for satisfeito, encontra-se o novo intervalo a ser analisado da mesma forma que no método da Bissecção (utilizando o Teorema de Isolamento de Raízes). Assim, o processo iterativo deve ocorrer até que o critério de parada seja satisfeito.
2.3 Método de Newton-Rapshon
Seja uma função f(x) contínua em um intervalo [a,b] cujas derivadas de primeira e de segunda ordem também sejam contínuas neste mesmo intervalo [a,b]. Desde que f(x) obedeça ao Teorema de Isolamento de Raízes, então é possível aplicar o método de Newton-Raphson que é dado pela equação (5):
(5)
onde xk é um valor que está contido no intervalo [a,b], f(xk) e f´(xk) são, respectivamente, a função aplicada em xk e a derivada da função também aplicada em xk.
Três propriedades são necessárias para a ocorrência deste método: a primeira é que satisfaça ao Teorema de Isolamento de Raízes; a segunda é que a primeira derivada da função seja diferente de zero e a terceira e última propriedade é que a segunda derivada da função não troque de sinal no intervalo analisado.
Figura 3 – Comportamento gráfico do método de Newton-Raphson
Fonte:RUGGIERO, 1997
O comportamento gráfico deste método pode ser observado na Figura 3. A princípio, tem-se um ponto inicial chamado de x0. Aplicando o método (equação (5)) obtém-se x1, que é uma proposta de raiz. Esta proposta deve ser analisada substituindo-se este valor na função. Se o módulo do valor da função calculada no ponto x1 for menor que e, a raiz aproximada para este caso foi encontrada, se o oposto ocorrer aplica-se o método novamente.
Este método é de convergência rápida para a raiz aproximada, ou seja, em comparação aos demais métodos, geralmente poucas iterações são necessárias para encontrar os zeros das funções analisadas. Porém, um grande problema deste método é a utilização da derivada da função, pois em alguns casos essa derivada pode ser difícil de ser obtida.
3 Softwares para métodos numéricos
Alguns softwares, que possibilitam a resolução de problemas relacionados a métodos numéricos encontram-se disponíveis no mercado, como o Octave, Scilab, Matlab. Estes programas foram desenvolvidos com base na programação de linguagens como C, C++, Java e Fortran e são de natureza mais abrangente, ou seja, não são focados somente em algoritmos estudados na disciplina de Métodos Numéricos Computacionais.
Para resolver possíveis problemas e obter soluções de qualidade, a comunidade acadêmica começou a desenvolver alternativas que amenizam possíveis erros. Alguns pacotes de métodos numéricos, desenvolvidos para R (ambiente computacional), se mostram de qualidade admirável, pois auxiliam na disseminação de conhecimentos relacionados a métodos numéricos e também sobre programação (pacotes open source).
No decorrer do desenvolvimento dessa pesquisa, almeja-se desenvolver pacotes de resolução de métodos numéricos relacionados a zeros de funções. Esses serão programados em Python que é uma linguagem de alto nível, ou seja, possui um nível de abstração elevada em seus algoritmos, possibilitando uma melhor compreensão. Os pacotes auxiliarão em uma melhora na qualidade de ensino de métodos numéricos e também de algoritmos de programação. A qualidade do resultado obtido terá um grande foco nestes pacotes.
4 A utilização do Python para Métodos Numéricos
Um dos softwares comumente utilizado para edição e criação de algoritmos em Python é o PyCharm. Este possui uma versão gratuita e uma versão Pro que possui funcionalidades a mais do que na versão básica. Um programador da linguagem Python encontra menos empecilhos para desenvolver seus algoritmos comparado a um programador de linguagem C, por exemplo. Isso se deve ao alto nível de coerência lógica encontrada na linguagem Python, ou seja, em poucas linhas de código é possível resolver problemas de forma mais simples.
Figura 4 – Método de Newton Rapshon implementado em Python
|
A Figura 4 apresenta os passos do método de Newton-Raphson:
1º Pede-se os dados iniciais para a execução do método de Newton;
2º Entra-se em um laço de repetição, onde se testa o critério de parada. Este laço foi limitado a 500 iterações, fazendo com que o algoritmo não entre em um loop infinito. Posteriormente, calcula-se o próximo ponto com o auxílio de uma função chamada “teste”;
3º A função “teste” recebe a f(x) analisada e sua derivada, calcula uma parte da equação (5), retorna este valor para o laço e finaliza o cálculo do próximo candidato a raiz da função;
4º Apresenta-se o valor encontrado da raiz aproximada e também o número de iterações realizadas. Os valores de saída se encontram, ao término do algoritmo, no terminal do PyCharm.
5 Resultados
A partir dos conhecimentos adquiridos sobre métodos numéricos, é possível aplicar estes conceitos em representações computacionais usando alguma linguagem de programação. A linguagem escolhida neste trabalho foi o Python que é classificada como uma linguagem de alto nível, fazendo assim com que haja uma flexibilidade maior na produção de algoritmos, por parte dos engenheiros.
5.1 Resultados obtidos através dos algoritmos
Para validar e testar os algoritmos de obtenção de zeros de funções implementados em Python, as seguintes funções, representadas na Figura 5, foram investigadas:
(6)
(7)
Figura 5 – Representação gráfica das funções das equações (6) e (7). Gráficos feitos no GeoGebra
(a) |
(b) |
|
A Figura 5(a) apresenta o gráfico da função definida na equação (6). Neste caso, nota-se graficamente, que a função possui raízes nos intervalos [-4,-2], [0,1] e [2,4]. A Figura 5(b) apresenta o gráfico da função dada pela equação (7). Neste caso, percebe-se que a função possui uma raiz no intervalo [-2,0]. Viu-se que, aplicando o Teorema de Isolamento de Raízes, também é possível obter todos os intervalos onde se tenha pelo menos uma raiz real.
Para que seja possível encontrar os resultados a partir da implementação dos métodos apresentados neste trabalho, é necessário definir em quais intervalos as funções serão analisadas. Os intervalos escolhidos foram [2,4] para a função da equação (6) e [-2,0] para a função da equação (7). Importante salientar sobre a definição da precisão e, neste caso definiu-se e= 10-4.
Tabela 1: Zero aproximado da função da equação (6)
f(x) |
|
|
k |
Bissecção |
2,816916 |
-2,882940x10-5 |
19 |
Posição Falsa |
2,816914 |
-7,806591x10-7 |
24 |
Newton-Raphson |
2,816914 |
-7,806591x10-7 |
4 |
Tabela 2: Zero aproximado da função da equação (7)
f(x) |
|
|
k |
Bissecção |
-0,999999 |
-2,098612x10-8 |
20 |
Posição Falsa |
-1,000001 |
-2,098612x10-8 |
17 |
Newton-Rapshon |
-1,000000 |
0 |
5 |
Nas Tabelas 1 e 2 os valores obtidos para a raiz aproximada (), para as funções das equações (6) e (7), respectivamente, são apresentados.
O método da Bissecção (Tabela 1) apresentou uma diferença de qualidade da raiz, entretanto o número de iterações foi menor comparado ao método da Posição Falsa, o que não é tão comum, mas é possível ocorrer. O método de Newton Raphson realizou menos iterações e alcançou a mesma raiz que o método da Posição Falsa. Para a função da equação (7), Tabela 2, a Bissecção realizou mais iterações que o método da Posição Falsa, e estes dois métodos obtiveram uma mesma qualidade de raiz. O método de Newton-Raphson alcançou a raiz exata da função, pois =0.
6 Conclusões
Através dos resultados obtidos, tem-se como conclusão que cada método deve ser analisado separadamente, para cada problema investigado. Por exemplo, o método da Bissecção normalmente realiza mais iterações que os demais métodos, mas sua facilidade de execução é destacável. O método de Newton-Raphson se mostra muito atraente para sua aplicação, entretanto a utilização da derivada da função investigada pode acarretar em uma ineficiência do método. Futuramente, como continuidade desse trabalho, almeja-se desenvolver um aplicativo de métodos numéricos, open source, para a comunidade acadêmica, utilizando a linguagem de programação Python. Além disso, espera-se melhorar a qualidade do ensino em métodos numéricos e algoritmos de programação.
Agradecimentos
Os autores agradecem o programa FIPE/UFSM pelo incentivo por parte da bolsa IC.
Referências
BURIAN R, LIMA A, HETEM A. Cálculo numérico. Rio de Janeiro: LTC, 2007.
CHAPRA C. Métodos numéricos aplicados com Matlab para engenheiros e cientistas, 3ª edição. Porto Alegre: AMGH, 2013.
FRANCO N. Cálculo numérico, Pearson Education, 2006.
ELISA H, MARCELO S, ROGÉRIO A, IVANETE S, LUCIANE S. Para Além da Computação Estatística: O uso do Ambiente R para o ensino de Métodos Numéricos rev. Renote [internet] v. 14, n. 1 (2016). Available from: https://seer.ufrgs.br/renote/issue/view/3640/showToc..
LEITE M. SciLab. Uma Abordagem Prática e Didática, Ciência Moderna, 2a edição, 2015.
MENEZES N. Introdução à Programação com Python, 3ed, São Paulo/SP: Ed. Novatec, 2019.
NAGAR N. Introduction to Octave: For Engineers and Scientists, Apress; Edição: 1st ed, 2017.
RUGGIERO M., LOPES V. Cálculo Numérico: Aspectos Teóricos e Computacionais, 2a edição. São Paulo: Pearson Education do Brasil, 1997.