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

Da lahko začnemo izvajati sekantno metodo, potrebujemo dva začetna približka za ničlo - označimo ju kot x0 in x1. Pogosto ju izberemo tako, da je predznak funkcije f v točki x0 različen kot v točki x1, a ni nujno. Nadaljevanje postopka je zelo podobno kot pri metodi regula falsi, le da ničla ne leži nujno na intervalu med obema približkoma.

Funkcijo f najprej aproksimirmo s sekanto. Sekanta v tem primeru pomeni premico, ki poteka skozi točki T0(x0, f(x0)) in T1(x1, f(x1)).

Sklepamo, da se sekanta ne razlikuje dosti od grafa funkcije, zato mora biti tudi ničla sekante dobra aproksimacija za ničlo funkcije. Ničlo sekante torej izberemo za naslednji približek x2. Iz grafa zgoraj razberemo, da sta si trikotnika, ki ju določajo točke x0, x2, x1 in vrednosti funkcije v teh točkah, podobna. Zato recimo velja:
(f(x1) - f(x0))/(x1 - x0) = f(x0)/(x0 - x2)
Od koder izpeljemo novo mejo x2:
x2 = x0 - f(x0)(x1 - x0)/(f(x1) - f(x0))
Postopek potem ponavljamo: iz x1 in x2 izračunamo x3, iz x2 in x3 izračunamo x4 itn.
Če je funkcija primerno lepa in če sta približka x0 in x1 dovolj dobro izbrana, zaporedje xn konvergira k ničli funkcije f.
Za izračun naslednjega približka xn+1 na podlagi približkov xn in xn-1 uporabimo naslednjo iteracijsko formulo (n teče od 1, 2, 3 ...):

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

Začetni interval x0 in x1 je lahko izven ničle funkcije! Sekantna metoda je lahko dober nadomestek za tangentno metodo v primerih, ko odvoda funkcije ne moremo izračunati, oziroma v primerih, ko je odvod zelo zapleten.
Sekantna metoda je uporabna tudi za iskanje ničel sode stopnje. Je sicer zelo hitra metoda, malo iteracij napram bisekciji. Lahko se zacikla, zaradi lokalnih ekstremov lahko sekanta postane zelo položna in se tako interval iskanja popolnoma spremeni.
Uporabite lahko še ostale metode iskanje ničel, recimo:
  • Bisekcija - iskanje približne ničle funkcije
  • Newton-Raphsonova metoda - iskanje približne ničle funkcije
  • Reševanje enačb

    V polje vnesi funkcijo, ki ji iščemo ničle in začetne meje intervala x0 in x1, kjer pričakujemo ničlo (ničla je pri sekanti lahko tudi izven začetnih meja!).
    * Potek funkcije lahko preveriš z naslednjim orodjem okni_grafi.html.



    SLEDI JavaScriot kalkulator za sekantno 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.:
    Začetna spodnja meja x0:
    Začetna zgornja meja x1
    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-1 Xn]




    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.