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

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

Primjer 5. Zadane su funkcije f (x) = log(x + 1) i g(x) = ex sin x . Odredimo sve zajedničke tačke njihovih grafova u segmentu [-0.9, 5].

Ovdje nam zadani interval služi jedino kao putokaz na kojem segmentu trebamo crtati grafove tih funkcija. Naime, ukoliko se umjesto početne aproksimacije kao ulazna varijabla funkcije fzero navede segment, fzero će pretpostaviti da se u tom segmentu nalazi najviše jedna nula posmatrane funkcije, što uopšte ne mora biti tačno. Zato moramo najprije nacrtati grafove zadanih funkcija na zadanom segmentu, a potom pomoću dobijenog grafa odrediti sve eventualne početne aproksimacije nula. U novom redu radnog prostora ukucajmo:

x=-0.9:0.01:5;
y1=log10(x+1);
y2=exp(x).*sin(x);
plot(x,y1,x,y2)

pa ćemo dobiti sljedeću sliku:


Vidimo da se jedna zajednička tačka nalazi ''blizu'' 3, no, slika ne daje precizan odgovor ima li zajedničkih tačaka u segmentu [-0.9, 0.5]. Zato ukucajmo:

x=-0.9:0.01:0.5;
y1=log10(x+1);
y2=exp(x).*sin(x);
plot(x,y1,x,y2)

pa ćemo dobiti sljedeću sliku:

Dakle, postoje ukupno 3 zajedničke tačke posmatranih funkcija. Jedna se nalazi ''blizu'' –0.5, druga ''blizu'' 0, a treća blizu 3. Za njihovo tačno određivanje koristićemo funkciju fzero. Budući da ta funkcija ne rješava jednačine tipa f(x) = g(x), već samo jednačine tipa f(x) = 0, napišimo jednakost f(x) = g(x) u obliku

f(x) – g(x) = 0,

pa ako stavimo

h(x) = f(x) – g(x),

onda vidimo da se zadani problem svodi na određivanje nula funkcije h(x). U radnom prostoru otvorimo m–datoteku h.m i ukucajmo:

function y=h(x);
y=log10(x+1)-exp(x)*sin(x);

Pohranimo upisane naredbe i vratimo se u radni prostor. Odredimo najprije prvu nulu funkcije h(x). Ukucajmo:

fzero(@h,-0.5)

pa će MATLAB ispisati:

ans =
-0.48302799677525

Potpuno analogno ukucavanjem

fzero(@f,0)

dobijemo:

ans =
0

a ukucavanjem

fzero(@f,3)

dobijemo:

ans =
3.11430884120450

Dakle, tražene su tačke –0.483028, 0 i 3.114309. (Za posve korektno rješenje cijelog zadatka izračunajte pripadne vrijednosti funkcije f(x) ili g(x) u tim tačkama i napišite pripadne uređene parove.)

Razmotrimo sada poseban slučaj: kada je funkcija f(x) polinom stepena n. Osnovna teorema algebre nam kaže da svaki polinom (s realnim ili kompleksnim koeficijentima) ima barem jednu nulu u skupu C (skupu kompleksnih brojeva). Nadalje, ako na skupu Cn[x] svih polinoma stepena n čiji su koeficijenti kompleksni brojevi definišemo preslikavanje k : Cn[x] Cn+1 formulom

onda se lako može provjeriti da je preslikavanje k bijekcija, što znači da polinom možemo smatrati zadanim ako znamo sve njegove koeficijente – od vodećeg koeficijenta (an) do slobodnog člana (a0). Zbog toga ima smisla definisati posebnu funkciju čije će ulazne varijable biti svi koeficijenti polinoma (zbog bijektivnosti, time zapravo zadajemo polinom), a izlazne varijable sve (uopšte, kompleksne) nule tog polinoma. I u MATLABU postoji takva funkcija: to je funkcija roots. Njena je sintaksa

roots(matrica_koeficijenata_polinoma)

Pogledajmo upotrebu te funkcije na primjerima.

Primjer 4. f(x) = ln(x – 1) – x2 + 4    <    Index    >    Primjer 6. x3 + x2 + x + 1