Fixed Point Iteration / Repeated Substitution Method¶
This is most easiest of all method. The logic is very simple. Given an equation, take an initial guess and and find the functional value for that guess, in the subsequent iteration the result obtained in last iteration will be new guess. Continue this process until get the required accuracy. This means that absoulte differebce between two subsequent functional values in two iterations is too small to be neglected.
But all functions don’t converge. If for given function
\[\begin{split}|f'(x)| < 1\end{split}\]
Then this method will converge to actual solution or in other cases, it will diverge.
Implementation in C¶
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define g(x) sqrt(x+6)
#define gd(a0) (0.5/sqrt(a0+6))
#define f(x) (x*x-x-6)
#define MAX_COUNT 5000
int main()
{
int count=0;
float x0=0,x1=0,error=0;
char iffound=0;
printf("Please enter the initial value: ");
scanf("%f",&x0);
do{
x1=g(x0);
error=fabs(x1-x0);
if(count==0)
{
if(gd(x0)>1){
printf("\nThe equation is not convergent");
iffound=1;
break;
}
else{
printf("\n i xi f(xi) error");
printf("\n-------------------------------------------");
}
}
printf("\n %3d %3.5f %3.5f %3.5f",count,x0,f(x0),count==0?0:error);
x0=x1;
count++;
}while(error>0.0005 && count<MAX_COUNT);
if(!iffound)
printf("\nThe required root is: %f\n",x0);
return 0;
}
Output¶
Please enter the initial value: 2
i xi f(xi) error
-------------------------------------------
0 2.00000 -4.00000 -1.00000
1 4.00000 6.00000 1.50000
2 2.50000 -2.25000 0.90000
3 3.40000 2.16000 0.63529
4 2.76471 -1.12111 0.40551
5 3.17021 0.88004 0.27760
6 2.89262 -0.52538 0.18163
7 3.07425 0.37674 0.12255
8 2.95170 -0.23918 0.08103
9 3.03273 0.16471 0.05431
10 2.97842 -0.10745 0.03608
11 3.01449 0.07268 0.02411
12 2.99038 -0.04799 0.01605
13 3.00643 0.03220 0.01071
14 2.99572 -0.02137 0.00713
15 3.00286 0.01429 0.00476
16 2.99810 -0.00951 0.00317
17 3.00127 0.00635 0.00211
18 2.99915 -0.00423 0.00141
19 3.00056 0.00282 0.00094
20 2.99962 -0.00188 0.00063
21 3.00025 0.00125 0.00042
The required root is: 2.999833