You are on page 1of 41

Programirae numeriqkih metoda

u programskom jeziku M AT LAB *


Nikola Ajzenhamer

11. maj 2016.

Sadraj
1 Interpolacija 2
2 Diferencirae 20
3 Integracija 27

* Materijal je delom preuzet od dr Aleksandre Deli.

1
1 Interpolacija
1. Neka je funkcija f zadata tabliqno M-fajlom tablica.m koji generixe dva niza X =
[x , ..., x ] i F = [f , ..., f ] (od kojih je prvi strogo rastui) za tu tabliqno zadatu
funkciju. Tablica ne mora biti ekvidistantna.
1 n 1 n

Rexee: Zadajmo tablicu na sledei naqin:


% tablica.m
X=[100,121,144];
F=[10,11,12];

ˆ Napisati M-fajl novatablica.m u kom se prethodna tablica proxiruje do nove


dodavaem qvorova x +x i i+1
, i = 1, ..., n − 1

i raqunaem vrednosti funkcije f u ima korixeem formule


2

 
xi + xi+1 f (xi+1 ) + f (xi )
f = , i = 1, ..., n − 1.
2 2

Rexee: Jasno je da e nova tablica imati ukupno 2n−1 elemenata. U M AT LAB-


u, indeksirae matrica poqie od 1, tako da e nova tablica imati vrednosti
na indeksima 1, 3, ..., 2n − 1 jednake starim vrednostima. Vrednosti koje treba
dopuniti su one na indeksima 2, 4, ..., 2n − 2.
Ako je zadat stari vektor X, onda nepromeenim vrednostima novog (proxirenog)
vektora X1 moemo pristupiti sa X1(1:2:2*n-1), a vrednostima koje treba do-
dati moemo pristupiti sa X1(2:2:2*n-1). U drugom sluqaju stav amo 2*n-1
umesto 2*n-2 zato xto M AT LAB svakako nee gledati taj neparan element.
% novatablica.m

% pozivamo pomocni fajl: tablica.m koji sadrzi vektore X i F


tablica;
n = length(X);

% prepisujemo clanove koji ostaju nepromenjeni


X1(1:2:2*n-1) = X;
F1(1:2:2*n-1) = F;

% dodajemo nove clanove


X1(2:2:2*n-1) = (X(1:n-1) + X(2:n))/2;
F1(2:2:2*n-1) = (F(1:n-1) + F(2:n))/2;

2
ˆ Napisati M-fajl Lagr1.m sa funkcijom L = Lagr1(x) koja za uneti argument
x vraa priblinu vrednost funkcije f u toj taqki izraqunatu pomou La-
granovog interpolacionog polinoma L, korixeem svih vrednosti iz nove
tablice.
Rexee: Neka je na segmentu [a, b] zadato n + 1 razliqitih qvorova: x , x , ..., x
i neka su y = f (x ), i = 0, n, vrednosti funkcije y = f (x) u tim qvorovima. 0 1 n

Lagranev interpolacioni polinom je


i i

n
Q
(x − xj )

(1)
n j=0
X j6=i
Ln (x) = n
Q · yi .
i=0 (xi − xj )
j=0
j6=i

Dakle, treba napisati program koji raquna vrednost L (x) u zadatoj taqki,
prema formuli 1. Ipak, ne moemo direktno kodirati zadatu formulu bez n

odreenih izmena.
Najpre, nama je zadato n qvorova interpolacije (to su elementi vektora X1; neka
je n duina tog vektora). Samim tim, granice suma i proizvoda idu od 1 do
n. Da e, pristup qvorovima x i x vrximo pomou X1(i), odnosno, X1(j). Na
kraju, pristup vrednostima funkcije y vrximo pomou F1(i).
i j
i

Sada moemo napisati traenu funkciju.


function [L] = Lagr1(x)
% Poziv funkcije: L = Lagr1(x)
% Ulazne vrednosti: x - tacka u kojoj se zeli dobiti vrednost funkcije
% date tablicom u fajlu novatablica.m, koriscenjem
% Lagranzovog interpolacionog polinoma
% Izlazne vrednosti: L - vrednost Lagranzovog interpolacionog polinoma u tacki x
%
% Pomocni fajl: novatablica.m - sadrzi tablicu (vektore X1 i F1)

novatablica;
n = length(X1);

L = 0;
for i = 1:n
p = 1;
for j = 1:n
if j ~= i
p = p * (x-X1(j))/(X1(i)-X1(j));
end
end
L = L + p*F1(i);
end

3
2. Neka je funkcija f zadata eksplicitno komandnim M-fajlom f unkcija.m.
Rexee: Neka je zadata funkcija f (x) = . U M AT LAB-u, ovakve funkcije se
1

mogu jednostavno zadati korixeem anonimnih funkcija. Anonimna funkcija za-


1+x2

