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 66 67 68 69 70 71 72 73 74
|
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
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 y)
{
return lmain-sqrt(ord*ord+monabs*monabs)+y*lbras*(sqrt(1.0-((haut-y*lbras)/lavbras)*((haut-y*lbras)/lavbras))+sqrt(1.0-y*y));
};
// la derivee de f
_inline double fderiv(double y)
{
return lbras*(sqrt(1.0-((haut-y*lbras)/lavbras)*((haut-y*lbras)/lavbras))+sqrt(1.0-y*y))+y*lbras*(-y/(sqrt(1.0-y*y))+lbras*(haut-y*lbras)/(lavbras*sqrt(1.0-((haut-y*lbras)/lavbras)*((haut-y*lbras)/lavbras))));
};
double Newton(double (*f)(double), double (*fderiv)(double))
{
double epsilon;
double itermax;
double x0;
printf("Quelle est la precision souhaitee? \n");
scanf("%f", &epsilon);
printf("la valeur de epsilon %f \n", epsilon, epsilon);
printf("Quelle est la valeur initiale? \n");
scanf("%f", &x0);
printf("Quelle est le nombre d'iterations maximal? \n");
scanf("%f", &itermax);
double x=x0;
double xnew;
int i= 0;
double test=fabs(f(x0)/fderiv(x0));
printf("%f %f\n" ,f(x0),f(x0));
getchar();
printf("%f", fderiv(x0));
printf("\n");
while(i<itermax && test>=epsilon)
{
xnew = x - (f(x)/fderiv(x));
x=xnew;
i++;
test=fabs(f(x)/fderiv(x));
}
if(i==itermax)
{printf("la methode ne converge pas \n");}
else
{printf("la methode converge en ");printf("%f",i);printf("iterations \n");};
printf("les racines du polynome sont ");
printf("%f",xnew);
return xnew;
}
int main()
{
printf("abscisse= ? \n");
scanf("%f", &monabs);
printf("ordonnee= ? \n");
scanf("%f", &ord);
printf("hauteur= ? \n");
scanf("%f", &haut);
printf("%f",Newton(f, fderiv));printf("\n");
system ("pause");
return 0;
} |
Partager