Research Article

A Generalized Regula Falsi Method for Finding Zeros and Extrema of Real Functions

Algorithm 1

#include  <math.h>
#define  ACY  1.0E6   accuracy  for  estimates,  function,  and  finite  difference  values
#define  h  1.0E7              infinitesimal  for  finite  diferences  
double  GRF(float  (*func)(double),  double  A,  double  B,  int  n)  
{  
double  X,  fX,  dX,  A,  fA,  dA,  B,  fB,  dB,  a,  fa,  da,  b,  fb,  db;  
while  (  (fabs(B-A)>ACY)  &&  (–n>0)  )
 {  
   double  fA=(*func)(A);  
   double  dA=((*func)(A+h)-(*func)(A))/h;
   if  ((fabs(fA)<  ACY)  ||  (fabs(dA)<  ACY))  //  zero  or  extremum
      return  A;
   fB=(*func)(B);
   dB=((*func)(B+h)-(*func)(B))/h;
   if  ((fabs(fB)<  ACY)  ||  (fabs(dB)<  ACY))  //  zero  or  extremum
      return  B;
   X=A+fabs(fA)/(fabs(fA)+fabs(fB))*(B-A);
   fX=(*func)(X);
   dX=((*func)(X+h)-(*func)(X))/h;  
   if  ((fabs(fX)<  ACY)  ||  (fabs(dX)<  ACY))  //  zero  or  extremum  
      return  X;
   if  ((fA*fX<0)  ||  (dA*dX<0))
    B  =  X;  
   else  
   if  ((fX*fB<0)  ||  (dX*dB<0))
    A  =  X;
 }
}