Newton-Raphsonova metoda - numerično iskanje ničel nelinearnih funkcij - JavaScript calculator


Osnovna ideja te metode je naslednja:

Število x0 naj bo približek za ničlo funkcije f.
V točki x0 postavimo tangento na graf funkcije f in pogledamo, kje je ničla tangente.
Ker je tangenta dobra aproksimacija za funkcijo, sklepamo, da je ničla tangente dober približek za ničlo funkcije f. Ničlo tangente vzamemo torej za naslednji približek x1.
Postopek nadaljujemo na enak način in tako iz x1 dobimo x2, itn.
Dobljeno zaporedje približkov praviloma hitro konvergira k ničli funkcije f.

Praktična izvedba
Iz slike se razbere da je odvod v točki x0 enak:
f '(x0)= Δy/Δx = f(x0)/( (x0) - (x1) ),
od koder sledi:
x1 = x0 - f(x0)/f '(x0)
Iteracijska formula, po kateri iz približka xn izračunamo naslednji približek xn+1, je torej zelo preprosta:

xn+1 = xn - f(xn)/f '(xn)

V formuli nastopata vrednost funkcije f in vrednost odvoda f' (tj. vrednost smernega koeficienta tangente).

Začetni točka x0 odvoda je večja ali manjša od ničle! Izkaže se, da je Newtonova metoda uspešna za iskanje ničel prve stopnje. Pri takih ničlah zaporedje približkov vedno vodi k ničli, če je le začetni približek primerno izbran. V ničlah višje stopnje je tangenta vodoravna, kar otežuje (ali celo onemogoča) uporabo Newtonove metode. Newtonovo metodo se najpogosteje uporablja pri iskanju ničel polinomov, vendar pa ni omejena samo na polinome: uporabimo jo lahko tudi na drugih odvedljivih funkcijah. Uporabna je celo za iskanje ničel v kompleksnem, če izberemo primeren (nerealnen) začetni približek.
Lahko se zacikla, oddalji od iskane ničle zaradi lokalnih ekstremov. Lahko divergira, če je začetni približek slab.
Uporabite lahko še ostale metode iskanje ničel, recimo:
  • Bisekcija - iskanje približne ničle funkcije
  • Sekantna metoda - iskanje približne ničle funkcije (*** sekantno metodo uporabimo takrat, ko se odvoda funkcije ne da izračunati, oziroma, če je odvod zelo zapleten. )

    V polje vnesi funkcijo f ( in njen odvod f ' ), ki ji iščemo ničle in začetno točko odvoda x0, kjer pričakujemo ničlo.
    * Potek funkcije lahko preveriš z naslednjim orodjem okni_grafi.html.



    SLEDI JavaScriot kalkulator za Newton-Raphsonovo metodo (uporabno)!
    Oblike vnosnih funkcij so recimo e^(e^x) + x, oz. za vnos exp(exp(x)) + x ali (-x)^3 - x^2, za vnos nthroot(-x,3) - x*x [meje: -1.5 -0.2 ali -0.5 0.5] // ali cos(x)-x [meje: 0 1] // ali e^x+x, za vnos exp(x)+x [meje: -1 0] // ali log(x) + x*x [meje: 0 1], log v js pomeni ln // ali -5*exp(exp(x)) -x*x*x [meje: -3 -1] // ali cos(x/2) [meje: 3 3.5 - vrne št. PI])!
    Vnesi funkcijo f(x):
    Oceni ničle medin, kor.:
    Vnesi odvod f(x)':
    Začetna točka odvoda x0:
    Koliko korakov do (xn+1-xn):
    Vrednost f(xn):
    Velikost kon. intervala (xn+1-xn):
    Ničla funkcije je blizu X =

    JS koda: Vičar Zorko (2017)

    Izpis vrednosti itercije po korakih n: st_iteracije, Xn+1, f(Xn+1), [Xn Xn+1]




    Nekatere funkcije v js:
    cos(x)
    acos(x)
    sin(x)
    asin(x)
    tan(x)
    atan(x)
    1/tan(x) = ctg(x)
    PI*(1/2)-atan(x)
    (exp(x)-exp(-x))/2 = sh(x)
    (exp(x)+exp(-x))/2 = ch(x)
    (exp(x)-exp(-x))/(exp(x)+exp(-x)) = th(x)
    (exp(x)+exp(-x))/(exp(x)-exp(-x)) = cth(x)
    2/(exp(x)+exp(-x))/2 = sch(x)
    2/(exp(x)-exp(-x))/2 = csch(x)
    abs(x)
    sqrt(x)
    round(x)
    log(x)
    exp(x)
    5*random()
    5*sin(tan(x/5))
    5*cos(tan(x/10))
    sqrt(9-x*x*9/25)
    sqrt((x*x*9/25)-9)
    7*cos((x/5)*sin(x))*cos(sin(x/5))/cos(sin(x/3))*cos(sin(x/3)) = kon. cos
    7*sin((x/5)*sin(x))*sin(sin(x/5))/sin(sin(x/3))*sin(sin(x/3)) = kon. sin
    sqrt(2*2/( (1+0.85*cos(x))*(1+0.85*cos(x)) ) -2*2*cos(x)*cos(x)/( (1+0.85*cos(x))*(1+0.85*cos(x)) ) )
    -(1/3)*x-2
    1/x
    1/(x*x)
    -30/(x*x)
    (x*x)
    -x*x-2*x+5
    5*abs(sin(x*x/20))
    2*x*x*x+x*x-4*x+3
    nthroot(x,3) = x1/3
    abs(nthroot((x-1),3)-1)
    pow(2,x) = 2 na x
    pow(x,3) = x na 3
    8*pow(10,-x*x/70)*cos(x)
    12
    - za Gaussa daj recimo obliko 5*exp(-5*x*x/100) ali kako drugo zvonasto obliko, rec. 150*pow(10,-5*x*x/100000)
    !!! n-ti koren iz x se zapiše kot nthroot(x,n),
    primer za tretji koren, rec iz števila (-8): nthroot(-8,3) = -2
    (nthroot je dodana funkcija, saj vgrajena js funkcija pow(-8,1/3) vrne vrednost NaN).

    Nazaj na domačo stran.