Zeros de Funções
O problema aqui é encontrar os valores da variável independente que fazem com a função tenha o valor zero.
Matematicamente pode ser formalizado assim:
Os zeros da função f são também chamados de raízes.
Um exemplo simples é achar as raízes da função . A simplicidade vem do fato dessa função ter inversa, com o qual a solução pode ser encontrada isolando o x: que é o zero dessa função ou equação.
Outro exemplo clássico são as raízes de uma parábola:
da qual existe uma expressão para as raízes (cuja programação é um dos exercícios):
Porem, quando a função é mais complicada, o problema de achar os zeros pode não ter (é o mais comum) solução analítica.
Vale notar que ao tratar dos zeros podemos generalizar o conceito para qualquer outro valor. Por exemplo, achar x tal que é equivalente a achar os zeros de . De outra forma podemos dizer que trata-se do problema inverso: dado o valor da função queremos saber de que valor da variável independente partiu.
Numericamente, temos três métodos usuais que serão descritos aqui, os métodos da Iteração Simples, Newton-Raphson e Método da Bisecção.
Iteração Simples
Para o método da iteração simples, utiliza-se uma nova função para encontrar-se o zero da função original , de modo que se define
assim
Utilizamos a própria função para definir o valor de nas iterações, tendo que existir um "chute" inicial para o valor . Assim, a iteração pode ser definida como
- .
Itera-se a equação até atingir-se um valor fixo, ou seja, .
As duas principais destavantagens deste método devem-se ao fato de ele ser mais lento que demais métodos e quando utlizados para encontrar raízes "instáveis" de iteração. Para descobrir se haverá raizes instáveis de convergência, utilizamos a condição de convergência do método, perturbando a solução e expandindo em série de Taylor:
Note que para
o efeito da perturbação decai, indicando que a raíz é estável por este método.
Newton-Raphson
O método de Newton-Raphson é um procedimento para encontrar zeros de funções de maneira iterativa, assim como o método da iteração simples. Partindo de um ponto qualquer da função vamos ao próximo ponto com deslocamento dado pela derivada no ponto inicial:
Desta forma o próximo ponto está dado por:
- .
e o processo é repetido até a precisão desejada. Note que numericamente não temos garantia de achar exatamente a raiz. Devemos fixar um que determina a tolerância com que vamos a aceitar o zero. Ou seja quando paramos a procura.
Por outra parte o método não garante a convergência, isto é, pode acontecer que o processo entre num ciclo infinito pipocando de uma lado para outro da raiz, sem poder encontrar uma solução.
Programação
Para programá-lo em FORTRAN o mais prático é definir como funções tanto a própria função como a sua derivada. Sejam elas f(x) e g(x) respectivamente, o trecho de código com a implementação do método fica:
... x = x0 Do if (g(x)==0) then print*, "em x=", x, "a derivada é zero" else x = x - f(x)/g(x) if (abs(f(x)) < eps) then print*, "raiz em x=", x, "f(x)=", f(x) exit endif endif endo ...
Plano Complexo
O método pode ser estendido a funções f(z) onde z, e f(z) pertencem a C (domínio dos números complexos). Dessa forma todas as raízes de um polinômio podem em princípio ser encontradas. O método tem a mesma formulação teórica. Só muda o programa pois precisamos usar complexos.
Complex f, z Real x,y Read*, x,y z = CMPLX(x,y) ! função FORTRAN intrínseca para converter un par x,y de variáveis reais numa variável complexa ... if (abs(f(z)<eps) print*, z ...