C Code

/*
---------------------------------------------------------------------------
Algo2-3.c   C program for implementing Algorithm 2.3
Algorithm translated to  C  by: Dr. Norman Fahrer
IBM and Macintosh verification by: Daniel Mathews

NUMERICAL METHODS: C Programs, (c) John H. Mathews 1995
To accompany the text:
NUMERICAL METHODS for Mathematics, Science and Engineering, 2nd Ed, 1992
Prentice Hall, Englewood Cliffs, New Jersey, 07632, U.S.A.
Prentice Hall, Inc.; USA, Canada, Mexico ISBN 0-13-624990-6
Prentice Hall, International Editions:   ISBN 0-13-625047-5
This free software is compliments of the author.
E-mail address:       in%"mathews@fullerton.edu"

Algorithm 2.3 (False position or Regula Falsi Method).
Section   2.2, Bracketing Methods for Locating a Root, Page 62
---------------------------------------------------------------------------
*/
/*
---------------------------------------------------------------------------

Algorithm 2.3 (False Position or Regula Method). To find a
root of the equation  f(x) = 0  in the interval [a,b].
Proceed with the method only if  f(x)  is continuous and  f(a)
and  f(b)  have opposite signs.

---------------------------------------------------------------------------
*/

/* User has to supply a function named : ffunction
   An example is included in this program */

#include<stdio.h>
#include<stdlib.h>
#include<math.h>


/*  define prototype for USER-SUPPLIED function f(x)  */

    double ffunction(double x);


/*  EXAMPLE for "ffunction"   */

    double ffunction(double x)

    {
        return (x * sin(x) - 1);
    }

/* -------------------------------------------------------- */

/*  Main program for algorithm 2.3  */

    void main()

{
    double Delta = 1E-6;       /* Closeness for consecutive iterates */
    double Epsilon = 1E-6;     /* Tolerance for the size of f(C)     */
    int Max = 199;             /* Maximum number of iterations       */
    int Satisfied = 0;         /* Condition for loop termination     */

    double A, B;          /* INPUT endpoints  of the interval [A,B]  */
    double YA, YB;        /* Function values at the interval-borders */
    int K;                /* Loop Counter                            */
    double C, YC;         /* new iterate and function value there    */
    double DX;            /* change in iterate                       */


    printf("-----------------------------------------------------\n");
    printf("Please enter endpoints A and B of the interval [A,B]\n");
    printf("EXAMPLE : A = 0 and B = 2. Type:   0 2 \n");
    scanf("%lf %lf", &A, &B);
    printf("The interval ranges from %lf to %lf\n", A,B);

    YA = ffunction(A);    /* compute function values */
    YB = ffunction(B);

    /* Check to see if YA and YB have same SIGN */

    if( ( (YA >= 0) && (YB >=0) ) || ( (YA < 0) && (YB < 0) )   ) {
      printf("The values ffunction(A) and ffunction(B)\n");
      printf("do not differ in sign.\n");
      exit(0);     /* exit program */
    }

    for(K = 1; K <= Max ; K++) {

        if(Satisfied == 1)  break;

        DX = YB * (B - A)/(YB -YA);      /* Change in iterate */
        C = B - DX;                      /* New iterate       */

        YC = ffunction(C);   /* Function value of new iterate */


  if( YC == 0) {           /* first 'if'          */
            Satisfied = 1; /* Exact root is found */
  }
  else if( ( (YB >= 0) && (YC >=0) ) || ( (YB < 0) && (YC < 0) )   ) {
       B = C;      /* Squeeze from the right */
      YB = YC;
  }
  else {
       A = C;      /* Squeeze from the left */
      YA = YC;
  }

  if( (fabs(DX) < Delta) && (fabs(YC) < Epsilon) ) Satisfied = 1;

    }  /* end of 'for'-loop */

    printf("----------------------------------------------\n");
    printf("The number of performed iterations is : %d\n",K - 1);
    printf("----------------------------------------------\n");
    printf("The computed root of f(x) = 0 is : %lf \n",C);
    printf("----------------------------------------------\n");
    printf("Consecutive iterates differ by %lf\n", DX);
    printf("----------------------------------------------\n");
    printf("The value of the function f(C) is %lf\n",YC);

}   /* End of main program */

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

(c) John H. Mathews 2004