Szelőmódszer
A numerikus analízisben a szelőmódszer egy gyökkereső algoritmus, mely kiküszöböli az érintő-módszer (Newton-módszer) fő fogyatékosságát: nem használja fel a függvény deriváltjának analitikus kifejezését, hanem numerikusan közelíti meg azt.
A módszer
Legyen két kezdeti pont xn‒1 és xn, megkeressük a nekik megfelelő függvényértékeket majd az (xn‒1, f(xn‒1)) , (xn, f(xn)) pontokon keresztül megszerkesztünk egy egyenest. Ez lesz tulajdonképpen a szelő (lásd a grafikont jobbra).
![](http://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Secant_method.svg/300px-Secant_method.svg.png)
Felírjuk az egyenes egyenletét, és alkalmazzuk erre a sajátos esetre:
Most legyen xn+1 a fenti egyenes egy gyöke. Behelyettesítve a képletbe, mivel y=0:
Ezt átrendezve megkapjuk a keresett összefüggést. A módszer alapja tehát a következő rekurzív képlet:
A fenti összefüggésből jól látható, hogy szükséges két kezdeti pont: x0 és x1, melyek megfelelően kell legyenek kiválasztva, lehetőleg minél közelebb a keresett gyökhöz.
A módszer konvergenciája
A szelőmódszer akkor konvergens, tehát xn akkor tart az f függvény gyökéhez, ha a kezdeti x0 és x1 értékek megfelelően vannak választva. Ebben az esetben, a módszer konvergenciája:
ez tulajdonképpen az aranymetszés. A módszer szupralineáris.
Összehasonlítás más gyökkereső módszerrel
A szelőmódszer tulajdonképpen az érintő módszer diszkretizált változata. Az érintő módszer (Newton-módszer) rekurzív összefüggése:
ahol ha használjuk a derivált következő közelítését:
visszakaphatjuk a szelőmódszer alapképletét. Ha megfigyeljük, a Newton-módszer gyorsabban konvergál (másodrendű), mint a szelőmódszer, de annak szüksége van a függvény kiértékelésére és annak deriváltjára is, minden lépésnél. Így a gyakorlatban a szelőmódszer gyorsabb, mint a Newton-módszer. Például ha figyelembe vesszük, hogy a függvény deriváltját egy adott pontban meg kell határozni, a program két lépést tudna elvégezni a szelőmódszerrel az idő alatt, míg a Newton módszer egy lépést.
Program C-ben
A következő program meghatározza azt a pozitív x-et, ahol cos(x) = x³, tehát ez a szelőmódszer alkalmazása a következő függvényre:
f(x) = cos(x) ‒ x³
A kilépési feltételek legyenek a következőek:
ahol m egy előre megadott lépésszám, és ε a maximális hiba.
#include <stdio.h> #include <math.h> double f(double x) { return cos(x) - x*x*x; } double Szelomodszer(double xn_1, double xn, double e, int m) { int n; double d; for (n = 1; n <= m; n++) { d = (xn - xn_1) / (f(xn) - f(xn_1)) * f(xn); if (fabs(d) < e) return xn; xn_1 = xn; xn = xn - d; } return xn; } int main(void) { printf("%0.15f\n", Szelomodszer(0, 1, 5E-11, 100)); return 0; }
A program futása után a következő eredményt kapjuk: 0.865474033101614. Alatta pedig láthatjuk, hogy lépésenként hogyan konvergál a program:
ahol az aláhúzott számjegyek a helyes értékek.
![](http://upload.wikimedia.org/wikipedia/commons/thumb/a/a1/Secant_method_example_code_result.svg/600px-Secant_method_example_code_result.svg.png)
Az ábrán megfigyelhető piros színnel az f függvény, az utolsó szelő pedig kékkel.
Források
- Numerikus módszerek, 1st, Kolozsvári Egyetemi Kiadó (2008)
Fordítás
Ez a szócikk részben vagy egészben a Secant method című angol Wikipédia-szócikk fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.
Matematikaportál • összefoglaló, színes tartalomajánló lap