Cálculo de logaritmo de um número por Método de Newton-Raphson em C

Publicado por Perfil removido (última atualização em 18/05/2012)

[ Hits: 7.391 ]

Download logaritmo-metodo-b-001.c




A descrição vai ao código.

Este método, também como o algoritmo "A", necessita da definição do que é  uma derivada.

Ele é bem mais simples de implementar que Séries de Taylor e possui um custo computacional bem menor também.

O problema é a necessidade de um valor inicial, que é aproximado a cada iteração. Deste valor depende a veloidade de mais ou menos iterações.

Grosseiramente o método funciona por uma fórmula F(x) onde se começa com o valor x0. Depois continua-se com x1=F(x0) e segue:

x2=F(x1)
x3=F(x2)
x4=F(x3)
...

Até o último valor x_ obtido ser muito igual com o último valor x_ que entrou.

Para saber como é essa fórmula F(X) é que é necessário saber algo de derivadas.

Qualquer erro encontrado ou dúvida, fiquem à vontade.

  



Esconder código-fonte

#include <stdio.h>
#include <math.h>

// Algoritmo "B"

// Logaritmo por Metodo de Newton-Raphson
// Favor compilar com
// gcc logaritmo-metodo-b-001.c -o logaritmo-metodo-b-001 -lm

// Calcula logaritmo natural - Base "e"
// Funciona por aproximacao e necessita de um valor inicial (chute) para funcionar.
// Quanto maior a diferenca do chute e do valor principal, mais vezes o laco while se repete
// Aqui o chute eh uma "raiz quarta".
// Para logaritmos em outras bases requer um pouco de trabalho
// Seria nessessario executar o algoritmo duas vezes, uma para cada numero - a base e o que se quer saber o logaritmo.
// Nocoes de calculo tambem ajudam

int main (void) {

   double s = 0.0;
   double l = 0.0;
   double x = 21397534.0;

//   int q = 0;

   s = sqrt(sqrt(x));

   do {

      l = exp(s);
      s -= ((l-x)/l);

//      printf ("q=%4d\tx=%15.25f\ts=%15.25f\n", q, x, s);

//      q++;

   } while (l/x>1);

//   printf ("q=%4d\tx=%15.25f\tl=%15.25f\ts=%15.25f\n", q, x, l, s);
   printf("e^%15.25f=%15.25f\n", s, exp(s)); 

   return 0;

}

Scripts recomendados

Efeito Bubblesort

Escaneando diretório

Funções com número variável de argumentos

Converter arquivos Bitmap para ASCII-art

jogo Sokoban (com gráficos)


  

Comentários
[1] Comentário enviado por levi linux em 22/05/2012 - 12:56h

Esse método é muito eficiente, é o meu preferido. Parabéns!



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts