Algoritmo do método de Newton

Publicado por Rafael Henrique da Silva Correia 02/05/2008

[ Hits: 30.594 ]

Homepage: http://abraseucodigo.com.br

Download newton.c




Script para achar 0 em funções reais!! Em termos computacionais o método de Newton é o mais eficaz para fazer isso, pois é o que usa menos iterações possíveis!

OBS: O código ainda não lê funções digitadas, por isso mude a função Fxnovo e Fdxnovo para as funções que você desejar, lembrando que Fdxnovo é a derivada de Fxnovo e a função colocada no exemplo é a função F(x)=x^3-9*x+3

  



Esconder código-fonte

#include <stdio.h>
#include <stdlib.h>

float Abs( float x ){
    x = ( x * x ) / -(x);
    return x;
};

int main(){
    float solucao = 0., xini = 0., xnovo = 0., Fxnovo = 0., 
          Fdxnovo = 0., E = 0.;// Fdxini = derivada de Fxini
    int k = 0;

    printf( "Digite o x inicial: " );
    scanf( "%f", &xnovo );
    printf( "Digite a precisao: " );
    scanf( "%f", &E );
    
    do{
        
       xini = xnovo;
       Fxnovo = ( xini * xini * xini ) - 9. * xini + 3.; //inserir sua função principal aqui
       Fdxnovo = 3. * ( xini * xini ) - 9.; //inserir a derivada da função principal aqui
       xnovo = xini - ( Fxnovo / Fdxnovo );
        k += 1;
        printf( "\niteracao = %d", k );
        printf( "\nxini = %f\nxnovo = %f", xini, xnovo );

    } while( Abs( xnovo - xini ) >= E || Abs( Fxnovo ) >= E );

    printf( "\n\nxnovo - xini = %f\n", xnovo - xini);
    printf( "A solucao final eh: %f\n", xnovo );
    return 0;
}

Scripts recomendados

Controle de tráfego aéreo - filas dinâmicas

Loop de Várias Váriáveis Em Um Único Laço "For" em C

Desenhando Nuvens ou o Fractal de Plasma

Fila

Photon Mapper


  

Comentários
[1] Comentário enviado por HelioCampos em 02/05/2008 - 07:48h

Seu ABS está errado. se mando valores positivos e me retorna o negativo do mesmo.
utiliza sqrt(x * x) ou if ( x < 0 ) x = -x;

[2] Comentário enviado por HelioCampos em 02/05/2008 - 07:58h

Nesse algoritmo, como no da bisseção, vc coloca E (Epsilon) como "0.". Novamente, isso é um erro pois, dependendo MUITO do ponto onde a pessoa começar o calculo e dependendo MUITO da função que ela escolher, teremos um estouro do float por ele não ter conseguido chegar ainda no ponto e o valor ainda for maior que 0(zero).

[3] Comentário enviado por rafaelhenrique em 02/05/2008 - 11:15h

HelioCampos o ABS está errado mesmo mas só fui perceber depois que postei, no meu blog está corrigido, agora sobre o Epsilon, ele não é 0, o usuário o digitará, quem é 0 é o k. Muito obrigado por seus comentários.

[4] Comentário enviado por g_s.lima em 04/05/2010 - 18:19h

Para float o "Abs" deve ser substituido pelo "fabs" e então não é necessário fazer uma função a parte. Acho que tá na math.h

[5] Comentário enviado por Migork em 02/06/2010 - 19:17h

Como colucar para podermos intrudozir uma funcao a escolha do utilizador?? alguem me ajuda?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts