Studio di funzioni in C++: zeri, massimi e minimi, punti di flesso.
//Trova zero
double FindZero (double lowerlimit, double upperlimit, double precision,
double (*function)(double))
{
double m, fm;
if ( (*function)(lowerlimit)*(*function)(upperlimit)>0) return DBL_MAX;
if ( (*function)(upperlimit)==0) return upperlimit;
if ( (*function)(lowerlimit)==0) return lowerlimit;
while ( upperlimit-lowerlimit > precision) {
m = (lowerlimit+upperlimit)/2;
fm= (*function) (m) ;
if (fm==0) return fm;
if ((*function)(lowerlimit)*fm<0 i="">0>
upperlimit=m;
else
lowerlimit=m;
}
return m; // stima dello 0
}
//Trova massimo
double FindMaximum(double lowerlimit, double upperlimit, double precision,
double (*function)(double)) {
double a=lowerlimit, b=(lowerlimit+upperlimit)/2., c=upperlimit, x=(b+c)/2;
double fa = (*function)(a);
double fb = (*function)(b);
double fc = (*function)(c);
double fx = (*function)(x);
while ( c-a > precision) {
if ( fb > fx )
c = x;
else
a = b;
b = (a+c)/2;
x = (b+c)/2;
fa = (*function)(a);
fb = (*function)(b);
fc = (*function)(c);
fx = (*function)(x);
}
if ( fb >fa && fb>fc)
return b;
else
return DBL_MAX;
}
//Trova minimo
double FindMinimum(double lowerlimit, double upperlimit, double precision,
double (*function)(double)) {
double a=lowerlimit, b=(lowerlimit+upperlimit)/2., c=upperlimit ,x=(b+c)/2;
double fa = (*function)(a);
double fb = (*function)(b);
double fc = (*function)(c);
double fx = (*function)(x);
while ( c-a > precision) {
if ( fb < fx )
c = x;
else
a = b;
b = (a+c)/2;
x = (b+c)/2;
fa = (*function)(a);
fb = (*function)(b);
fc = (*function)(c);
fx = (*function)(x);
}
if ( fb
return b;
else
return DBL_MAX;
}
Categories:
Programmi
Posta un commento