Bonjour,
Je suis à la recherche d'un exemple complet de la méthode combinée Newton bissection root.
Je ne connais pas très bien le C, un exemple qui fonctionne m'aiderait à le convertir vers un autre langage (XOJO, anciennement RealBasic).
Bonjour,
Je suis à la recherche d'un exemple complet de la méthode combinée Newton bissection root.
Je ne connais pas très bien le C, un exemple qui fonctionne m'aiderait à le convertir vers un autre langage (XOJO, anciennement RealBasic).
Que souhaites-tu comme combinaison ? C'est assez courant de commencer avec une bisection pour affiner les connaissances que l'on a de la position de la racine, puis de terminer avec du Newton-Raphson. Niveau algorithmique, c'est plutôt quelque chose comme ça (en pseudo-Python) :
Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 def find_root(f): a, b = ... while abs(a - b) >= 10^-5 # Par exemple (a, b) = bisection_one_iteration(f, a, b) return newton_raphson(f, (a + b) / 2)
Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.
Créer des applications graphiques en Python avec PyQt5
Créer des applications avec Qt 5.
Pas de question d'ordre technique par MP !
Bonjour,
J'ai trouvé sur le web la fonction NewtonSafe.
On sait que Newton-Raphson offre une convergence rapide pour une fonction qui admet une dérivée .
L'auteur d'un algo. que je suis entrain de coder utilise la méthode NewtonSafe qui d'après lui la combinaison bissection/NR offre plus de sécurité.
J'ai attaché a ce message le code Newton-Raphson qui fonctionne.
Quant à la fonction en question, j'ai trouvé le code, mais je ne l'ai pas bien pas compris encore moins l'appliquer dans un void main().
Je copie la pièce jointe ici, c'est plus facile pour discuter :
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 #include<stdio.h> #include<math.h> float f(float x) { return x*log10(x) - 1.2; } float df (float x) { return log10(x) + 0.43429; } void main() { int itr, maxmitr; float h, x0, x1, allerr; printf("\nEnter x0, allowed error and maximum iterations\n"); scanf("%f %f %d", &x0, &allerr, &maxmitr); for (itr=1; itr<=maxmitr; itr++) { h=f(x0)/df(x0); x1=x0-h; printf(" At Iteration no. %3d, x = %9.6f\n", itr, x1); if (fabs(h) < allerr) { printf("After %3d iterations, root = %8.6f\n", itr, x1); return 0; } x0=x1; } printf(" The required solution does not converge or iterations are insufficient\n"); return 1; }
Quelle est ta question ? Comment peut-on t'aider ?
N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager