Theoretical Paper
- Computer Organization
- Data Structure
- Digital Electronics
- Object Oriented Programming
- Discrete Mathematics
- Graph Theory
- Operating Systems
- Software Engineering
- Computer Graphics
- Database Management System
- Operation Research
- Computer Networking
- Image Processing
- Internet Technologies
- Micro Processor
- E-Commerce & ERP
- Dart Programming
- Flutter Tutorial
- Numerical Methods Tutorials
Practical Paper
Industrial Training
Regula Falsi Method
This method is improvement over slow convergence of bisection method. To find root, input is search Interval containing the root [a,b], then tangent is drawn joining (a,f(a)) & (b,f(b)). The point where the tangent touches the x-axis is point of interest.
Given a function f (x) continuos on an interval [a,b] such that f (a) * f (b) < 0 Do c = (a*f(b) - b*f(a))/(f(b) - f(a)) if f (a) * f (c) < 0 then b = c else a = c while (none of the convergence criterion C1, C2 or C3 is satisfied)
The criteria for convergence are still same:-
- C1. Fixing a priori the total number of iterations N i.e., the length of the interval or the maximum error after N iterations in this case is less than |b−a|/2N.
- C2. By testing the condition |ci−ci−1| (where i are the iteration number) less than some tolerance limit, say epsilon, fixed threshold.
- C3. By testing the condition |f(ci)| less than some tolerance limit alpha again fixed threshold.
C Implementation
#include < stdio.h> #include < stdlib.h> #include < math.h> #define f(x) ((x*x*x)-18) int main(){ float a=0,b=0,error=0,c,cold; int i=0; printf("Input Interval: "); scanf("%f %f",&a,&b); if((f(a)*f(b))>0){ printf("Invalid Interval Exit!"); exit(1); } else if(f(a)==0 || f(b)==0){ printf("Root is one of interval bounds. Root is %f\n",f(a)==0?a:b); exit(0); } printf("Ite\ta\t\tb\t\tc\t\tf(c)\t\terror\n"); do{ cold=c; c=(((a*f(b))-(b*f(a)))/(f(b)-f(a))); printf("%2d\t%4.6f\t%4.6f\t%4.6f\t%4.6f\t",i++,a,b,c,f(c)); if(f(c)==0){ break; }else if(f(a)*f(c)< 0){ b=c; }else a=c; error=fabs(c-cold); if(i==1){ printf("----\n"); }else printf("%4.6f\n",error); }while(error>0.00005); printf(" Root is %4.6f \n",c); return 0; }
Output
Input Interval: 1 3 Ite a b c f(c) error 0 1.000000 3.000000 2.307692 -5.710514 ---- 1 2.307692 3.000000 2.576441 -0.897459 0.268749 2 2.576441 3.000000 2.614847 -0.121172 0.038406 3 2.614847 3.000000 2.619964 -0.016010 0.005117 4 2.619964 3.000000 2.620639 -0.002108 0.000675 5 2.620639 3.000000 2.620728 -0.000275 0.000089 6 2.620728 3.000000 2.620739 -0.000040 0.000011 Root is 2.620739