begin process at 2012 02 11 23:29:12
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > EXTRACTION DE LA RACINE N-IEME

EXTRACTION DE LA RACINE N-IEME


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Niveau :Débutant Date de création :03/06/2004 Vu / téléchargé :3 673 / 127

Auteur : JCDjcd

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
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

  • #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()
#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()


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture COLORATION SYNTAXIQUE
Source avec Zip Source avec une capture ORBITES DES SATELLITES GPS
Source avec Zip Source avec une capture DESSIN D'ARBRES
Source avec Zip Source avec une capture PROGRAMMATION LINEAIRE
Source avec Zip EXTENSION DE CORPS (MATH)

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

Commentaires et avis

Commentaire de cosmobob le 04/06/2004 19:45:26

'les criteres de convergence sont compliqués'
dans le cas d'une fonction quelconque peut etre, mais dans le cas d'une fonction de la forme x^n - a ...
une condition suffisante pour la convergence est l'existence d'un sous ensemble stable par la fonction x-&gt; -f(x)/f'(x) + x, et sur lequelle la fonction de base est convexe. pour les fonctions de ce type, il se trouve que ]0;+infini[ marche ...

donc en particulier on peut choisir le premier terme quelconque ! (positif quand meme ...)

mais dans ce cas, on peut meme prendre le premier terme &lt; 0 ! tout simplement parce que pour les n impairs, au bout d'un nombre fini d'itérations on se retrouve forcément dans ]0;+infini[, et que pour les n pairs, on va converger vers la racine n ieme negative.
donc ici, la convergence vers une racine n ieme est assuré des que le premier terme de la suite est non nul.

on dit que le bassin d'attraction de la racine n ieme positive est R* lorsque n est impair, et ]0;+infini[ si n est pair.
le bassin d'attraction de la racine n ieme negative quand n est pair est ]-infini;0[

Commentaire de JCDjcd le 04/06/2004 22:59:55

Merci pour les precisions, il est vrai que moi j'etais toujours dans le cas general.

Commentaire de vecchio56 le 08/06/2004 11:52:41 administrateur CS

Tu parle de convergence normale pour une suite, moi je connaissais seulement pour les séries de fonctions. Qu'est ce que la convergence normale pour les suites?

Commentaire de JCDjcd le 08/06/2004 14:01:18

ou parle t on de convergence nomal ?

Commentaire de vecchio56 le 08/06/2004 14:50:44 administrateur CS

dans ta description: "Celui-ci consiste en une suite qui convergne (normalement) vers 0."
si je comprends bien j'ai mal interprété le mot 'normalement' :)
ici normalement à le sens de logiquement, c'est ca?

Commentaire de JCDjcd le 08/06/2004 15:08:21

Ha oui ok excuse moi.
en fait cet algorithme pour des fonctions generales fais converger la usite vers zero (vers une racine), mais les criteres de convergence sont compliqués, on ne sait pas vers quelles racine cela va converger, pour t'en persuader, regarde ma photo, c'est un fractale de Newton, les couleurs correspondes a une couleurs particuliere d'une racine d'un polynome. Donc c difficile.
Mais cosmobob me faisait remarquer que dans ce cas precis (fonction : x^n-k), les criteres de convergence sont plus simple.
En prenant 1 comme premier terme, la suite convergera.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,905 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales