Bisekcija - numerično iskanje ničel nelinearnih funkcij - JavaScript calculator

V matematiki je bisekcija numerična metoda za iskanje ničel zveznih funkcij. Metoda temelji na večkratnem zaporednem razpolavljanju intervala, na katerem leži ničla. Ime bisekcija (latinsko bisectio) pomeni razpolavljanje.
Prikaz prvih nekaj korakov bisekcije

Z metodo bisekcije iščemo rešitve enačbe oblike f(x) = 0, lahko pa tudi poljubne druge enačbe, če jo najprej preoblikujemo v obliko f(x) = 0.
Metodo bisekcije lahko uporabimo, če vemo, da je vrednost zvezne funkcije f v enem krajišču intervala [a,b] pozitivna, v drugem pa negativna. Če funkcija na intervalu [a,b] spremeni predznak in se nikjer ne pretrga, mora imeti na tem intervalu (vsaj eno) ničlo.
Opišimo postopek za primer, ko je vrednost f(a) pozitivna, f(b) pa negativna (glej sliko):
- najprej izračunamo razpolovišče intervala: c = (a+b) / 2,
- potem izračunamo f(c) (tj. vrednost funkcije v razpolovišču),
- če je f(c) = 0, smo ničlo že odkrili in postopek lahko zaključimo,
- če je vrednost f(c) pozitivna (enakega predznaka kot f(a)), potem krajišče a zamenjamo s c in postopek nadaljujemo na intervalu [c,b],
- če je vrednost f(c) negativna (enakega predznaka kot f(b)), potem krajišče b zamenjamo s c in postopek nadaljujemo na intervalu [a,c].


Postopek nadaljujemo na tistem od podintervalov, na katerem funkcija spremeni predznak. Z vsakim naslednjim korakom je interval ožji in krajišči konvergirata proti ničli funkcije. Po metodi bisekcije praviloma ne moremo dobiti povsem točne vrednosti ničle, dobimo pa lahko poljubno dober približek.
Metoda bisekcije ni uporabna za iskanje ničel sode stopnje (tj. ničel, v katerih funkcija ne spremeni predznaka), pri ničlah lihe stopnje pa je sicer počasna a zelo zanesljiva.
Uporabite lahko še ostale metode iskanje ničel, recimo:
  • Sekantna metoda - iskanje približne ničle funkcije
  • Newton-Raphsonova metoda - iskanje približne ničle funkcije

    V polje vnesi funkcijo, ki ji iščemo ničle in začetne meje intervala a in b, kjer pričakujemo ničlo.
    * Potek funkcije lahko preveriš z naslednjim orodjem okni_grafi.html.



    SLEDI JavaScriot kalkulator za bisekcijo (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 število korakov:
    Vnesi funkcijo f(x):
    Oceni ničle medin, kor.:
    Začetna spodnja meja a:
    Začetna zgornja meja b:
    Koliko korakov do (bk-ak):
    Vrednost f(c):
    Velikost kon. intervala (bk-ak):
    Ničla funkcije je blizu X =

    JS koda: Vičar Zorko (2017)

    Izpis vrednosti itercije po korakih n: st_iteracije, c= (a+b)/2, f(c), [a b]




    Primer uporabe bisekcije: Lagrangeve točke - kalkulator

    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.