C Program: Newton-Raphson Method
The Newton-Raphson Method, or simply Newton's Method, is a technique of finding a solution to an equation in one variable $f(x) = 0$ with the means of numerical approximation.
It finds the solution by carrying out the iteration
$x_{1} = x_{0} - \frac{f(x_{0})}{f{\prime}(x_{0})}$
where $x_{0}$ is the first approximate value, then,
$x_{2} = x_{1} - \frac{f(x_{1})}{f{\prime}(x_{1})}$
and so on.
So if $x_{n}$ is the current estimated value, the next approximation $x_{n+1}$ is given by
$x_{n+1} = x_{n} - \frac{f(x_{n})}{f{\prime}(x_{n})}$
Using the Newton-Raphson method, we will next write a C program to find an approximate value of $\sqrt{5}$. Remember, $\sqrt{5}$ is an irrational, and its decimal expansion do not end. So its exact value we can never get.
The get the approximate value of $\sqrt{5}$, the function we need is
$f(x) = x^{2} - 5$
so that, solving for
$f(x) = 0$
is the same as solving for
$x^{2} - 5 = 0$
or
$x = \sqrt{5}$
The derivative of the function is
$f{\prime}(x) = 2x$
In our program below, we define two funtions, f()
and derivative()
, which returns the function and its derivative respectively. The iteration is performed inside the while
loop.
#include <stdio.h>
#include <math.h>
float f(float);
float derivative(float);
int main() {
float x; // x: approximation
unsigned short i = 1, n; // n: number of iterations
printf("FIRST APPROXIMATION: ");
scanf("%f", &x);
printf("ITERATIONS: ");
scanf("%hu", &n);
while(i <= n) {
x = x - f(x)/derivative(x);
i++;
}
printf("APPROXIMATE ROOT: %f \n", x);
return 0;
}
float f(float x) { // f(x)
return pow(x,2) - 5;
}
float derivative(float x) { // f'(x)
return 2*x;
}
We run the program with $x_{0} = 2$ as the first approximation, upto $5$ iterations
$ ./a.out
FIRST APPROXIMATION: 2
ITERATIONS: 5
The output is