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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| #include <cmath>
#include <iostream>
using namespace std;
double lmain=10.0;
double monabs;
double ord;
double haut;
double lbras=14.7 ;
double lavbras=18.7 ;
// la fonction dont on cherche un zero
inline double f(double x)
{
return (lmain-sqrt(ord*ord+monabs*monabs)+x*lbras*(sqrt(1-((haut-x*lbras)/lavbras)*((haut-x*lbras)/lavbras))+sqrt(1-x*x)));
}
// la derivee de f
inline double fderiv(double x)
{
return lbras*(sqrt(1-((haut-x*lbras)/lavbras)*((haut-x*lbras)/lavbras))+sqrt(1-x*x))+x*lbras*(-x/(sqrt(1-x*x))+lbras*(haut-x*lbras)/(lavbras*sqrt(1-((haut-x*lbras)/lavbras)*((haut-x*lbras)/lavbras))));
};
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(f(x)/fderiv(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<<"abscisse= ?"<<endl;
cin>>monabs;
cout<<"ordonnee= ?"<<endl;
cin>>ord;
cout<<"hauteur= ?"<<endl;
cin>>haut;
cout << "les racines du polynome sont " << Newton(f, fderiv)<<endl;
system ("pause");
return 0;
} |
Partager