Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: Opera ubuntu
Por izaias
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Scripts

Linux user

Publicado por Renan Birck Pinheiro em (última atualização em 27/05/2010)   [ 4688 hits ]

Login: Century_Child, 379904 pontos

Homepage: http://renanbirck.blogspot.com   


Descrição

Implementação na linguagem C do método de Newton-Raphson, usado para obtenção numérica do zero de funções. Não pretendo explicar o funcionamento do método aqui; recomendo a leitura de um livro de Cálculo Numérico para tal fim.

float f(float x) é a função cujo zero queremos descobrir.
float der(float x) é a derivada da função f(x); uma derivada errada tornará a convergência lenta ou impossível.

[ Download: newton-raphson.c ]   [ Enviar nova versão ]

[ Esconder código-fonte ]

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

float f(float x) {
   return pow(x,2)-5*x+6;
}

float der(float x) {
   return 2*x-5; // derivada de f(x).
}

int main() {
   float eps, x0, *iter; // erro, ponto inicial, vetor iterações.
   int i, numiter; // iteração atual, número de iterações.

   printf("Método de Newton-Rhapson para o zero da função f(x).\n");
   printf("Digite o erro: \n");

   scanf("%f",&eps);

   printf("Digite o número máximo de iterações?\n");
   scanf("%d", &numiter);

   printf("Digite o X0 inicial? \n");
   scanf("%f", &x0);

   // Alocar dinâmicamente memória para o vetor das iterações.
   iter = malloc(sizeof(float) * numiter);

   // Condições iniciais.
   iter[0] = x0;
   i = 0;

   // Iterações.
   while(f(iter[i]) > eps) {
      // Excedeu o nosso limite de iterações.
      if(i > numiter) {
         printf("Não convergiu em %d iterações!!!\n", numiter);
         printf("Provavelmente f'(x) está errada.\n");

      
      }
      iter[i+1] = iter[i] - f(iter[i])/der(iter[i]);
      i++;
   }

   printf("X ~= %f ", iter[i]);
   printf("\nForam feitas %d iterações.\n",i);
}

Scripts recomendados
   Script Linux recomendado Grafos
   Script Linux recomendado Função que converte números decimais em binários
   Script Linux recomendado Ponteiros para funções
   Script Linux recomendado Makro
   Script Linux recomendado Vários pacotes de ping disparados contra o host

Comentários
Nenhum comentário foi encontrado.

Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.