Gyökkeresés iterációval

A Wikipédiából, a szabad enciklopédiából
A lap korábbi változatát látod, amilyen B.Zsoltbot (vitalap | szerkesztései) 2020. szeptember 7., 22:48-kor történt szerkesztése után volt. Ez a változat jelentősen eltérhet az aktuális változattól. (→‎Algoritmus: replaced: <source → <syntaxhighlight, </source> → </syntaxhighlight> AWB)

Keressük az egyenlet gyökeit. Vagyis azon -eket, amelyek kielégítik az egyenlőséget. Erre a numerikus analízis többféle lehetőséget nyújt: felező módszer, Newton-módszer, szelőmódszer. Most egy ezekhez hasonló módszert mutatunk be.

Matematikai bevezetés

Az egyenlet átírható a vele egyenértékű egyenletté. Szükséges kezdetben egy becsült érték. Ezt behelyettesítjük az előbbi egyenlet bal oldalára, és kapunk egy értéket. Ha ez megegyezik az értékünkkel, akkor ezek ketten közösen a megoldást képezik. Ellenkező esetben megismételhető az előbb leírt lépés ből kiindulva és létrehozható az sor, aminek azt a tulajdonságát szeretnénk elérni, hogy konvergáljon a gyökhöz. Legyen az iterációs képletünk a következő:

,

Itt Q egy állandó paraméter, amely a konvergenciát biztosítja. Az alábbiakban a g(x) függvény néhány típusára grafikusan ábrázoljuk az iterációt, hogy jobban érthető legyen:

Amint az ábra c és d pontjában látható, a színezett területen áthaladó, azaz

túlzottan meredek g(x) függvény esetén divergens az iteráció. Tehát úgy kell megválasztanunk a Q értékét, hogy az ne legyen túl nagy és legyen az iterációnk konvergens.

Konkrét példa

Legyen az függvény, aminek keressük a gyökeit. A kezdeti tippünk legyen és legyen először a . Ekkor az iteráció első 7 lépése a következőképpen néz ki:

1 0.5 0.563918396 0.563918396 0.063918396
2 0.563918396 0.566952490 0.566952490 0.003034095
3 0.566952490 0.567131903 0.567131903 0.000179413
4 0.567131903 0.567142610 0.567142610 1.07072889e-05
5 0.567142610 0.567143250 0.567143250 6.39353343e-07
6 0.567143250 0.567143288 0.567143288 3.81782835e-08
7 0.567143288 0.567143290 0.567143290 2.27977877e-09

Láthatóan nagyon gyorsan bekonvergált a keresett gyökhöz. Nézzük most meg, hogy mi történik, ha

1 0.5 0.71306132 0.71306132 0.21306132
2 0.71306132 0.26722152 0.26722152 0.44583980
3 0.26722152 1.26378544 1.26378544 0.99656392
4 1.26378544 -0.69862084 -0.69862084 1.96240628
5 -0.698620839 4.72057550 4.72057550 5.41919634
6 4.72057550 -4.70275541 -4.70275541 -9.42333091
7 -4.70275541 225.203833 225.203833 229.906589

Látható ez esetben, hogy az iteráció divergens és a hiba tart a végtelenbe.

Konvergencia

Nézzük most meg részletesebben a konvergencia kérdését. Az optimális paraméter a Q-ra a következő: , ez belátható, hogyha megnézzük a Newton-módszer-nél az iterációs képletet: . Ezek alapján belátható, hogy a Newton módszer egy sokkal gyorsabban konvergáló módszer, mivel minden egyes lépés után beállítja a Q értékét az optimális értékre. Az iterációs módszer viszont annyiban jobb, hogy nem mindig áll rendelkezésünkre a függvény deriváltja, vagy nagyon nehézkes deriválni, így ki tudjuk ezt küszöbölni.

Algoritmus

A kód python programozási nyelvben van írva, az epszilon paraméter pedig a kívánt pontosságot jelenti.

import math
def Fx(X):
	return X-e^X
def Iteracio(Fx, x0, Q, epszilon):
        x1=x0-Q*Fx(x0)
        while abs(x1-x0)>epszilon:
                x0=x1
                x1=x0-Q*Fx(x0)
        return x1
print Iteracio(Fx, 0.5, 0.6, 0.0001)

A program a 3. lépés után már kiírja a kívánt 0.5671 értéket.

Források