Extraction de la racine n-ieme

Description

Voila un programme qui montre comment extraire un racine n-ieme par l'algorithme de Newton.
Celui-ci consiste en une suite qui convergne (normalement) vers 0.
La formule est dans le source.

Le programme permet de voir le convergence de la suite, et pour cela il calcule la valeur attendue grace aux fonctionx de math.h.
Cependant il faut au moin avoir une fonction d'elevation a la puissance entiere.
Ici j'ai permis de prendre des reel pour n, mais normalement c'est un entier, et donc la fonction pow de math.h n'est utilisee qu'avec des puissances entieres.

Donc le but est de resoudre : x^n=k

Source / Exemple :


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

// extraction de la racine-n-ieme par l'iteration de Newton :
// si
//                 f'   /     // x    = x   -  ----- |   x   |
//  n+1    n       f    \   n /
// 
// 
// alors lim x  = a   tel que f(a) = 0  (en resume, une racine)
//       +oo  n
// 
// les criteres de convergences sont compliques ...
// ... pas etonnant qu'avec cet algorithme on fasse des fractales
double InputDouble(char *text)
{
char buf[256];
printf("%s",text);
gets(buf);
return atof(buf);
} // InputDouble()
int main(int argc,char **argv)
{
double  x,n,k;
double  resultat;
int     i;

printf("resoudre : x^n=k :\n");
n = InputDouble("n : ");
k = InputDouble("k : ");

// on calcul le vrai resultat pour comparer
// on ne devra pas s'en servir pour retrouver le resultat
resultat = pow(k,1./n);
printf("------------------------------\n");
printf("- valeur reelle : %lf\n",resultat);
printf("- valeurs de la suite avec l'ecart relatif :\n");

x = 1.;
for(i=0;i<16;i++) // on regarde la convergence sur 16 coups
  {
  printf("x(%2d) = %8.5lf (%07.4lf %%)\n",i,x,fabs(resultat-x)/resultat);
  x -= (pow(x,n)-k)/(n*pow(x,n-1)); // voila l'iteration
  }

printf("------------------------------\n");
getch();
return 0;
} // main()

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.