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.388 ]
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.
#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; }
AIMG-mostrar imagem fraquimentada em pontos aleatórios
Leds da porta paralela com interface
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Mensagem quando tento fazer o apt update && apt upgrade no kal... (2)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (0)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta