Bonsoir,
j'ai programme la methode de Newton afin de trouver les racines d'un polynome. Cependant, mon programme ne semble pas marcher : il affiche tout le temps une iteration et la valeur renvoyee est completement fausse. J'ai eu beau verifier plusieurs fois, je ne vois pas d'ou peut provenir l'erreur.. Si quelqu'un a une idee.. Voici mon code:
Code : 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <cmath>
#include <iostream>
using namespace std;
 
 
// la fonction dont on cherche un zero
inline double f(double x) 
{return x*x - 2.0;};
 
// la derivee de f
inline double fderiv(double x)
{return 2*x;};
 
double Newton(double (*f)(double), double (*fderiv)(double))
{
     double epsilon;
     double itermax;
     double x0;
 
    cout << "Quelle est la precision souhaitee?";
    cin >> epsilon;
    cout << "Quelle est la valeur initiale?";
    cin >> x0;
    cout << "Quelle est le nombre d'iterations maximal?"; 
    cin >> itermax; 
 
    double x = x0;
    double xnew;
    int i = 0;
 
 
 while(i<itermax && abs(xnew-x)>=epsilon)
 {
        xnew = x - f(x) / fderiv(x);
        x = xnew;
        i++;
    }
    if(i==itermax)
    {cout << "la methode ne converge pas" << endl;}
    else
    {cout << "la methode converge en " << i <<" iterations"<< endl;};
 
    return xnew;
}
 
int main()
{
   cout << "les racines du polynome sont " << Newton(f, fderiv);
      return 0;
}
Merci