# Program to find root of an equations using secant method

The secant method is used to find the root of an equation f(x) = 0. It is started from two distinct estimates x1 and x2 for the root. It is an iterative procedure involving linear interpolation to a root. The iteration stops if the difference between two intermediate values is less than convergence factor.

Examples :

```Input : equation = x3 + x - 1
x1 = 0, x2 = 1, E = 0.0001
Output : Root of the given equation = 0.682326
No. of iteration=5
```

Algorithm

```Initialize: x1, x2, E, n         // E = convergence indicator
calculate f(x1),f(x2)

if(f(x1) * f(x2) = E); //repeat the loop until the convergence
print 'x0' //value of the root
print 'n' //number of iteration
}
else
```

## C++

 `// C++ Program to find root of an  ` `// equations using secant method ` `#include ` `using` `namespace` `std; ` `// function takes value of x and returns f(x) ` `float` `f(``float` `x) ` `{ ` `    ``// we are taking equation as x^3+x-1 ` `    ``float` `f = ``pow``(x, 3) + x - 1; ` `    ``return` `f; ` `} ` ` `  `void` `secant(``float` `x1, ``float` `x2, ``float` `E) ` `{ ` `    ``float` `n = 0, xm, x0, c; ` `    ``if` `(f(x1) * f(x2) < 0) { ` `        ``do` `{ ` `            ``// calculate the intermediate value ` `            ``x0 = (x1 * f(x2) - x2 * f(x1)) / (f(x2) - f(x1)); ` ` `  `            ``// check if x0 is root of equation or not ` `            ``c = f(x1) * f(x0); ` ` `  `            ``// update the value of interval ` `            ``x1 = x2; ` `            ``x2 = x0; ` ` `  `            ``// update number of iteration ` `            ``n++; ` ` `  `            ``// if x0 is the root of equation then break the loop ` `            ``if` `(c == 0) ` `                ``break``; ` `            ``xm = (x1 * f(x2) - x2 * f(x1)) / (f(x2) - f(x1)); ` `        ``} ``while` `(``fabs``(xm - x0) >= E); ``// repeat the loop ` `                                ``// until the convergence ` ` `  `        ``cout << ``"Root of the given equation="` `<< x0 << endl; ` `        ``cout << ``"No. of iterations = "` `<< n << endl; ` `    ``} ``else` `        ``cout << ``"Can not find a root in the given inteval"``; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``// initializing the values ` `    ``float` `x1 = 0, x2 = 1, E = 0.0001; ` `    ``secant(x1, x2, E); ` `    ``return` `0; ` `} `

## Java

 `// Java Program to find root of an  ` `// equations using secant method ` `class` `GFG { ` `     `  `    ``// function takes value of x and  ` `    ``// returns f(x) ` `    ``static` `float` `f(``float` `x) { ` `         `  `        ``// we are taking equation  ` `        ``// as x^3+x-1 ` `        ``float` `f = (``float``)Math.pow(x, ``3``)  ` `                               ``+ x - ``1``; ` `                                `  `        ``return` `f; ` `    ``} ` `     `  `    ``static` `void` `secant(``float` `x1, ``float` `x2, ` `                                ``float` `E) { ` `         `  `        ``float` `n = ``0``, xm, x0, c; ` `        ``if` `(f(x1) * f(x2) < ``0``)  ` `        ``{ ` `            ``do` `{ ` `                 `  `                ``// calculate the intermediate ` `                ``// value ` `                ``x0 = (x1 * f(x2) - x2 * f(x1)) ` `                            ``/ (f(x2) - f(x1)); ` `         `  `                ``// check if x0 is root of ` `                ``// equation or not ` `                ``c = f(x1) * f(x0); ` `         `  `                ``// update the value of interval ` `                ``x1 = x2; ` `                ``x2 = x0; ` `         `  `                ``// update number of iteration ` `                ``n++; ` `         `  `                ``// if x0 is the root of equation  ` `                ``// then break the loop ` `                ``if` `(c == ``0``) ` `                    ``break``; ` `                ``xm = (x1 * f(x2) - x2 * f(x1))  ` `                            ``/ (f(x2) - f(x1)); ` `                             `  `                ``// repeat the loop until the  ` `                ``// convergence  ` `            ``} ``while` `(Math.abs(xm - x0) >= E);  ` `                                                 `  `            ``System.out.println(``"Root of the"` `+ ` `                    ``" given equation="` `+ x0); ` `                     `  `            ``System.out.println(``"No. of "` `                      ``+ ``"iterations = "` `+ n); ` `        ``}  ` `         `  `        ``else` `            ``System.out.print(``"Can not find a"` `              ``+ ``" root in the given inteval"``); ` `    ``} ` `     `  `    ``// Driver code ` `    ``public` `static` `void` `main(String[] args) { ` `         `  `        ``// initializing the values ` `        ``float` `x1 = ``0``, x2 = ``1``, E = ``0``.0001f; ` `        ``secant(x1, x2, E); ` `    ``} ` `} ` ` `  `// This code is contributed by Anant Agarwal. `

