A szekantáló módszert az f(x) = 0 egyenlet gyökerének megkeresésére használjuk. A gyökér két különböző x1 és x2 becsléséből indul ki. Ez egy iteratív eljárás, amely magában foglalja a gyökér lineáris interpolációját. Az iteráció leáll, ha két köztes érték különbsége kisebb, mint a konvergenciatényező.
Példák:
Bemenet: egyenlet = x3+ x - 1
x1 = 0 x2 = 1 E = 0,0001
Kimenet: Az adott egyenlet gyöke = 0,682326
Az iteráció száma=5
Algoritmus
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 print 'can not found a root in the given interval'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 interval'; } // 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 interval'); } // 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 interval'); # 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 interval'); } // 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 // PHP Program to find root of an // equations using secant method // function takes value of x // and returns f(x) function f( $x) { // we are taking equation // as x^3+x-1 $f = pow($x 3) + $x - 1; return $f; } function secant($x1 $x2 $E) { $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 (abs($xm - $x0) >= $E); echo 'Root of the given equation='. $x0.'n' ; echo 'No. of iterations = '. $n ; } else echo 'Can not find a root in the given interval'; } // 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. ?> JavaScript <script> // JavaScript Program to find root of an // equations using secant method // function takes value of x and returns f(x) function f(x) { // we are taking equation as x^3+x-1 let f = Math.pow(x 3) + x - 1; return f; } function secant(x1 x2 E) { let 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 (Math.abs(xm - x0) >= E); // repeat the loop // until the convergence document.write('Root of the given equation=' + x0.toFixed(6) + '
'); document.write('No. of iterations = ' + n + '
'); } else document.write('Can not find a root in the given interval'); } // Driver code // initializing the values let x1 = 0 x2 = 1 E = 0.0001; secant(x1 x2 E); // This code is contributed by Surbhi Tyagi. </script>
Időbeli összetettség: O(1)
Kiegészítő tér: O(1)
Referencia
https://en.wikipedia.org/wiki/Secant_method