poqie @ simbolom, iza kojeg slede argumenti izmeu obiqnih zagrada, a zatim i
telo funkcije. Dakle, naxa funkcija bi mogla da izgleda f = @(x) 1/(1 + x^2).
Nedostatak ovakve definicije funkcije je taj xto ona moe za argument da primi
samo jednu taqku x. Ukoliko elimo da za proizvo an vektor X = [x1, x2, ...,
xn], poziv f(X) vrati vektor [f(x1), f(x2), ..., f(xn)], dovo no je da opera-
tore / (de ee) i ^ (stepenovae) zamenimo operatorima ./ i .^, redom. Operator
sabiraa vektora i skalara funkcionixe onako kako bismo i oqekivali { dodaje
vrednost skalara na svaki element vektora, tako da tu nema izmene.
% funkcija.m
f = @(x) 1./(1 + x.^2);

ˆ Napisati M-fajl tablica.m sa funkcijom [X, Y ] = tablica(a, b, n) koja tabelira


zadatu funkciju f na intervalu [a, b] sa n qvorova.
Znamo da ukoliko imamo segment [a, b] koji treba podeliti na n delova, onda
moemo nai odgovarajui korak h = i iskoristiti niz = a:h:b da dobi-
b−a

jemo traeni vektor. Meutim, xta ako je korak h iracionalan broj? U tom
n

sluqaju (a i opxte), moemo iskoristiti funkciju linspace(a, b, n=100) koja


pravi vektor od n ekvidistantnih taqaka na segmentu [a, b].
function [X, Y] = tablica(a, b, n)
% Poziv funkcije: [X,Y]=tablica(a,b,n)
% Ulazne vrednosti: a - pocetak intervala
% b - kraj intervala
% n - broj cvorova na intervalu (a,b)
% Izlazne vrednosti: X - cvorovi
% Y - vrednosti funckije f u cvrovima vektora X
%
% Pomocni fajlovi: funkcija.m - sadrzi eksplicitno zadatu funkciju f

% ucitavamo funkciju f u okruzenje


funkcija;

% formiramo ravnomerno rasporedjene cvorove


X = linspace(a, b, n);
Y = f(X);

4
ˆ Napisati M-fajl Lagr1b.m sa funkcijom [L, y] = Lagr1b(x, a, b, n) koji formira
i vraa koeficijente Lagranovog interpolacionog polinoma L formiranog
koristei sve vrednosti iz tablice, kao i vrednost formiranog polinoma u
taqki x.
M AT LAB ima ugraenu podrxku za rad sa polinomima. Polinomi se pred-
stav aju vektorom (vrstom) svojih koeficijenata, poqevxi od koeficijenta uz
najvixi stepen. Dakle, ako je polinom n-tog stepena, tada vektor koeficijenata
sadri n + 1 element. Na primer, polinom x − 1 se u M AT LAB-u predstav a
2

vektorom p=[1, 0, -1]. Funkcije za rad sa polinomima moemo videti kuca-


em naredbe help polyfun.
Nama e najqexe biti korisne sledee funkcije:
roots(p) { vraa korene polinoma p
poly(v) { vraa koeficijente polinoma qije su nule elementi vektora v
polyval(p,a) { raquna vrednost polinoma p u taqki (vektoru) a
polyder(p) { pronalazi prvi izvod polinoma p
polyint(p) { pronalazi neodreeni integral polinoma p
conv(p,q) { raquna proizvod polinoma p i q
deconv(p,q) { raquna koliqnik polinoma p i q

function [L, y] = Lagr1b(x, a, b, n)


% Poziv funkcije: L = Lagr1b(x)
% Ulazne vrednosti: x - tacka u kojoj se zeli dobiti vrednost funkcije
% date tablicom u fajlu novatablica.m, koriscenjem
% Lagranzovog interpolacionog polinoma
% (a,b) - interval na kome se tabelira funkcija
% n - broj cvorova
% Izlazne vrednosti: L - koeficijenti Lagranzovog interpolacionog polinoma
% y - vrednost Lagranzovog interpolacionog polinoma u tacki x
%
% Pomocne funkcije: [X,Y] = tablica(a, b, n) - vraca tabelu funkcije

[X,Y] = tablica(a, b, n);

% racunamo polinomijalni oblik Lagranzovog polinoma


L=0;
for i = 1:n
p = 1;
for j = 1:n
if j ~= i
p = conv(p, [1,-X(j)])/(X(i)-X(j));
end
end
L = L + p*Y(i);
end

% racunamo vrednost polinoma L u tacki x


y = polyval(L, x);

5
ˆ Uporediti grafike funkcije f i formiranog interpolacionog polinoma.
function [] = grafik(a, b, n)
% Poziv funkcije: grafik(a, b, n)
% Ulazne vrednosti : (a,b) - interval na kome se funkcija tabelira
% n - broj cvorova
% Izlaz : grafici funkcije i interpolacionog polinoma
%
% Pomocne funkcije i fajlovi:
% [L,y] = Lagr1b(x,a,b,n) - vraca koeficijente polinoma
% funkcija.m - sadrzi eksplicitno zadatu funkciju f
% [X,Y] = tablica(a,b,n) - tablica funkcije

% formiramo vektor sa 100 cvorova na zadatom intervalu


% potreban nam je gusci vektor, kako bi grafici funkcija bili glatki
X=linspace(a,b);

% ucitavamo funkciju koju interpoliramo


funkcija;
% iscrtavamo grafik funkcije f
% opcija 'k' znaci da se grafik crta crnom bojom
plot(X, f(X), 'k')

% zadrzavamo isti prozor kako bismo u njega docrtali grafik polinoma


hold on

% dobijamo koeficijente polinoma


L = Lagr1b(0, a, b, n);
% iscrtavamo grafik polinoma
% opcija 'r' znaci da se grafik crta crvenom bojom
plot(X, polyval(L, X), 'r')

% Dodatak: prikazacemo da u MATLAB-u mogu da se iscrtavaju i druge stvari,


% na primer, cvorove interpolacije cemo iscrtati kao zvezdice

% uzimamo cvorove interpolacije


[X1, Y1] = tablica(a, b, n);
% ucrtavamo vrednosti funkcije u cvorovima
% dodavanje * u opciju 'r' znaci da se crtaju crvene zvezdice umesto pune linije
plot(X1, Y1, 'r*')

% oznacavamo da se nijedan grafik funkcije ne dodaje na crtez


hold off

% dodavanje legende na crtez


legend('funkcija','polinom','vrednosti u cvorovima')

6
Rezultat poziva grafik(-10,10,11).
3. Neka je funkcija f zadata tabliqno M-fajlom tablica.m koji generixe dva niza X =
[x1, x2, ..., xn] i F = [f1, f2, ..., fn] za tu tabliqno zadatu funkciju.

Rexee: Zadajmo funkciju f kao f (x) = x .


6

%tablica.m
X = -3:3;
f = @(x) x.^6;
F = f(X);

ˆ Napisati M-fajl tablicaCheck.m sa funkcijom t = tablicaCheck() koja vrxi


proveru da li je tablica u komandnom fajlu tablica.m ekvidistantna i da li
je niz X zadat u strogo rastuem poretku. Ukoliko su oba uslova ispuena,
funkcija vraa vrednost 1, a u suprotnom vraa vrednost 0 i u oba sluqaja
ispisuje odgovarajuu poruku.
Rexee: Kako ispitati da li je tablica ekvidistantna? Jedan pogodan naqin
jeste da oduzmemo svake dve uzastopne vrednosti vektora i time dobijemo vektor
koraka. Ukoliko su svi koraci meusobno jednaki (na primer, svi su jednaki
prvom koraku), tablica je ekvidistantna. Ovo se lako programira for pet om.
Meutim, u M AT LAB-u postoji funkcija diff(X) koja raquna [X(2)-X(1),
X(3)-X(2), ..., X(n)-X(n-1)].

Jednakost elemenata vektora moemo takoe programirati for pet om, ali M AT LAB
nam pomae i ovde! Funkcijom all(V) dobijamo vrednost 1 ako nijedan element
vektora V nije 0. Kako nam ovo pomae? Naredbom V==V(1) dobijamo vektor u
kojem se na poziciji i nalazi 1 ukoliko je V = V , a 0 inaqe. Kompozicijom
funkcije all() i prethodne naredbe dobijamo 1 ako je vektor ekvidistantan, a
i 1

0 inaqe (obratiti pau na napomenu u kôdu).


7
podrava logiqke operatore i (&&), ili (||) i negaciju (∼) koji se
mogu primeniti i nad celim brojevima (kao u programskom jeziku C ).
M AT LAB

function [t] = tablicaCheck()


% Poziv funkcije: t = tablicaCheck()
% Ulazne vrednosti: ~ (nema)
% Izlazne vrednosti: 1 - ako je niz X strogo rastuci i tablica
% ekvidistantna, ispisuje se odgovarajuca poruka
% 0 - ukoliko neki od uslova nije ispunjen i ispisuje
% se odgovarajuca poruka
% Pomocni fajl: tablica.m u kome se nalazi tablica (vektori X i F)

% ucitavamo tablicu i pravimo vektor koraka


tablica;
h = diff(X);

% Ispitujemo da li je tablica ekvidistantna (da li su svi koraci jednaki).


e = all(h==h(1));

% Napomena: Radi samo za celobrojne vrednosti koraka h!


% U slucaju da h nije ceo broj, zbog greske zaokruzivanja, treba zadati toleranciju,
% na primer, tol=eps*10. Tada bi ekvidistantnost mogli ispitati sa:
% e = all(abs(h-h(1))<eps*10);

% Ispitujemo da li je vektor X rastuci, odnosno da li su koraci pozitivni;


r = all(h>0);

% Izracunavamo rezultat ispitivanja i ispisujemo odgovarajucu poruku


t = e&&r;
if t == 1
disp('Tablica je ekvidistantna i vektor X je dat u strogo rastucem poretku.')
else
disp('Tablica nije ekvidistatna ili korak nije ceo broj!')
end
ˆ Napisati M-fajl polozaj.m sa funkcijom polozaj(x) koja za uneti argument x
vraa vrednost 1 ukoliko je x < x , 2 ukoliko je x > x i 0 inaqe.
2 n−1
function [p] = polozaj(x)
% Poziv funkcije: p = polozaj(x)
% Ulazne vrednosti: x - tacka ciji polozaj u vektoru X zelimo odrediti
% Izlazne vrecnosti: y - 1, ako je x < X(2)
% 2, ako je x > X(n-1)
% 0, u suprotnom
%
% Pomocni fajl: tablica.m u kom se nalazi vektor X

tablica;
n=length(X);
if x < X(2)
p = 1;
elseif x > X(n-1)
p = 2;
else
p = 0;
end

8
ˆ Napisati M-fajl N jutn.m sa funkcijom N jutn(x) koja ukoliko su svi uslovi
ispueni, vraa priblinu vrednost funkcije f u taqki x izraqunatu korix-
eem I (II ) utnovog interpolacionog polinoma, ako je vrednost funkcije
polozaj u taqki x jednaka 1 (2), odnosno izdaje odgovarajuu poruku ukoliko je
polozaj(x) = 0.

Rexee: Za interpolaciju utnovim interpolacionim polinomima, potrebno


je ispuniti odreene uslove.
Na poqetku treba proveriti da li je tablica ekvidistantna i prekinuti izvr-
xavae skripta ukoliko nije. Skript moemo prekinuti pozivaem funkcije
error(’ERRMSG’) koja e ispisati poruku ERRMSG (najqexe tipa string ) i obra-
diti izuzetak u zavisnosti od kôda u kojem je pozvan (pomou catch bloka ili
prekidaem izvrxavaa, xto je nama ci ).
Da e, u zavisnosti od poloaja taqke x treba iskoristiti formulu 3, odnosno,
formulu 5 ili prekinuti izvrxavae skripta. Funkciji error() moemo
proslediti i vektor string-ova koje e on nadovezati u jednu poruku. Ovo je
korisno kada imamo promen ive razliqitih tipova koje elimo nadovezati u
jednu poruku. Funkcija num2str(X) pretvara broj u string.
Ovde imamo jox jednu zanim ivu notaciju { tri taqke. Tri taqke koristimo
ukoliko imamo poziv funkcije koji je previxe dugaqak, a mi elimo da ga
prelomimo u vixe redova. Prelamae se vrxi upravo pomou tri taqke.
Za utnove interpolacione polinome sa konaqnim razlikama potrebne su nam
{ konaqne razlike. Neka je data mrea ekvidistantnih taqaka, qvorova x =
x + ih, i = 1, n i neka su poznate vrednosti y = f (x ) funkcije y = f (x) u
i

qvorovima x , i = 0, n.
0
i
i i

Konaqne razlike prvog reda funkcije f (x) su:


∆y0 = y1 − y0 , ∆y1 = y2 − y1 , ..., ∆yi = yi+1 − yi , ...

Konaqne razlike drugog reda funkcije f (x) su:


∆2 y0 = ∆y1 − ∆y0 , ∆2 y1 = ∆y2 − ∆y1 , ..., ∆2 yi = ∆yi+1 − ∆yi , ...

Uopxte, konaqne razlike k − tog reda funkcije f (x) su:


∆k y0 = ∆k−1 y1 − ∆k−1 y0 , ∆k y1 = ∆k−1 y2 − ∆k−1 y1 , ..., ∆k yi = ∆k−1 yi+1 − ∆k−1 yi , ...

Nije texko zak uqiti da se raqunae konaqnih razlika vrxi iterativno. Konaqne
razlike je pogodno smestiti u matricu; matrice mogu biti dijagonalne i hori-

9
zontalne
x y ∆y ∆2 y ∆3 y ... ∆n−2 y ∆n−1 y ∆n y
x0 y0 ∆y0 ∆2 y0 ∆3 y0 ... ∆n−2 y0 ∆n−1 y0 ∆n y0
x1 y1 ∆y1 ∆2 y1 ∆3 y1 ... ∆n−2 y1 ∆n−1 y1
x2
.. ..
y2
..
∆y2
..
∆2 y2
.. . . .
∆3 y2 ... ∆n−2 y2

xn−2 yn−2 ∆yn−2 ∆2 yn−2 ...


xn−1 yn−1 ∆yn−1 ...
xn yn ...

Ovu matricu emo napraviti prvo inicijalizovaem matrice reda n − 1 (za


konaqne razlike od reda 1 do reda n) nulama, funkcijom zeros(n-1). Da e, for
pet om emo, po definiciji, odrediti konaqne razlike.
Neka su y = f (x ) zadate vrednosti funkcije y = f (x) u ekvidistantnim
qvorovima interpolacije x , i = 0, n.
i i

Polinom i

∆y0 ∆2 y0
Pn (x) = y0 +
1!h
(x − x0 ) +
∆n y0
2!h2
(x − x0 )(x − x1 ) + ...+
(2)
+ (x − x0 )(x − x1 ) · ... · (x − xn ),
odnosno, ako uvedemo smenu
n!hn

x − x0
u=
dobijamo polinom
h

∆y0 ∆2 y0
Pn (u) = y0 +
1!
u+
∆n y0
2!
u(u − 1) + ...+
(3)
+ u(u − 1) · ... · (u − n + 1),
n!
xto nazivamo prvi utnov interpolacioni polinom za ekvidistantne qvorove
(ili prvi utnov interpolacioni polinom sa konaqnim razlikama), a polinom
∆yn−1 ∆2 yn−2
Pn (x) = yn +
1!h
∆n y0
(x − xn ) +
2!h2
(x − xn )(x − xn−1 )+
(4)
+ (x − xn )(x − xn−1 ) · ... · (x − x1 ),
odnosno, ako uvedemo smenu
n!hn

x − xn
v=
dobijamo polinom
h

∆yn−1 ∆2 yn−2
Pn (v) = yn +
1!
∆n y0
v+
2!
v(v + 1) + ...+
(5)
+ v(v + 1) · ... · (v + n − 1),
n!

10
xto nazivamo drugi utnov interpolacioni polinom za ekvidistantne qvorove
(ili drugi utnov interpolacioni polinom sa konaqnim razlikama).
function [y] = Njutn(x)
% Poziv funkcije: y = Njutn(x)
% Ulazne vrednosti: x - tacka u kojoj se zeli dobiti vrednost funkcije
% date tablicom u fajlu tablica.m, koriscenjem Njutnovog
% interpolacionog polinoma sa konacnim razlikama
% Izlazne vrednosti: y - vrednost Njutnovog interpolacionog polinoma sa
% konacnim razlikama u tacki x
%
% Pomocne funkcije i fajlovi: tablicaCheck() - provera ekvidistantnost
% tablice
% polozaj(x) - vraca polozaj tacke x u
% vektoru X
% tablica.m - sadrzi tablicu (vektore X i F)

if ~tablicaCheck()
error('Tablica nije ekvidistantna. Metoda se ne moze primeniti.')
end

pol = polozaj(x);
tablica;
n = length(X);
if pol == 0
error(['Ulazni argument mora biti manji od ', num2str(X(2)), ...
' ili veci od ', num2str(X(n-1)), '.'])
end

% Formiramo matricu u koju cemo upisivati konacne razlike po kolonama:


tabk = zeros(n-1);
% pomocna promenljiva nad kojom cemo primenjivati operator konacnih razlika diff
kon = F;
for i = 1:n-1
kon = diff(kon);
tabk(1:n-i, i) = kon;
end
% Stampamo tablicu:
disp('Tablica konacnih razlika u formatu: X, Y, konacne razlike')
disp([X',F',[tabk;zeros(1,n-1)]])

% Izracunavanje vrednosti polinoma


if pol == 1
% 1. Njutnov interpolacioni polinom
% y = f1 + q*df1/1! + q*(q-1)*d^2f1/2! + q*(q-1)*(q-2)*d^3f1/3! + ...
% gde je d^{i}f konacna razlika reda i
% q = (x-x1)/h
q = (x-X(1))/(X(2)-X(1));
p = 1;
y = F(1);
for i = 1:n-1
p = p * (q-i+1);
y = y + p*tabk(1,i)/factorial(i);
end

11
elseif pol == 2
% 2. Njutnov interpolacioni polinom
q = (x-X(n))/(X(2)-X(1));
p = 1;
y = F(n);
for i = 1:n-1
p = p * (q+i-1);
y = y + p*tabk(n-i,i)/factorial(i);
end
end

4. Neka je funkcija f zadata tabliqno M-fajlom tablica.m koji generixe dva niza
X = [x1, x2, ..., xn] i Y = [y1, y2, ..., yn] za tu tabliqno zadatu funkciju.
Tablica ne mora biti ekvidistantna.
Rexee: Zadajmo M-fajl tablica.m na sledei naqin:
% tablica.m
X = [100, 121, 144];
Y = [10, 11, 12];

ˆ Napisati M-fajl tablicaCheck.m sa funkcijom t = tablicaCheck() koja vrxi


proveru da li je niz X zadat u strogo rastuem poretku i da li je niz Y mono-
ton. Ukoliko su oba uslova ispuena funkcija vraa vrednost 1, u suprotnom
vraa vrednost 0. Ukoliko neki od uslova nije ispuen, funkcija ispisuje odgo-
varajuu poruku.
Rexee: Monotonost vektora proveravamo tako xto gledamo da li su svi koraci
vektora nenegativni ili da li su svi koraci vektora nepozitivni.
function t = tablicaCheck()
% Poziv funkcije: t = tablicaCheck()
% Ulazne vrednosti: ~ (nema)
% Izlazne vrednosti: 1 - ako je niz X strogo rastuci i Y monoton
% 0 - ukoliko neki od uslova nije ispunjen i ispisuje
% se odgovarajuca poruka
%
% Pomocni fajl: tablica.m u kome se nalaze vektori X i Y

tablica;
hx = diff(X);
hy = diff(Y);
r = all(hx>0);
m = all(hy>=0) || all(hy<=0);
t = m&&r;

if ~m
disp('Vektor Y mora biti monoton.')
end

12
if ~r
disp('Vektor X mora biti strogo rastuci.')
end

ˆ Napisati M-fajl vredf unk.m sa funkcijom y = vredf unk(x) koja za uneti ar-
gument x vraa priblinu vrednost funkcije f u toj taqki izraqunatu pomou
utnovog interpolacionog polinoma sa pode enim razlikama konstruisanog
korixeem svih vrednosti iz tablice.
Rexee: Neka je funkcija y = f (x) zadata tabliqnim vrednostima y = f (x ), i =
0, n, gde su x ∈ [a, b], i = 0, n, nejednako razmaknuti qvorovi, dakle,
i i
i

xi+1 − xi = hi 6= 0, i = 0, n − 1,

i h nisu jednaki meu sobom.


i

Pode ene razlike prvog reda funkcije f (x) su:


yi+1 − yi
f [xi , xi+1 ] = , i = 0, n − 1.
xi+1 − xi

Pode ene razlike drugog reda funkcije f (x) su:


f [xi+1 , xi+2 ] − f [xi , xi+1 ]
f [xi , xi+1 , xi+2 ] = , i = 0, n − 2.
xi+2 − xi

Uopxte, pode ene razlike k-tog reda funkcije f (x) su:


f [xi+1 , xi+2 , ..., xi+k ] − f [xi , xi+1 , ..., xi+k−1 ]
f [xi , xi+1 , ..., xi+k ] = , i = 0, n − 1.
xi+k − xi

Pode ene razlike se obiqno zapisuju u obliku tablice pode enih razlika, i
na taj naqin se postie preglednost. Tablice su sledeeg oblika, analogno
tablicama konaqnih razlika.
x y f [xi , xi+1 ] f [xi , xi+1 , xi+2 ] ... f [xi , xi+1 , ..., xi+n−1 ] f [xi , xi+1 , ..., xi+n ]
x0 y0 f [x0 , x1 ] f [x0 , x1 , x2 ] ... f [x0 , x1 , ..., xn−1 ] f [x0 , x1 , ..., xn ]

..
x1
..
y1
..
f [x1 , x2 ]
..
f [x1 , x2 , x3 ]
...
... f [x1 , x2 , ..., xn−1 ]

xn−2 yn−2 f [xn−2 , xn−1 ] f [xn−2 , xn−1 , xn ] ...


xn−1 yn−1 f [xn−1 , xn ] ...
xn yn ...

Proces kreiraa tablice pode enih razlika analogan je procesu kreiraa


tablice konaqnih razlika iz prethodnog zadatka.
13
Neka su y = f (x ) zadate vrednosti funkcije y = f (x) u (neekvidistantnim)
qvorovima interpolacije x , i = 0, n. Neka je L (x) Lagranev interpolacioni
i i

polinom n-tog stepena, dakle, L(x ) = y , i = 0, n.


i n

Polinom i i

L (x) = L (x ) + L [x , x ](x − x ) + L [x , x , x ](x − x )(x − x ) + ...+


n n 0 n 0

0
1

1 n
0 n

0
0 1

1
2
+ L [x , x , ..., x ](x − x )(x − x ) · ... · (x − x ),
n
0
(6)
n−1
1

xto nazivamo prvi utnov interpolacioni polinom sa pode enim razlikama.


function y = vredfunk(x)
% Poziv funkcije: y = vredfunk(x)
% Ulazne vrednosti: x - tacka u kojoj se zeli dobiti vrednost funkcije
% date tablicom u tablica.m, koriscenjem Njutnovog
% interpolacionog polinoma sa podeljenim razlikama
% Izlazne vrednosti: y - vrednost Njutnovog interpolacionog polinoma sa
% podeljenin razlikama u tacki x
%
% Pomocne funkcije i fajlovi:
% tablicaCheck() - provera ispunjenost postavljenih
% uslova za primenu metode
% tablica.m - sadrzi tablicu funkcije ( vektori X i Y)

if ~tablicaCheck()
error('Nisu ispunjeni uslovi zadatka.')
end

tablica;
n = length(X);
% matrica u koju cemo upisivati podeljene razlike po kolonama
tabp = zeros(n-1);
% pomocna promenljiva
pod = Y;
for i = 1:n-1
pod = diff(pod)./(X(i+1:n)-X(1:n-i));
tabp(1:n-i,i) = pod;
end
disp('Tablica podeljenih razlika u formatu: X, Y, podeljene razlike')
disp([X',Y',[tabp;zeros(1,n-1)]])

% izracunavamo vrednost interpolacionog polinoma


y = Y(1);
p = 1;
for i = 1:n-1
p = p * (x-X(i));
y = y + tabp(1,i)*p;
end

% Dodatak: odredjivanje koeficijenata polinoma


% y = Y(1);
% p = 1;
% for i = 1:n-1
% p = conv(p,[1,-X(i)]);

14
% y = [0,y] + tabp(1,i)*p;
% end
% disp('Koeficijenti polinoma su:')
% disp(y)
% y = polyval(y,x); %vrednost polinoma

5. Neka su u komandnom fajlu podaci.m dati funkcija f i vektor X koji sadri samo
celobrojne vrednosti.
Rexee: Zadajmo M-fajl podaci.m na sledei naqin:
% podaci.m
X = [1,2,3,5,6,7,8,10];
f = @(x) sqrt(x);

ˆ Napisati M-fajl tablica.m sa funkcijom [X1, Y1] = tablica() koja formira


tablicu gde se vektor X1 sastoji samo od parnih vrednosti vektora X, a vektor Y1
su vrednosti eksplicitno zadate funkcije f u qvorovima vektora X1 zaokrueni
na 3 decimale.
Rexee: Komandom mod(X,2) == 0 dobijamo vektor nula i jedinica, gde su je-
dinice na parnim vrednostima vektora X. Dakle, pristupae samo parnim vred-
nostima vektora X vrximo komandom X(mod(X,2) == 0).
Zaokruivae u M AT LAB-u se vrxi funkcijom round(X) koja zaokruuje el-
emente vektora X na najblie cele brojeve. Naalost, ne postoji direktna
mogunost zaokruivaa realnih brojeva na k decimala. Ovo moemo postii
tako xto emo prvo sve elemente vektora X pomnoiti vrednoxu 10 , zatim k

primeniti funkciju round(...) na dobijeni vektor, i na kraju podeliti dobi-


jeni vektor vrednoxu 10 . k

function [X1,Y1] = tablica()


% Poziv funkcije: [X1,Y1] = tablica()
% Ulazne vrednosti: ~ (nema)
% Izlazne vrednosti: X1 - vektor cvorova, formiran od parnih vrednosti
% vektora X
% Y1 - vrednost funkcije f u cvorovima vektora X1,
% zaokruzene na 3 decimale
%
% Pomocni fajl: podaci.m u kome se nalazi vektor X i eksplicitno zadata
% funkcija f

podaci;

X1 = X(mod(X,2) == 0); % ili I=find(mod(X,2)==0); X1=X(I);


Y1 = round(f(X1) * 10^3)/10^3;

15
ˆ Napisati M-fajl inverz.m sa funkcijom inverz(y) koja za zadatu vrednost y
inverznom interpolacijom priblino odreuje x za koje je f (x) = y. (*Tablica
nee biti ekvidistantna, pa koristimo Lagranov interpolacioni polinom).
Rexee: Neka su y = f (x ) zadate vrednosti funkcije y = f (x) u qvorovima
interpolacije x , i = 0, n. Postupak nalaea argumenta x koji odgovara zada-
i i

toj vrednosti y funkcije y = f (x), koja nije data u tablici, naziva se inverzna
i

ili obratna interpolacija. Postoji vixe naqina za rexavae ovog zadatka.


Jedan od naqina, koji emo prikazati u ovom zadatku, jeste da vektor vrednosti
funkcije f (x) posmatramo kao qvorove interpolacije i onda interpoliramo po
zadatoj vrednosti y. Ovo moe da se iskoristi ako se ne interpolira metodama
koje zahtevaju da qvorovi budu ekvidistantni.
function [x] = inverz(y)
% Poziv funkcije: z = inverz(y)
% Ulazne vrednosti: y - vrednost funkcije za koju treba odrediti x takvo
% da je f(x)=y, koriscenjem inverzne interpolacije
% koriscenjem Lagranzovog interpolacionog polinoma
% Izlazne vrednosti: x - tacka za koju je f(x)=y
%
% Pomocne funkcije: [X,Y]=tablica() - daje tablicu funkcije

[X1,Y1] = tablica();

% Invertujemo tablicu kako bismo mogli primeniti metodu inverzne


% interpolacije koristeci Lagranzov interpolacioni polinom

% sortiramo vektor Y1 u rastuci poredak i upisujemo u X,


[X,I] = sort(Y1);
% vektor I sadrzi raspored indeksa elemenata vektora Y1 u novom vektoru X;
% Napomena: Sortiranje nije neophodno za Lagranzov interpolacioni polinom,
% jer za njega nije neophodno da cvorovi budu sortirani u rastucem poretku

% vektor X1 moramo "presloziti" na isti nacin kao i Y1


Y = X1(I);

% U istom fajlu cemo definisati Lagranzov interpolacioni polinom;


% Implementiramo ga na standardan nacin.
% Primenjujemo interpolaciju na invertovanu tablicu
x = lagr(y, X, Y);

function [y] = lagr(x, X, Y)

n = length(X);

y = 0;
for i = 1:n
p = 1;
for k = 1:n
if k ~= i
p = p * (x-X(k))/(X(i)-X(k));

16
end
end
y = y + Y(i)*p;
end

6. Neka je funkcija f zadata eksplicitno komadnim M-fajlom f unkcija.m.


Rexee: Zadajmo M-fajl f unkcija.m na sledei naqin:
% funkcija.m
f = @(x) (x+1).^3.*exp(x/100);

ˆ Napisati M-fajl tablica.m sa funkcijom [X, Y] = tablica(a, b, n) koja formira


ekvidistantnu tabelu funkcije f na segmentu [a, b] sa n qvorova.
Rexee: Ovo smo ve pokazali, tako da emo samo prikazati kôd.
function [X,Y] = tablica(a, b, n)
% Poziv funkcije: [X,Y] = tablica(a, b, n)
% Ulazne vrednosti: (a,b) - interval
% n - broj cvorova
% Izlazne vrednosti: X - cvorovi
% Y - vrednosti funkcije u cvorovima vektora X
%
% Pomocne funkcije: tablica() - ucitava vektor X i funkciju f

funkcija;
X = linspace(a, b, n);
Y = f(X);
ˆ Napisati M-fajl promenaZnaka.m sa funkcijom [c, d] = promenaZnaka(a,
b, n) koja na osnovu nizova X i Y dobijenih pozivaem funkcije tablica(a,
b, n) pronalazi i kao rezultat vraa prvi interval [x , x ] u kome funkcija
mea znak (c = x , d = x ). Pretpostav a se da takav interval postoji.
i i+1
i i+1

Rexee: Pretraivae vektora po nekom uslovu se radi funkcijom find() koja


vraa indekse elemenata vektora koji zadovo avaju zadati uslov. Kao drugi ar-
gument se moe dodati ukupan broj elemenata koji elimo da vrati find().
Ispitaemo da vektor V mea znak tako xto emo pomnoiti svake dve susedne
vrednosti vektora i ukoliko za neko i dobijemo V · V < 0, onda znamo da na
segmentu [V , V ] vektor mea znak.
i i+1
i i+1

function [c,d] = promenaZnaka(a, b, n)


% Poziv funkcije: [c,d] = promenaZnaka(a, b, n)
% Ulazne vrednosti: (a,b) - interval
% n - broj cvorova
% Izlazne vrednosti: (c,d) - susedni cvorovi vektora X u kojima funkcija menja znak
%

17
% Pomocna funkcija: [X,Y] = tablica(a,b,n) - tabeliranje funkcije

[X,Y] = tablica(a, b, n);

k = find(Y(1:end-1) .* Y(2:end) <= 0, 1);

c = X(k);
d = X(k+1);

ˆ Napisati M-fajl nula.m sa funkcijom nula(a, b, n) koja metodom inverzne in-


terpolacije priblino odreuje nulu funkcije f na intervalu [c, d], koristei
utnov interpolacioni polinom zak uqno sa konaqnim razlikama reda 3.
Kriterijum zaustav aa iterativnog niza: |q − q | ≤ 10 , i = 2, ....
II
−4
i i−1

Rexee: Pokazaemo inverznu interpolaciju iterativnom metodom. Pretpostavimo


da je funkcija y = f (x) monotona i da se zadata vrednost y nalazi izmeu y

i y . Zameujui y u drugom utnovom interpolacionom polinomu dobija se


n

n−1

∆yn−1 ∆2 yn−2
y ∗ = yn + q+ q(q + 1) + ...+
1! 2!
∆n y0
+ q(q + 1) · ... · (q + n − 1),
n!
odakle je
y ∗ − yn
 2
∆n y0

1 ∆ yn−2
q= − q(q + 1) + ... + q(q + 1) · ... · (q + n − 1) ,
∆yn−1 ∆yn−1 2! n!

xto moemo zapisati na sledei naqin


q = F (q),

gde je
y ∗ − yn
 2
∆n y0

1 ∆ yn−2
F (q) = − q(q + 1) + ... + q(q + 1) · ... · (q + n − 1) .
∆yn−1 ∆yn−1 2! n!

Sada se formira niz uzastopnih aproksimacija (iteracija): q (0)


,
, q (1) , ..., q (m) , ...
uzimajui za prvu, poqetnu aproksimaciju
y ∗ − yn
q (0) = ,
∆yn−1
i primeujui metodu iteracije
q (m+1) = F q (m) , m = 0, 1, ...


18
function [y] = nula(a, b, n)
% Poziv funkcije: y = nula(a,b,n)
% Ulazni argumenti: (a,b) - interval
% n - broj cvorova
% Izlazni argumenti: y - nula funkcije odredjena inverznom interpolacijom,
% koristeci 2. Njutnov interpolacioni polinom sa
% konacnim razlikama stepena 3, na segmentu [c,d];
% kriterijum zaustavljanja iterativnog niza je
% |q_i-q_(i-1)| <=10^(-4), i=2,3,...
%
% Pomocne funkcije: [c,d] = promenaZnaka(a,b,n) - vraca segment na kome
% funkcija menja znak
% [X,Y] = tablica(a,b,n) - tabeliranje funkcije

[c,d] = promenaZnaka(a, b, n);

if isempty([c,d])
error('Funkcija ne menja znak.')
end

[X,Y] = tablica(c,d,4);
kon = Y;
% Potrebne su nam konacne razlike do reda 3
tabk = zeros(3);
for i = 1:3
kon = diff(kon);
tabk(1:4-i,i) = kon;
end
disp([X', Y', [tabk;zeros(1,3)]])

% Nulu racunamo pomocu formule:


% q = (Y(4) + tabk(2,2)*q*(q+1)/factorial(2) +
% + tabk(2,2)*q*(q+1)*(q+2)/factorial(3)) / (-1*tabk(3,1))
fi = @(q) (Y(4) + tabk(2,2)*q*(q+1)/factorial(2) + ...
tabk(1,3)*q*(q+1)*(q+2)/factorial(3)) / (-1*tabk(3,1));

% Formiramo iterativni niz


q0 = 0;
q1 = fi(q0);
Q = [q0,q1];
while abs(q0-q1) > 10^(-4)
q0 = q1;
q1 = fi(q0);
Q = [Q, q1];
end
disp(Q);
y = X(4) + q1*(X(2) - X(1));

19
2 Diferencirae
7. Neka je funkcija f zadata tabliqno M-fajlom tablica.m koji generixe dva niza
X = [x , x , ..., x ] i Y = [y , y , ..., y ] (od kojih je prvi strogo rastui) za tu tabliqno
zadatu funkciju. Tablica ne mora biti ekvidistantna.
1 2 n 1 2 n

Rexee: Zadajmo M-fajl tablica.m na sledei naqin:


% tablica.m
X = [-2,-1,1,2,3,5]/10;
Y = (X.^2 - X/2);

ˆ Napisati M-fajl izvod.m sa funkcijom [X, Y, Yi] = izvod() u kom se na os-


novu prethodne tablice formira tablica prvog izvoda funkcije f u taqkama
x , x , ..., x
2 3 n−1 korixeem sledee formule:
f (xi+1 ) − f (xi−1 )
f 0 (xi ) = ,
xi+1 − xi−1

gde je Y i = [f (x ), f (x ), ..., f (x )].


0
2
0
3
0
n−1

Rexee: Direktnim kodiraem prethodne formule dobijamo rexee.


function [X, Y, Yi] = izvod()
% Poziv funkcije: [X, Y, Yi] = izvod()
% Ulazni argumenti: (~) - nema
% Izlazni argumenti: X - cvorovi funkcije u tablici
% Y - vrednosti funkcije u cvorovima
% Yi - tablica prvog izvoda funkcije f u cvorovima
%
% Pomocne funkcije: tablica - sadrzi vektore X i Y

tablica;
n = length(X);
for i = 1:n-2
Yi(i) = (Y(i+2)-Y(i))/(X(i+2)-X(i));
end
% Moze i krace:
% tablica;
% Yi=(Y(3:end)-Y(1:end-2))./(X(3:end)-X(1:end-2));

ˆ Napisati M-fajl vredizvod.m sa funkcijom vredizvod(x) koja za uneti argu-


ment x vraa priblinu vrednost prvog izvoda funkcije f izraqunatu korix-
eem utnovog interpolacionog polinoma sa pode enim razlikama konstru-
sanog na osnovu svih vrednosti iz tablice iz fajla izvod.m.
Rexee:
20
function V = vredizvod(x)
% Poziv funkcije: V = vredizvod(x)
% Ulazni argumenti: x - vrednost u kojoj priblizno racunamo prvi izvod
% Izlazni argumenti: V - pribliznu vrednost prvog izvoda funkcije f
% izracunatu koriscenjem Njutnovog interpolacionog
% polinoma sa podeljenim razlikama
%
% Pomocne funkcije: [X,Y,Yi] = izvod() - sadrzi podatke na osnovu kojih
% konstruisemo trazeni interpolacioni polinom

[X,Y,Yi] = izvod();
n = length(Yi);
tab = zeros(n-1);
pod = Yi;
X1 = X(2:end-1);
for i=1:n-1
pod = diff(pod)./(X1(i+1:n)-X1(1:n-i));
tab(1:n-i, i) = pod;
end

disp([X1', Yi', [tab;zeros(1, n-1)]]);

s = Yi(1);
p = 1;
for i = 1:n-1
p = p*(x-X1(i));
s = s + p*tab(1, i);
end

V = s;

ˆ Napisati M-fajl nula.m sa funkcijom nula() koja metodom inverzne interpo-


lacije pribl zno odreuje i vraa jednu nulu prvog izvoda funkcije f korix-
eem utnovog interpolacionog polinoma sa pode enim razlikama (pret-
postavka je da je prvi izvod monotona funkcija).
Rexee:
function x = nula()
% Poziv funkcije: x = nula()
% Ulazni argumenti: (~) - nema
% Izlazni argumenti: x - priblizna vrednost nule prvog izvoda funkcije f
%
% Pomocne funkcije: [X,Y,I] = izvod() - sadrzi tablice funkcije i prvog
% izvoda funkcije

[X, Y, I] = izvod();
y = 0;
% Savet je da se prvo sortiraju vrednosti novih cvorova
% u rastucem poretku pre pravljenja tablice podeljenih razlika,
% jer iako teorijski moramo dobiti istu vrednost, racunska greska
% koja nastaje prilikom odredjivanja podeljenih razlika moze
% dovesti do toga da se rezultati razlikuju.

21
[X1, ind] = sort(I);
Y1 = X(2:end-1);
Y1 = Y1(ind);
n = length(Y1);
tab = zeros(n-1);
pod = Y1;
for i = 1:n-1
pod = diff(pod)./(X1(i+1:n)-X1(1:n-i));
tab(1:n-i, i) = pod;
end

disp([X1', Y1', [tab;zeros(1, n-1)]])


disp(y);

% Odredjivanje nule funkcije


s = Y1(1);
r = 1;
for i = 1:n-1
r = r * (y-X1(i));
s = s + (tab(1, i)*r);
end
x = s;

8. Neka je funkcija f zadata tabliqno M-fajlom tablica.m koji generixe dva niza
X = [x , x , ..., x ] i Y = [y , y , ..., y ] (od kojih je prvi strogo rastui) za tu tabliqno
zadatu funkciju. Tablica mora biti ekvidistantna (sa korakom h).
1 2 n 1 2 n

Rexee: Zadajmo M-fajl tablica.m na sledei naqin:


% tablica.m
X = linspace(1,2,6);
f = @(x) exp(x)-15*x;
Y = f(X);

ˆ Napisati M-fajl drugiizvod.m sa funkcijom [X, Y, Y2] = drugiizvod() u kom


se na osnovu prethodne tablice formira tablica drugog izvoda funkcije f u
taqkama x , x , ..., x korixeem sledee formule:
2 3 n−1

f (xi−1 ) − 2f (xi ) + f (xi+1 )


f 00 (x) = ,
h2
gde je Y = [f (x ), f (x ), ..., f (x )].
2
00
2
00
3
00
n−1

Rexee: Direktnim kodiraem prethodne formule dobijamo rexee.


function [X,Y,Y2] = drugiizvod()
% Poziv funkcije: [X,Y,Y2] = drugiizvod()
% Ulazni argumenti: (~) - nema
% Izlazni argumenti: X - cvorovi funkcije u tablici
% Y - vrednosti funkcije u cvorovima

22
% Y2 - tablica drugog izvoda funkcije f u cvorovima
%
% Pomocne funkcije: tablica - sadrzi vektore X i Y

tablica;
n = length(X);
h = X(2) - X(1);
for i = 1:n-2
Y2(i) = (Y(i) - 2*Y(i+1) + Y(i+2))/(h*h);
end

% Moze i krace:
% tablica;
% Y2 = diff(diff(Y))/h^2;

ˆ Napisati M-fajl vred2izvod.m sa funkcijom vred2izvod(x) koja za uneti argu-


ment x vraa priblinu vrednost drugog izvoda funkcije f izraqunatu korix-
eem I utnovog interpolacionog polinoma konstrusanog na osnovu svih vred-
nosti iz tablice iz fajla drugiizvod.m.
Rexee:
function V = vred2izvod(x)
% Poziv funkcije: V = vred2izvod(x)
% Ulazni argumenti: x - vrednost u kojoj priblizno racunamo prvi izvod
% Izlazni argumenti: V - priblizna vrednost drugog izvoda funkcije f
% izracunatu koriscenjem I Njutnovog interpolacionog
% polinoma
%
% Pomocne funkcije: [X,Y,Y2] = drugiizvod() - sadrzi podatke na osnovu
% kojih konstruisemo trazeni interpolacioni polinom

[X,Y,Y2] = drugiizvod();

n = length(Y2);
X2 = X(2:end-1);
kon = Y2;
tabk = zeros(n-1);
for i = 1:n-1
kon = diff(kon);
tabk(1:n-i, i) = kon;
end

disp([X2', Y2', [tabk;zeros(1, n-1)]]);

s = Y2(1);
p = 1;
q = (x - X2(1))/(X2(2)-X2(1));
for i = 1:n-1
p = p*(q-i+1);
s = s + tabk(1, i)*p/factorial(i);
end

23
V = s;

ˆ Napisati M-fajl nula.m sa funkcijom nula() koja metodom inverzne interpo-


lacije priblino odreuje nulu drugog izvoda funkcije f (pretpostavka je da je
drugi izvod monotona funkcija) koristei I utnov interpolacioni polinom
zak uqno sa konaqnim razlikama reda 3. Kriterijum zaustav aa iterativnog
niza: |q − q | ≤ 10 , i = 2, ....
i i−1
−4

Rexee:
function x = nula()
% Poziv funkcije: x = nula()
% Ulazni argumenti: (~) - nema
% Izlazni argumenti: x - priblizna vrednost nule drugog izvoda funkcije f
%
% Pomocne funkcije: [X,Y,Y2] = drugiizvod() - sadrzi tablice funkcije
% i prvog izvoda funkcije

[X,Y,Y2] = drugiizvod();

n = length(Y2);
X2 = X(2:end-1);
kon = Y2;
tabk = zeros(n-1);
for i = 1:n-1
kon = diff(kon);
tabk(1:n-i, i) = kon;
end

disp([X2', Y2', [tabk;zeros(1, n-1)]]);

g = @(q) ((-1)*(Y2(1) + (tabk(1,2)*q*(q-1)/2) + ...


(tabk(1,3)*q*(q-1)*(q-2)/6))/(tabk(1,1)));

h = X2(2) - X2(1);
q0 = g(0);
q1 = g(q0);
while abs(q0 - q1) > 10^(-4)
q0 = q1;
q1 = g(q0);
end

x = X2(1) + q1*h;

24
9. Neka je funkcija f zadata tabliqno M-fajlom tablica.m koji generixe dva niza
X = [x , x , ..., x ] i Y = [y , y , ..., y ] (od kojih je prvi strogo rastui) za tu tabliqno
zadatu funkciju. Tablica mora biti ekvidistantna (sa korakom h).
1 2 n 1 2 n

Rexee: Zadajmo M-fajl tablica.m na sledei naqin:


% tablica.m
X = linspace(2,4,10);
Y = exp(X);

ˆ Napisati M-fajl izvod1.m sa funkcijom izvod1(x) koja raquna vrednost prvog


izvoda tabelirane funkcije u taqki x koristei diferencirae I utnovog
interpolacionog polinoma zak uqno sa konaqnim razlikama reda 4.
Rexee:
function i1 = izvod1(x)

tablica;
n = length(Y);
kon = Y;
tabk = zeros(n-1);
for i = 1:n-1
kon = diff(kon);
tabk(1:n-i, i) = kon;
end

disp([X', Y', [tabk; zeros(1,n-1)]]);

h = X(2)-X(1);
q = (x-X(1))/h;

% 1. nacin:
% Direktno kodiramo prvi izvod Njutnovog interp. polinoma
i1 = (tabk(1,1) + (tabk(1,2)*(2*q-1)/2) + ...
(tabk(1,3)*(3*q*q-6*q+2)/6) + ...
(tabk(1,4)*(4*q*q*q-18*q*q+22*q-6)/24))/h;

% 2. nacin:
% Prvo nadjemo koeficijente Njutnovog interp. polinoma
P = Y(1);
Q = 1;
for i = 1:4
Q = conv(Q, [1,-i+1]);
P = [0,P] + Q*tabk(1,i)/factorial(i);
end
% Zatim, izracunamo izvod i vrednost polinoma u tacki
% koriscenjem ugradjenih funkcija za rad sa polinomima
i1 = polyval(polyder(P)/h, (x-X(1))/h);

25
ˆ Napisati M-fajl izvod2.m sa funkcijom izvod2(x) koja raquna vrednost dru-
gog izvoda tabelirane funkcije u taqki x koristei diferencirae I utnovog
interpolacionog polinoma zak uqno sa konaqnim razlikama reda 4.
Rexee:
function i2 = izvod2(x)

tablica;
n = length(Y);
kon = Y;
tabk = zeros(n-1);
for i = 1:n-1
kon = diff(kon);
tabk(1:n-i, i) = kon;
end

disp([X', Y', [tabk; zeros(1,n-1)]]);

h = X(2)-X(1);
q = (x-X(1))/h;
i2 = (tabk(1,2) + (tabk(1,3)*(6*q-6)/6) + ...
(tabk(1,4)*(12*q*q-36*q+22)/24))/(h*h);

26
3 Integracija
10. Neka je funkcija f zadata eksplicitno komandnim M-fajlom f unkcija.m.
Rexee: Zadajmo M-fajl f unkcija.m na sledei naqin.
% funkcija.m
f = @(x) x.^5;

ˆ Napisati M-fajl trapez.m sa funkcijom I = trapez(a, b) koja priblino


raquna i vraa vrednost odreenog integrala funkcije f (granice integracije
su a i b) korixeem uopxtene Trapezne kvadraturne formule sa n = 9 qvorova.
Rexee: Uopxtena trapezna kvadraturna formula glasi
Z b
h
f (x)dx ≈ [f0 + 2(f1 + f2 + ... + fn−1 ) + fn ] .
a 2
Kao xto znamo, u M AT LAB-u indeksirae poqie od 1, a ne od 0. Zbog toga,
prethodnu formulu kodiramo sa f = f(X(1)), f = f(X(2)), ..., f = f(X(n)),
odnosno, imamo n qvorova umesto n + 1. 0 1 n

function [I] = trapez(a,b)


% Poziv funkcije: I = trapez(a,b)
% Ulazne vrednosti: a,b - krajevi intervala integracije
% Izlazne vrednosti: I - priblizna vrednost odredjenog
% integrala funkcije f na intervalu
% (a,b) izracunatu sa 9 cvorova
% pomocu trapezne formule
%
% Pomocni M-fajl: funkcija.m - sadrzi eksplicitno zadatu
% funkciju f

funkcija;
X = linspace(a, b, 9);
h = X(2) - X(1); %ili h=(b-a)/8;

% Uvodimo funkciju F, da ne bismo imali previse zagrada


% u trapeznoj kvadraturnoj formuli, tj. umesto f(X(i))
% moci cemo da pisemo F(i).
F = f(X);

% Kodiramo formulu prema prethodnim uputstvima


I = h/2 * (F(1) + F(end) + 2*sum(F(2:end-1)));

27
ˆ Napisati M-fajl simps.m sa funkcijom I = simps(a, b) koja priblino raquna
i vraa vrednost odreenog integrala funkcije f (granice integracije su a i
b) korixeem uopxtene Simpsonove kvadraturne formule sa n = 9 qvorova.

Rexee: Uopxtena Simpsonova kvadraturna formula glasi


Z b
h
f (x)dx ≈ [f0 + fn + 2(f2 + f4 + ... + fn−2 ) + 4(f1 + f3 + ... + fn−1 )] .
a 3
Sliqno kao u prethodnom sluqaju, indekse u prethodnoj formuli emo u M AT LAB-
u kodirati nexto drugaqije. Naime, s obzirom da se u prethodnoj formuli bro-
jem 2 mnoi zbir svih parnih, a brojem 4 zbir svih neparnih elemenata (izuzev
prvog i posledeg), u M AT LAB-u emo brojem 2 mnoiti zbir svih neparnih,
a brojem 4 zbir svih parnih elemenata (izuzev prvog i posledeg).
function [I] = simps(a,b)
% Poziv funkcije: I = simps(a,b)
% Ulazne vrednosti: a,b - krajevi intervala integracije
% Izlazne vrednosti: I - priblizna vrednost odredjenog
% integrala funkcije f na intervalu
% (a,b) izracunatu sa 9 cvorova
% pomocu Simpsonove formule
%
% Pomocni M-fajl: funkcija.m - sadrzi eksplicitno zadatu
% funkciju f

funkcija;
X = linspace(a, b, 9);
h = X(2) - X(1); %ili h=(b-a)/8;
F = f(X);

I = h/3 * (F(1) + F(end) + 4*sum(F(2:2:end-1)) + 2*sum(F(3:2:end-1)));

ˆ Napisati M-fajl vredf unk.m sa funkcijom [X,R Y] = vredfunk(k, p) koja pri-


blino izraqunava vrednost funkcije I(x) = f (t)dt, kada se x kree od 2 do
x

k ∈ N, k ≥ 2, sa korakom 1. Ukoliko je p = 1 integrale raqunati koristei uop-


1

xtenu Simpsonovu kvadraturnu formulu (sa n = 9 qvorova), a u sluqaju kada je


p = 2 uopxtenu Trapeznu kvadraturnu formulu (sa n = 9 qvorova). Funkcija
vraa dva niza: X sa vrednostima x i Y sa izraqunatim vrednostima funkcije
I(x) u taqkama x .
i
i

Rexee:
function [X,Y] = vredfunk(k,p)
% Poziv funkcije: [X,Y] = vredfunk(k,p)
% Ulazne vrednosti: k - prirodan broj takav da je x=2,3,...,k
% p =1 indikator da se koristi Simpsonova kv.f. ili
% =2 indikator da se koristi trapezna kv.f.
% Izlazne vrednosti: X - vektor koji sadrzi razlicite krajeve

28
% intervala integracije x=2,3,...,k
% Y - vrednosti integrala na intervalima (1,X(1)),
% (1,X(2)),...,(1,X(end))
%
% Pomocne funkcije: simps(), trapez()

if k < 2
error('Prvi argument mora biti veci ili jednak od 2.')
end

X = 2:k;
% inicijaluzujemo Y sa bilo cim
Y = X;

for i = 1:k-1
if p == 1
Y(i) = simps(1, X(i));
elseif p == 2
Y(i) = trapez(1, X(i));
end
end

11. Neka je funkcija f zadata eksplicitno komandnim M-fajlom f unkcija.m.


Rexee: Zadajmo M-fajl f unkcija.m na sledei naqin.
% funkcija.m
f = @(x) exp(x.^2);

ˆ Napisati M-fajl integralt.m sa funkcijom [I, briter] = integralt(a, b, tol)


koja sa taqnoxu tol raquna i vraa vrednost odreenog integrala funkcije f
(granice integracije su a i b) korixeem uopxtene Trapezne kvadraturne for-
mule. Funkcija vraa vrednost integrala i broj iteracija.
Rexee: U iterativnom postupku kreemo od nekog broja qvorova (npr. od na-
jmaeg broja qvorova, a to je 2 za trapeznu formulu), raqunamo vrednost inte-
grala prema formuli, a zatim polovimo korak, dobijajui novi broj qvorova.
Ponovo raqunamo vrednost integrala. Postupak ponav amo dok grexka (u ovom
sluqaju, Rungeova ocena grexke) ne bude optimizovana nekim parametrom (u ovom
slucaju, to je parametar tol).
Rungeov princip ocene grexke iznosi
Ih − I2h
R(h) ≈ .
2k − 1
Za k = 2 imamo za trapeznu kvadraturnu formulu
Ih − I2h
R(h) ≈ .
3

29
function [I, briter] = integralt(a, b, tol)
% Poziv funkcije: [I, briter] = integralt(a, b, tol)
% Ulazne vrednosti: (a,b) - krajevi intervala integracije
% tol - tacnost sa kojim treba izracunati integral
% Izlazne vrednosti: I - priblizna vrednost integrala
% briter - broj iteracija
%
% Pomocni M-fajl: funkcija.m - sadrzi eksplicitni izraz funkcije f

funkcija;

% minimalan broj cvorova za trapeznu formulu je 2


h = b-a;
X = a:h:b;
F = f(X);

% opsta trapezna formula


I0 = h/2 * (F(1) + F(end) + 2*sum(F(2:end-1)));
% Posto smo uzeli da je broj cvorova jednak 2,
% onda je prethodna formula jednaka
% I0 = h/2 * (F(1) + F(end));

% polovimo korak
h = h/2;
X = a:h:b;
F = f(X);
I = h/2*(F(1)+F(end)+2*sum(F(2:end-1)));

% do sada smo imali 2 racunanja (I0, I)


briter = 2;

while abs(I0-I)/3 > tol % rungeova ocena greske


I0 = I;
h = h/2;
X = a:h:b;
F = f(X);
I = h/2 * (F(1) + F(end) + 2*sum(F(2:end-1)));
briter = briter+1;
end

ˆ Napisati M-fajl integrals.m sa funkcijom [I, briter] = integrals(a, b, tol)


koja sa taqnoxu tol raquna i vraa vrednost odreenog integrala funkcije f
(granice integracije su a i b) korixeem uopxtene Simpsonove kvadraturne
formule. Funkcija vraa vrednost integrala i broj iteracija.
Rexee: Minimalni broj qvorova za primenu Simpsonove kvadraturne for-
mule je 3. U Rungeovom principu ocene grexke, za k = 4 imamo za Simpsonovu
kvadraturnu formulu I −I h 2h
R(h) ≈ .
15

30
function [I, briter] = integrals(a, b, tol)
% Poziv funkcije: [I, briter] = integrals(a, b, tol)
% Ulazne vrednosti: (a,b) - krajevi intervala integracije
% tol - tacnost sa kojim treba izracunati integral
%
% Izlazne vrednosti: I - priblizna vrednost integrala
% briter - broj iteracija
%
% Pomocni M-fajl: funkcija.m - sadrzi eksplicitni izraz funckije f

funkcija;

% Korak pravimo tako da imamo 3 cvora,


% jer mora da ih bude neparan broj!
h = (b-a)/2;
X = a:h:b;
F = f(X);
I0 = h/3 * (F(1) + F(end) + 4*sum(F(2:2:end-1)) + 2*sum(F(3:2:end-1)));

% polovimo korak
h = h/2;
X = a:h:b;
F = f(X);
I = h/3 * (F(1) + F(end) + 4*sum(F(2:2:end-1)) + 2*sum(F(3:2:end-1)));

briter = 2;

while abs(I0-I)/15 > tol % rungeova ocena greske


I0 = I;
h = h/2;
X = a:h:b;
F = f(X);
I = h/3 * (F(1) + F(end) + 4*sum(F(2:2:end-1)) + 2*sum(F(3:2:end-1)));
briter = briter + 1;
end

ˆ Napisati M-fajl graf ik.m sa funkcijom grafik(a, b) koja prikazuje grafik


zavisnosti brzine konvergencije Simpsonove kvadraturne formule (plavo) i
Trapezne kvadraturne formule (crveno), za razliqite tolerancije
(tol = 10 , 10 , ..., 10 ).
−1 −2 −6

Rexee:
function [] = grafik(a,b)
% Poziv funkcije: grafik(a,b)
% Ulazne vrednosti: (a,b) - krajevi intervala integracije funkcije f
% Izlazne vrednosti: (~) - nema (osim grafika)
%
% Pomocni M-fajl: funkcija.m

tol = 10.^(-1:-1:-6);
% inicijalizujemo brojeve iteracija sa bilo cim
brt = tol;

31
brs = tol;

for i = 1:6
% vrednosti integrala nam ne trebaju, pa cemo ih upisati u bilo koju
% promenljivu, npr. I
[I, brt(i)] = integralt(a, b, tol(i));
[I, brs(i)] = integrals(a, b, tol(i));
end

% Iscrtavamo grafike
% x-osa: tol (za oba grafika)
% y-osa: brt (za crveni grafik), brs (za plavi grafik)
plot(tol, brt, 'r', tol, brs, 'b')
% Dodajemo legendu:
% prvi argument je prvi grafik koji se iscrtava (Trapez),
% drugi argument je drugi grafik koji se iscrtava (Simpson)
legend('trapezna','Simpsonova')

% Dodatno: oznacavanje osa


xlabel('tolerancije')
ylabel('broj iteracija')

Rezultat poziva graf ik(0, 1).

32
12. Neka je funkcija f (koja ne mora biti (samo) pozitivna) zadata eksplicitno funkci-
jskim M-fajlom f unkcija.m.
Rexee: Zadajmo M-fajl f unkcija.m na sledei naqin.
% funkcija.m
f = @(x) x.^5;

ˆ Napisati M-fajl Runge.m sa funkcijom Runge(S1, S2) koja vraa vrednost


Rungeove ocene grexke uopxtene Simpsonove kvadraturne formule, ako su S1 i
S2 ene vrednosti od kojih je jedna izraqunata sa dvostruko maim korakom u
odnosu na drugu.
function [y] = Runge(S1, S2)
% Poziv funkcije: y = Runge(S1, S2)
% Ulazne vrednosti: (S1,S2) - vrednosti uopstene Simpsonove
% kvadraturne formule
% Izlazne vrednosti: y - Rungeova ocena greske
y = abs(S1 - S2) / 15;

ˆ Napisati M-fajl zapremina.m sa funkcijom zapremina(a, b, tol) koja ko-


ristei uopxtenu Simpsonovu kvadraturnu formulu vraa zapreminu tela nasta-
log obrtaem figure ograniqene pravama y = 0, x = a, x = b i funkcijom f oko
ose Ox izraqunatu sa taqnoxu tol. (Za ocenu taqnosti koristiti funkciju
Runge.)

Rexee: Ako je telo T dobijeno rotacijom krive y = f (x), a ≤ x ≤ b oko x-ose,


egova zapremina jednaka je
Z b
V (T ) = π(f (x))2 dx.
a

function I = zapremina(a, b, tol)


% Poziv funkcije: I = zapremina(a, b, tol)
% Ulazne vrednosti: (a,b) - krajevi intervala integracije
% tol - tacnost sa kojim treba izracunati integral
% Izlazne vrednosti: I - priblizna vrednost integrala
%
% Pomocni M-fajl: funkcija.m - sadrzi eksplicitni izraz funkcije f

funkcija;

% Zapremina odgovarajuce figure


f = @(x) pi*f(x).^2;

% Potreban nam je neparan broj cvorova! (Npr. 3)


h = (b-a)/2;

33
X = a:h:b;
F = f(X);
I1 = h/3 * (F(1) + F(end) + 4*sum(F(2:2:end-1)) + 2*sum(F(3:2:end-1)));

% Polovimo korak
h = h/2;
X = a:h:b;
F = f(X);
I2 = h/3 * (F(1) + F(end) + 4*sum(F(2:2:end-1)) + 2*sum(F(3:2:end-1)));

briter = 2;

% Rungeova ocena greske


while Runge(I1,I2) > tol
I1 = I2;
h = h/2;
X = a:h:b;
F = f(X);
I2 = h/3 * (F(1) + F(end) + 4*sum(F(2:2:end-1)) + 2*sum(F(3:2:end-1)));
briter = briter+1;
end

I = I2;

13. ˆ Formirati M-fajl integral.m sa funkcijom integral(f, a, b) koja raquna i


vraa vrednost f (x)dx. Dozvo eno je korixee ugraene M AT LAB funkcije
R b

za izraqunavae integrala.
a

Rexee:
function I = integral(f, a, b)
% Poziv funkcije: I = integral(f, a, b)
% Ulazne vrednosti: (a,b) - krajevi intervala integracije
% Izlazne vrednosti: I - vrednost integrala dobijena koriscenjem
% ugradjene funkcije quad()

I = quad(f, a, b);

ˆ Formirati M-fajl sistem.m sa funkcijom sistem(d, t, n) koja formira sis-


tem linearnih jednaqina koji se dobija prilikom nalaea koeficijenata kvadraturne
formule oblika
(7)
d n  
i·d
Z X
t(x)f (x)dx ≈ A ·f
i
0 i=0
n

koja treba da je taqna za polinome xto je mogue veeg stepena. Funkcija treba
da vraa matricu sistema i vektor leve strane.

34
Rexee: Sistem 7 u raspisanom obliku glasi
Z d
t(x)dx = A0 + A1 + ... + An
0
Z d
d nd
t(x)xdx = A0 · 0 + A1 · + ... + An ·
..
0 n n

Z d  n  n
n n d nd
t(x)x dx = A0 · 0 + A1 · + ... + An ·
0 n n

Sada, uz pa ivo voee raquna o indeksima, nije texko kodirati sistem. U
ovom sluqaju, matricu sistema qine koeficijenti uz qlanove A , i = 0, n, a vek-
tor leve strane qini vektor vrednosti integrala sa leve strane. i

function [M, v] = sistem(d, t, n)


% Poziv funkcije: [M, v] = sistem(d, t, n)
% Ulazne vrednosti: d, n - parametri zadatog sistema
% t - tezisna funkcija
% Izlazne vrednosti: M - matrica sistema
% v - vektor vrednosti integrala

M = zeros(n+1);
v = zeros(1, n+1);

for i = 1:(n+1)
for j = 1:(n+1)
M(i,j) = ((j-1)*d/n)^(i-1);
end
p = @(x) t(x).*x.^(i-1);
v(i) = integral(p, 0, d);
end

v = v' ;
ˆ Formirati M-fajl koef icijenti.m sa funkcijom koeficijenti(d, t, n) koja
odreuje koeficijente A prethodne kvadraturne formule. Dozvo eno je korix-
ee operatora \ za rexavae sistema.i

Rexee:
function rez = koeficijenti(d, t, n)
% Poziv funkcije: rez = koeficijenti(d, t, n)
% Ulazne vrednosti: d, n - parametri zadatog sistema
% t - tezisna funkcija
% Izlazne vrednosti: rez - resenje zadatog sistema
%
% Pomocni M-fajl: sistem.h - konstruise vrednosti M i v

35
[M, v] = sistem(d, t, n);
rez = M\v;

14. ˆ Napisati M-fajl legendre poly.m sa funkcijom L = legendre poly(n, a, b)


koja formira i vraa niz svih Leandrovih polinoma do stepena n na inter-
valu [a, b]. Nacrtati grafik svih formiranih Leandrovih polinoma.
Rexee: Leandrov polinom n-tog stepena je
1 dn  2 n

Ln (x) = (x − 1) , n = 0, 1, ...
2n n! dxn
Tako imamo:
L0 (x) = 1,
L1 (x) = x,
1
L2 (x) = (3x2 − 1),
2
1
L3 (x) = (5x3 − 3x),
.. 2

Za Leandrove polinome vai rekurentna formula


(n + 1)Ln+1 (x) − (2n + 1)xLn (x) + nLn (x) = 0, n = 1, 2, ...
function L = legendre_poly(n)
% Poziv funkcije: L = legendre_poly(n)
% Ulazne vrednosti: n - stepen Lezandrovog polinoma
%
% Izlazne vrednosti: L - matrica koja u vrstama sadrzi redom koeficijente
% Lezandrovih polinoma stepena 0, 1,..., n

% Koristimo rekurentnu formulu:


% Pocetni uslovi: L_0(x) = 1, L_1(x) = x
% (n+1)L_(n+1)(x) = (2n+1)*x*L_(n)(x) - nL_(n-1)(x), za n=1,2,...

L = zeros(n+1);
% U prvu vrstu upisujemo koeficijente polinoma nultog stepena
L(1,n+1) = 1;
% U drugu vrstu upisujemo koeficijente polinoma prvog stepena
L(2,n) = 1;

% Popunjavamo ostale vrste po rekurentnoj formuli.


% Naredba (pomeranje za jedno mesto u levo svih koeficijenata polinoma) [L(i,2:end),0]
% ekvivalentna je mnozenju x*L_(i)(x);
% tj. odsecamo prvu nulu sa leve strane (L(i,2:end)),
% a zatim dodajemo jednu sa desne strane [L(i,2:end),0];
for i = 2:n
L(i+1, :) = ((2*i-1)*[L(i,2:end), 0] - (i-1)*L(i-1, :))/i;
end

36
% Iscrtavanje grafika

% Pocetna slova boja koje imamo u MATLAB-u


boje = 'cmykrgb';
% Pravimo gust vektor za crtanje grafika
X = linspace(-1,1);

plot(X, polyval(L(1,:),X), boje(1))


hold on
for i = 2:n+1
plot(X, polyval(L(i,:),X), boje(mod(i,7)+1))
end
hold off

Grafiqki rezultat poziva L = legendre poly(4).


ˆ Napisati M-fajl Cebisev poly.m sa funkcijom C = Cebisev poly(n, a, b) koja
formira i vraca niz svih Qebixev evih polinoma do stepena n na intervalu
[a, b]. Nacrtati grafik svih formiranih Qebixev evih polinoma.

Rexee: Qebixev ev polinom T (x) definixe se na sledei naqin:


n

T0 (x) = 1, T1 (x) = x, Tn+1 (x) = 2x · Tn (x) − Tn−1 (x), n = 1, 2, ...

37
Navedimo nekoliko prvih Qebixev evih polinoma:
T0 (x) = 1,
T1 (x) = x,
T2 (x) = 2x2 − 1,
T3 (x) = 4x3 − 3x,
..
Postoje i drugi naqini zadavaa Qebixev evog polinoma, a jedan od ih je
1 h √ n  √ n i
Tn (x) = 2 2
x+ x −1 + x− x −1 , n = 1, 2, ...
2
function C = Cebisev_poly(n)
% Poziv funkcije: C = Cebisev_poly(n)
% Ulazne vrednosti: n - stepen Cebisevljevog polinoma
% Izlazne vrednosti: C - matrica koja u vrstama sadrzi redom koeficijente
% Cebisevljevih polinoma stepena 0, 1, ..., n

% Koristimo rekurentnu formulu:


% Pocetni uslovi: C_0(x)=1, C_1(x)=x
% C_(n+1)(x) = 2*x*C_(n)(x) - C_(n-1)(x), za n=1,2,...

C = zeros(n+1);
% U prvu vrstu upisujemo koeficijente polinoma nultog stepena
C(1, n+1) = 1;
% U drugu vrstu upisujemo koeficijente polinoma prvog stepena
C(2, n) = 1;
% Popunjavamo ostale vrste po rekurentnoj formuli.
% Naredba (pomeranje za jedno mesto u levo svih koeficijenata polinoma) [C(i,2:end),0]
% ekvivalentna je mnozenju x*C_(i)(x);
% tj. odsecamo prvu nulu sa leve strane (C(i,2:end)),
% a zatim dodajemo jednu sa desne strane [C(i,2:end),0];
for i = 2:n
C(i+1,:) = 2*[C(i,2:end),0] - C(i-1,:);
end

% Iscrtavanje grafika
boje = 'cmykrgb';
X = linspace(-1,1);

plot(X, polyval(C(1,:),X), boje(1))


hold on
for i = 2:n+1
plot(X, polyval(C(i,:),X), boje(mod(i,7)+1))
end
hold off

38
Grafiqki rezultat poziva C = Cebisev poly(4).
ˆ Napisati M-fajl integrali.m sa funkcijom integrali(f, a, b) koja korix-
eem ugraene M AT LAB funkcije quad() raquna i xtampa vrednosti sledeih
integrala:
Z b Z b Z Z b b
f (x)dx, f (x) · sin(x)dx, f (x) · L5 (x)dx, L5 (x) · L3 (x)dx,

gde je L (x) Leandrov polinom stepena i. Prosleena funkcija f moe biti


a a a a

sloena funkcija.
i

Rexee:
function [] = integrali(f, a, b)
% Poziv funkcije: integrali(f, a, b)
% Ulazne vrednosti: f - funkcija cije integrale pronalazimo
% (a,b) - krajevi intervala integracije
% Izlazne vrednosti: (~) - nema
%
% Pomocni M-fajl: legendre_poly.m - vraca korficijente Lezandrovih
% polinoma do stepena n

% Ako je f prosledjeno kao string:


% f = inline(f)

% Racunamo vrednosti integrala:


I1 = quad(f, a, b)
I2 = quad(@(x) f(x).*sin(x), a, b)
L = legendre_poly(5);
I3 = quad(@(x) f(x).*polyval(L(6,:),x), a, b)
I4 = quad(@(x) polyval(L(6,:),x).*polyval(L(4,:),x), a, b)

39
15. ˆ Napisati M-fajl legendre.m sa funkcijom L = legendre(n) koja kao rezultat
vraa Leandrov polinom L stepena n na intervalu [−1, 1].
Rexee:
function l = legendre(n)
% Poziv funkcije: l = legendre(n)
% Ulazne vrednosti: n - stepen
% Izlazne vrednosti: l - Lezandrov polinom stepena n
% na invervalu [-1,1]

L = zeros(n+1);

L(1, n+1) = 1;
L(2, n) = 1;
for i = 2:n
L(i+1,:) = (2*i-1)/i*[L(i,2:end),0] - (i-1)/i*L(i-1,:);
end

l = L(n+1, :);

ˆ Napisati M-fajl polinom.m sa funkcijom P = polinom(n, m) koja kao rezultat


vraa polinom P dobijen preko formule:
dm
P (x) = (1 − x2 ) Ln (x),
dxm
gde je L (x) Leandrov polinom stepena n za −1 ≤ x ≤ 1.
n

Rexee:
function [P] = polinom(n, m)
% Poziv funkcije: P = polinom(n, m)
% Ulazne vrednosti: n - stepen Lezandrovog polinoma
% m - stepen izvoda
% Izlazne vrednosti: P - polinom izracunat preko zadate formule
%
% Pomocni M-fajl: legendre.m - racuna odgovarajuci Lezandrov polinom

L = legendre(n);

% m-ti izvod polinoma L


for i = 1:m
L = polyder(L);
end

P = conv([-1,0,1], L);

40
ˆ Napisati M-fajl integral.m sa funkcijom I = integral(n, m, tol) koja sa
taqnoxu tol priblino odreujeZi kao rezultat vraa vrednost integrala
1
P (x)ex dx.

Integral raqunati korixeem uopxtene Simpsonove formule. Polinom P (x)


−1

je polinom dobijen rexeem prethodne taqke.


Rexee:
function [I] = integral(n, m, tol)
% Poziv funkcije: I = integral(n, m, tol)
% Ulazne vrednosti: n - stepen Lezandrovog polinoma
% m - stepen izvoda
% tol - tacnost
% Izlazne vrednosti: I - vrednost zadatog integrala
%
% Pomocni M-fajl: polinom.m - racuna odgovarajuci polinom P(x)

% Granice integracije
a = -1;
b = 1;

% Pravljenje koraka i izvodjenje prve iteracije


h = (b-a)/2;
X = a:h:b;
P = polinom(n,m);
f = @(x) polyval(P,x).*exp(x);
Y = f(X);
S1 = (Y(1) + Y(end) + 4*sum(Y(2:2:end-1)) + 2*sum(Y(3:2:end-1)))*h/3;

% Polovljenje koraka (izvodjenje druge iteracije)


h = h/2;
X = a:h:b;
Y = f(X);
S2 = (Y(1) + Y(end) + 4*sum(Y(2:2:end-1)) + 2*sum(Y(3:2:end-1)))*h/3;

briter = 2;

% U numerickim proracunima, cesto se broj iteracija ogranicava,


% da bi se izbegla mogucnost beskonacne petlje prilikom niskih
% tolerancija (otuda uslov briter < 100)
while abs(S1 - S2)/15 > tol && briter < 100
S1 = S2;
h = h/2;
X = a:h:b;
Y = f(X);
S2 = (Y(1) + Y(end) + 4*sum(Y(2:2:end-1)) + 2*sum(Y(3:2:end-1)))*h/3;
briter = briter + 1;
end

I = S2;

41

You might also like