## Python3

 `# Python3 Program to find root of an  ` `# equations using secant method  ` ` `  `# function takes value of x  ` `# and returns f(x)  ` `def` `f(x): ` `     `  `    ``# we are taking equation  ` `    ``# as x^3+x-1  ` `    ``f ``=` `pow``(x, ``3``) ``+` `x ``-` `1``;  ` `    ``return` `f;  ` ` `  `def` `secant(x1, x2, E): ` `    ``n ``=` `0``; xm ``=` `0``; x0 ``=` `0``; c ``=` `0``;  ` `    ``if` `(f(x1) ``*` `f(x2) < ``0``): ` `        ``while` `True``:  ` `             `  `            ``# calculate the intermediate value  ` `            ``x0 ``=` `((x1 ``*` `f(x2) ``-` `x2 ``*` `f(x1)) ``/`  `                            ``(f(x2) ``-` `f(x1)));  ` ` `  `            ``# check if x0 is root of  ` `            ``# equation or not  ` `            ``c ``=` `f(x1) ``*` `f(x0);  ` ` `  `            ``# update the value of interval  ` `            ``x1 ``=` `x2;  ` `            ``x2 ``=` `x0;  ` ` `  `            ``# update number of iteration  ` `            ``n ``+``=` `1``;  ` ` `  `            ``# if x0 is the root of equation  ` `            ``# then break the loop  ` `            ``if` `(c ``=``=` `0``):  ` `                ``break``;  ` `            ``xm ``=` `((x1 ``*` `f(x2) ``-` `x2 ``*` `f(x1)) ``/`  `                            ``(f(x2) ``-` `f(x1))); ` `             `  `            ``if``(``abs``(xm ``-` `x0) < E): ` `                ``break``; ` `         `  `        ``print``(``"Root of the given equation ="``,  ` `                               ``round``(x0, ``6``));  ` `        ``print``(``"No. of iterations = "``, n);  ` `         `  `    ``else``: ` `        ``print``(``"Can not find a root in "``, ` `                   ``"the given inteval"``);  ` ` `  `# Driver code  ` ` `  `# initializing the values  ` `x1 ``=` `0``;  ` `x2 ``=` `1``;  ` `E ``=` `0.0001``;  ` `secant(x1, x2, E);  ` ` `  `# This code is contributed by mits `

## C#

 `// C# Program to find root of an  ` `// equations using secant method ` `using` `System; ` ` `  `class` `GFG { ` `     `  `    ``// function takes value of  ` `    ``// x and returns f(x) ` `    ``static` `float` `f(``float` `x)  ` `    ``{ ` `         `  `        ``// we are taking equation  ` `        ``// as x^3+x-1 ` `        ``float` `f = (``float``)Math.Pow(x, 3)  ` `                                ``+ x - 1; ` `        ``return` `f; ` `    ``} ` `     `  `    ``static` `void` `secant(``float` `x1, ``float` `x2, ` `                    ``float` `E)                  ` `                     `  `    ``{ ` `         `  `        ``float` `n = 0, xm, x0, c; ` `        ``if` `(f(x1) * f(x2) < 0)  ` `        ``{ ` `            ``do` `{ ` `                 `  `                ``// calculate the intermediate ` `                ``// value ` `                ``x0 = (x1 * f(x2) - x2 * f(x1)) ` `                    ``/ (f(x2) - f(x1)); ` `         `  `                ``// check if x0 is root of ` `                ``// equation or not ` `                ``c = f(x1) * f(x0); ` `         `  `                ``// update the value of interval ` `                ``x1 = x2; ` `                ``x2 = x0; ` `         `  `                ``// update number of iteration ` `                ``n++; ` `         `  `                ``// if x0 is the root of equation  ` `                ``// then break the loop ` `                ``if` `(c == 0) ` `                    ``break``; ` `                ``xm = (x1 * f(x2) - x2 * f(x1))  ` `                    ``/ (f(x2) - f(x1)); ` `                             `  `                ``// repeat the loop until  ` `                ``// the convergence  ` `            ``} ``while` `(Math.Abs(xm - x0) >= E);  ` `                                                 `  `            ``Console.WriteLine(``"Root of the"` `+ ` `                    ``" given equation="` `+ x0); ` `                     `  `            ``Console.WriteLine(``"No. of "` `+  ` `                              ``"iterations = "` `+ n); ` `        ``}  ` `         `  `        ``else` `            ``Console.WriteLine(``"Can not find a"` `+  ` `                              ``" root in the given inteval"``); ` `    ``} ` `     `  `    ``// Driver code ` `    ``public` `static` `void` `Main(String []args)  ` `    ``{ ` `         `  `        ``// initializing the values ` `        ``float` `x1 = 0, x2 = 1, E = 0.0001f; ` `        ``secant(x1, x2, E); ` `    ``} ` `} ` ` `  `// This code is contributed by vt_m. `

## PHP

 `= ``\$E``);  ` `         `  `        ``echo` `"Root of the given equation="``. ``\$x0``.``"\n"` `; ` `        ``echo` `"No. of iterations = "``. ``\$n` `; ` `         `  `    ``} ``else` `        ``echo` `"Can not find a root in the given inteval"``; ` `} ` ` `  `// Driver code ` `{ ` `     `  `    ``// initializing the values ` `    ``\$x1` `= 0; ``\$x2` `= 1;  ` `    ``\$E` `= 0.0001; ` `    ``secant(``\$x1``, ``\$x2``, ``\$E``); ` `    ``return` `0; ` `} ` ` `  `// This code is contributed by nitin mittal. ` `?> `

Output :

```Root of the given equation = 0.682326
No. of iterations = 5
```

Time Complexity = O(1)

This article is contributed by Niteesh Kumar. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

My Personal Notes arrow_drop_up

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.