abc Matlab - elektronski priručnik
IX dio NUMERIČKA MATEMATIKA U MATLAB-u

9.1. Numeričko rješavanje nelinearnih jednačina s jednom nepoznatom

Ovdje ćemo razmotriti problem određivanja približnog rješenja neke nelinearne jednačine s jednom nepoznatom. Formule po kojima se može tačno odrediti rješenje neke algebarske jednačine postoje samo za jednačine 2., 3. i 4. stepena – to su opštepoznata i popularna formula za računanje rješenja kvadratne jednačine, Cardanova formula (za algebarsku jednačinu 3. stepena), te Ferrarijeva formula (za algebarsku jednačinu 4. stepena). U matematici poznata Abelova teorema kaže da za algebarske jednačine stepena barem 5 takve formule ne postoje. Stoga je najprije bilo u interesu naći algoritme za približno rješavanje takvih jednačina, a potom se problem poopštio i na znatno veću klasu jednačina, tzv. nelinearne jednačine. Uopšte, nelinearna jednačina je svaka jednačina oblika

f(x) = 0

gdje je f(x) bilo koja realna funkcija koja se ne može napisati u obliku f(x) = ax + b. Kako bi se i takve jednačine uspješno mogle (približno) riješiti, matematičari su problem rješavanja nelinearne jednačine sveli na problem proučavanja određenih svojstava funkcije f(x) (neprekidnost, derivabilnost itd.). Razvoj numeričke matematike omogućio je pojavu brojnih metoda za određivanje približnih rješenja nelinearne jednačine, a jedna od najčešće korištenih je metoda polovljenja ili metoda bisekcije.

Osnovna ideja te metode zasniva se na sljedećoj teoremi:

Teorema 1. (Bolzanova teorema) Neka je frealna i na segmentu I = [a, b] neprekidna funkcija. Ako vrijedi:

(f (a) < 0 i f (b) > 0) ili (f (a) > 0 i f (b) < 0),

tada postoji barem jedan c ϵ (a, b) takav da je  f (c) = 0.

Slobodno govoreći, ta teorema izriče ono što nam je intuitivno vrlo prihvatljivo: Ako uzmemo dvije tačke s različitih strana ose Ox (jednu ispod, a drugu iznad te ose) i spojimo ih jednom ''crtom'' (tj. algebarskom krivom) ne dižući olovku s papira, onda ćemo pri tom spajanju osu Ox presjeći barem jednom.
Treba uočiti vrlo snažnu pretpostavku te teoreme: da je ffunkcija neprekidna na segmentu I. To znači da teorema ne vrijedi za funkcije koje imaju (barem jedan) prekid na tom segmentu. Takođe, može se pokazati da teorema ne vrijedi ukoliko se segment zamijeni otvorenim ili poluotvorenim intervalom.

Na temelju te teoreme razvijen je sljedeći algoritam za približno određivanje nule bilo koje neprekidne realne funkcije (na nekom segmentu) s tačnošću ε:

Korak 1. Odrediti realne brojeve a i b takve da vrijedi:

(f (a) < 0 i f (b) > 0) ili (f (a) > 0 i f (b) < 0)

Korak 2. Izračunati

i f(c).

Korak 3. Ako je f(c) = 0, traženo rješenje je jednako c. Kraj postupka.

Korak 4. Ako je b - a ≤ ε, traženo približno rješenje je jednako c. Kraj postupka.

Korak 5. Ako je f(a) * f(c) > 0, staviti a := c i vratiti se na Korak 2. Ako je f(b) * f(c) > 0 , staviti b := c i vratiti se na Korak 2.

Upravo opisani algoritam naziva se metoda polovljenja ili bisekcije. Može se pokazati da uz zadane brojeve a, b i ε broj polovljenja n mora zadovoljavati sljedeću nejednakost:

Kako bismo metodu polovljenja mogli koristiti u MATLAB-u, kreirajmo sljedeću funkcijsku m–datoteku bis.m čije su ulazne varijable donja granica segmenta a, gornja granica segmenta b i željeni broj polovljenja n:

 
function y=bis(a,b,n)

if f(a)*f(b)>0
    error('Pogreška u ulaznim podacima!')
end

for k=1:n
       x=(a+b)/2;
       if abs(f(x))==0
           break
       end
       if f(x)*f(a)>0
           a=x;
          else
              b=x;
          end
end
y=x;

Upišimo gore navedene naredbe u funkcijsku datoteku bis.m i pohranimo je u direktorij C:\matlabR12\work.

Napomena: Funkcija bis pretpostavlja da je pod imenom f.m u direktoriju C:\matlabR12\work pohranjena funkcija čije nule (u određenom segmentu) želimo odrediti. Datoteka se može ''preraditi'' tako da ta funkcija može biti pohranjena pod bilo kojim imenom, ali to ovdje nismo učinili jer za određivanje nula neke funkcije MATLAB posjeduje ''svoju'' funkciju fzero. Nju ćemo upoznati malo kasnije.

Pokažimo primjenu funkcije bis na primjerima.

Primjeri i zadaci u Matlabu - Linearna algebra- Frejm /FRAMES/    <    Index    >    Primjer 1. sin x + ln x = 0