You are on page 1of 18

PODSETNIK SA CASA

=================

*) Aproksimacija funkcija podrazumeva zamenu date funkcije f nekom


drugom funkcijom g koja joj je u izvesnom smislu bliska. Funkcija g
bira se iz nekog skupa funkcija G takvih da imaju neke pozeljne
osobine (npr, skup polinoma, skup racionalnih funkcija, skup
trigonometrijskih polinoma, i sl.).

*) Postoji vise razloga zasto je potrebno vrsiti aproksimaciju.


Ponekad nam je vrednost funkcije f poznata samo u nekim tackama, a
ne na celom domenu funkcije. Tada je potrebno pronaci neku funkciju
koja je bliska funkciji f, a koja ce nam biti poznata u svim
tackama nekog intervala. Sa druge strane, ponekad je funkciju f
moguce izracunati u svim tackama, ali je funkcija f zadata isuvise
komplikovanim izrazom, pa je sa njom tesko baratati. Zbog toga je
zgodno zameniti je nekom jednostavnijom funkcijom koja joj je na
neki nacin bliska.

*)
bliskost se definise tako da zahtevamo da funkcije imaju jednake vrednosti u
datom konacnom skupu tacaka, tada se takva aproksimacija zove INTERPOLACIJA,
a funkciju g zovemo INTERPOLACIONOM FUNKCIJOM

*)
Najjednostavniji vid interpolacije je interpolacija polinomima. Ako nam je
dato n + 1 tacaka u kojima znamo vrednost funkcije f, tada se moze
pokazati da postoji jedinstven polinom P_n stepena n koji se u svim
tim tackama poklapa sa funkcijom f (ovo je zato sto polinom stepena
n ima n + 1 koeficient koji treba odrediti, a oni se mogu
jednoznacno odrediti pomocu n + 1 uslova na osnovu zadatih
vrednosti u datim tackama).

*) Dva metoda za odredjivanje interpolacionog polinoma koja cemo


pokazati su metod neodredjenih koeficienata i Lagranzov metod. U
oba slucaja se dobija isti rezultat, jedino je postupak nesto
drugaciji. Metod neodredjenih koeficienata se svodi na resavanje
sistema linearnih jednacina po nepoznatim koeficientima polinoma,
dok se Lagranzov metod svodi na konstrukciju polinoma koji se
predstavlja kao linearna kombinacija polinoma P_i, takvih da je
P_i(x_j) = 1 akko je i = j, a 0 u suprotnom. Obe ove metode bice
demonstrirane kroz primere (pogledati resenja zadataka sa ovog
casa).

*) Polinomi se u Octave-u predstavljaju vektorom ciji su elementi


koeficienti polinoma (pocev od koeficienta uz najveci stepen,
tj. p(1) ce biti a_n). Neke korisne funkcije za rad sa polinomima
(koji su predstavljeni na opisan nacin):

-) polyval(p, x) racuna vrednost polinoma u tacki (ili tackama) x.


-) conv(p, q) racuna proizvod polinoma i vraca vektor koeficienata
tako odredjenog proizvoda
-) [d, r] = deconv(p, q) deli polinome i vraca kolicnik d i ostatak r.
-) roots(p) vraca nule polinoma
-) poly(z) vraca polinom sa zadatim nulama

Za vise informacija, pogledati help.


1) Metodom neodredjenih koeficienata odrediti interpolacione
polinome sledecih funkcija:

a) f(1) = 1.5, f(2) = 3.0, f(3) = 4.5


b) f(0.5) = 2.7, f(1.0) = 3.1, f(1.5) = 1.1, f(2.0) = -0.5
c) f(1.2) = 1.3, f(1.9) = -4.2, f(2.7) = 0.1
d) f(0) = 0, f(1) = -1.2, f(2) = 3.5, f(3) = 3.0, f(4) = 1.7

2) Lagranzovom metodom odrediti interpolacione polinome za


funkcije iz prethodnog zadatka.

3) Za date funkcije, odrediti interpolacione polinome stepena


3, 5 i 10 na datim intervalima:

a) arctg(x) na [-10, +10]


b) 1 / (1 + 25*x^2) na [-1, 1]
c) sqrt(ln(x + 1)) / (x^3 + 1) na [0, 1]
d) (sin^2(x) + cos(x)) / (cos^2(x) + sin(x)) na [0, pi/2]

Graficki prikazati dobijeni rezultat.

0) Odrediti interpolacioni polinom za funkciju f, ako znamo da je:


f(1) = 2, f(2) = 0, f(3) = 2

a) Metodom neodredjenih koeficienata (rucno, na papiru) (*)


b) Metodom Lagranza (rucno, na papiru).

1) Metodom neodredjenih koeficienata, odrediti interpolacione polinome (*)


sledecih funkcija:

a) f(0) = 1.5, f(3) = 6.1, f(5) = -4.3


b) f(1) = 3, f(2) = 1
c) f(4) = 12.3, f(5) = 18.1, f(6) = 2.7, f(7) = 3.5, f(8) = -9.2
d) f(0.1) = 2, f(0.2) = 1, f(0.3) = 4, f(0.4) = 0

Nacrtati i grafike dobijenih polinomijalnih funkcija.

2) Za date funkcije odrediti interpolacione polinome stepena 3 i 5 (za


tacke uzeti ravnomerno rasporedjene tacke zadatih intervala):

a) sin(x) na intervalu [0, 2pi]


b) log_10(x) na intervalu [1, 10]
c) e^x na intervalu [0, 5]

3) Lagranzovim metodom odrediti interpolacione polinome funkcija iz


zadatka 1).

4) Implementirati u 0ctave-u opisane metode za odredjivanje


interpolacionog polinoma. Primeniti implementaciju na primerima
sa prethodnog casa.
0) Odrediti interpolacioni polinom za funkciju f, ako znamo da je:
f(1) = 2, f(2) = 0, f(3) = 2

a) Metodom neodredjenih koeficienata (rucno, na papiru)


b) Metodom Lagranza (rucno, na papiru).

RESENJE:

a) Metoda neodredjenih koeficienata se zasniva na resavanju sistema


linearnih jednacina. U opstem slucaju, ako su date tacke x_1, x_2,
..., x_{n+1} i vrednosti funkcije f: y_1 = f(x_1), y_2 = f(x_2), ...,
y_{n+1} = f(x_{n+1}) u tim tackama, tada iz uslova da polinom:

P(x) = a_n * x^n + a_{n-1} * x^{n-1} + ... + a_1 * x + a_0

stepena n mora imati iste vrednosti kao i funkcija f u tim tackama sledi:

a_n*x_1^n + a_{n-1}*x_1^{n-1} + ... + a_1*x_1 + a_0 = y_1


a_n*x_2^n + a_{n-1}*x_2^{n-1} + ... + a_1*x_2 + a_0 = y_2
...
a_n*x_{n+1}^n + a_{n-1}*x_{n+1}^{n-1} + ... + a_1*x_{n+1} + a_0 = y_{n+1}

Kada se u gornje jednakosti zamene vrednosti za x_i i y_i (koje su


date u postavci zadatka) dobija se linearni sistem jednacina po
a_n, a_{n-1}, ..., a_0 koji ima n+1 jednacinu i n+1 nepoznatu. Moze
se dokazati da ovaj sistem uvek ima jedinstveno resenje, cime je
jednoznacno odredjen interpolacioni polinom.

U nasem primeru, neka je P(x) = a*x^2 + b*x + c. Iz datih uslova


imamo:

P(1) = a + b + c = 2 = f(1)
P(2) = 4a + 2b + c = f(2) = 0
P(3) = 9a + 3b + c = f(3) = 2

Resavanjem ovog sistema po a,b,c dobijamo resenje:


a = 2, b = -8, c = 8, pa je polinom:

P(x) = 2*x^2 -8*x + 8

b) Lagranzov metod interpolacije podrazumeva da se za svaku


tacku xi (i = 1, 2, ..., n + 1) najpre pronadje polinom Pi stepena
n koji ima vrednost 0 u svim tackama osim u x_i, u kojoj ima vrednost
1. Lako se vidi da je polinom:
Qi(x) = (x - x_1)*(x - x_2)*...*(x - x_{i-1})*(x - x_{i+1})*...*(x - x_{n+1})

ima vrednost 0 u svakoj tacki, osim u x_i u kojoj ima vrednost


razlicitu od nule (ne obavezno 1). Sada samo treba skalirati polinom
Qi svojom vrednoscu u tacki x_i, tj. vazi da je:

Pi(x) = Qi(x) / Qi(x_i).

Kada ovo uradimo za svaku tacku x_i, zbir polinoma:

P_1(x)*f(x_1) + P_2(x)*f(x_2) + ... + P_{n+1}(x)*f(x_{n+1})

bice upravo interpolacioni polinom P funkcije f stepena n.

U nasem primeru imamo tacke x1 = 1, x2 = 2, x3 = 3, i vrednosti y1 =


2, y2 = 0, y3 = 2, pa imamo sledece polinome:

L1(x) = (x - x1) = x - 1
L2(x) = (x - x2) = x - 2
L3(x) = (x - x3) = x - 3

Sada je:

Q1(x) = L2(x)*L3(x) = (x-2)*(x-3) = x^2 - 5x + 6


P1(x) = Q1(x)/Q1(x1)= (x^2-5x+6)/2
Q2(x) = L1(x)*L3(x)=(x-1)*(x-3)=x^2 -4x + 3
P2(x) = Q2(x)/Q2(x2) = (x^2 -4x + 3)/(-1)
Q3(x) = L1(x)*L2(x) = (x-1)*(x-2) = x^2 -3x + 2
P3(x) = Q3(x)/Q3(x3) = (x^2 -3x + 2)/2

Sada je polinom P:

P(x) = P1(x)*y1 + P2(x)*y2 + P3(x)*y3


= P1(x)*2 + P2(x)*0 + P3(x)*2
= (x^2-5x+6)/2 * 2 + 0 + (x^2 -3x + 2)/2 * 2 =
= 2*x^2 -8x + 8

Dakle, vidimo da smo dobili isti rezultat kao u slucaju metode


neodredjenih koeficienata. Ovo je ocekivano, jer znamo da je
interpolacioni polinom jedinstven.

1) Metodom neodredjenih koeficienata, odrediti interpolacione polinome


sledecih funkcija:

RESENJE:

a) f(0) = 1.5, f(3) = 6.1, f(5) = -4.3

x = [0, 3, 5]';
y = [1.5, 6.1, -4.3]';
A = [x.^2, x, ones(size(x))];
% iz A*p = y sledi da je p = A\y; tj. resavamo sistem deljenjem matrica
p = A \ y
X = linspace(-1, 6, 100);
Y = polyval(p, X);
plot(x, y, "ro");
grid on;
hold on;
plot(X, Y, "b");
axis equal;

b) f(1) = 3, f(2) = 1

x = [1, 2]';
y = [3, 1]';
A = [x ones(size(x))];
p = A \ y
X = linspace(0, 3, 100);
Y = polyval(p, X);
plot(x, y, "ro");
grid on;
hold on;
plot(X, Y, "b");
axis equal;

Primetimo da je u ovom slucaju polinom stepena 1, tj. linearna


funkcija, koja je u stvari jednacina prave u eksplicitnom obliku.
Do ove jednacine smo mogli doci i primenom analiticke geometrije:
prosto je trebalo naci jednacinu prave kroz dve tacke A(1, 3) i
B(2, 1).

c) f(4) = 12.3, f(5) = 18.1, f(6) = 2.7, f(7) = 3.5, f(8) = -9.2

x = [4:8]';
y = [12.3, 18.1, 2.7, 3.5, -9.2]';
A = [x.^4, x.^3, x.^2, x, ones(size(x))];
p = A \ y;
X = linspace(3, 9, 100);
Y = polyval(p, X);
plot(x, y, "ro");
grid on;
hold on;
plot(X, Y, "b");

d) f(0.1) = 2, f(0.2) = 1, f(0.3) = 4, f(0.4) = 0

x = [0.1:0.1:0.4]';
y = [2, 1, 4, 0]';
A = [x.^3, x.^2, x, ones(size(x))];
p = A \ y
X = linspace(0, 0.5, 100);
Y = polyval(p, X);
plot(x, y, "ro");
grid on;
hold on;
plot(X, Y, "b");

2) Za date funkcije odrediti interpolacione polinome stepena 3 i 5 (za


tacke uzeti ravnomerno rasporedjene tacke zadatih intervala):

RESENJE: U ovom zadatku nam nisu date vrednosti funkcije u konkretnim


tackama, vec nam je data sama funkcija ciju vrednost mozemo izracunati
u proizvoljnoj tacki. Ovu funkciju zelimo da aproksimiramo polinomom
stepena n, pa u tom slucaju sami biramo n+1 tacku iz zadatog intervala
(najbolje je da uzmemo ravnomerno rasporedjene tacke, kako bismo
dobili dobru aproksimaciju na celom intervalu). Kada izaberemo tacke,
izracunamo vrednost funkcije u tim tackama, i time zadatak svodimo
na prethodni slucaj. Ovako nesto se obicno radi kada je funkcija
zadata suvise komplikovanim izrazom, pa je jednostavnije zameniti
je nekim polinomom sa kojim je lakse raditi. U ovom zadatku
bice zanimljivo videti odnos grafika stvarne funkcije i odgovarajuceg
interpolacionog polinoma.

a) sin(x) na intervalu [0, 2pi]

n = 3;
x = linspace(0, 2*pi, n + 1)';
y = sin(x);
A = [];
for i = n:-1:0
A = [A x.^i];
end
p1 = A \ y
n = 5;
x = linspace(0, 2*pi, n + 1)';
y = sin(x);
A = [];
for i = n:-1:0
A = [A x.^i];
end
p2 = A \ y
X = linspace(0, 2*pi, 100);
Y = sin(X);
plot(X,Y,"r");
hold on;
grid on;
Y1 = polyval(p1, X);
plot(X, Y1, "b");
Y2 = polyval(p2, X);
plot(X, Y2, "g");

b) log_10(x) na intervalu [1, 10]

n = 3;
x = linspace(1, 10, n + 1)';
y = log10(x);
A = [];
for i = n:-1:0
A = [A x.^i];
end
p1 = A \ y
n = 5;
x = linspace(1, 10, n + 1)';
y = log10(x);
A = [];
for i = n:-1:0
A = [A x.^i];
end
p2 = A \ y
X = linspace(1, 10, 100);
Y = log10(X);
plot(X,Y,"r");
hold on;
grid on;
Y1 = polyval(p1, X);
plot(X, Y1, "b");
Y2 = polyval(p2, X);
plot(X, Y2, "g");

c) e^x na intervalu [0, 5]

n = 3;
x = linspace(0, 5, n + 1)';
y = exp(x);
A = [];
for i = n:-1:0
A = [A x.^i];
end
p1 = A \ y
n = 5;
x = linspace(0, 5, n + 1)';
y = exp(x);
A = [];
for i = n:-1:0
A = [A x.^i];
end
p2 = A \ y
X = linspace(0, 5, 100);
Y = exp(X);
plot(X,Y,"r");
hold on;
grid on;
Y1 = polyval(p1, X);
plot(X, Y1, "b");
Y2 = polyval(p2, X);
plot(X, Y2, "g");

3) Lagranzovim metodom odrediti interpolacione polinome funkcija iz


zadatka 1).

RESENJE:

a) f(0) = 1.5, f(3) = 6.1, f(5) = -4.3

x = [0, 3, 5];
y = [1.5, 6.1, -4.3];

l1 = [1, -x(1)]; % polinom (x - 0)


l2 = [1, -x(2)]; % polinom (x - 3)
l3 = [1, -x(3)]; % polinom (x - 5)

Q1 = conv(l2, l3);
P1 = Q1/polyval(Q1, x(1));
Q2 = conv(l1, l3);
P2 = Q2/polyval(Q2, x(2));
Q3 = conv(l1, l2);
P3 = Q3/polyval(Q3, x(3));

P = P1*y(1) + P2*y(2) + P3*y(3)


plot(x, y, "ro");
hold on;
grid on;
X = linspace(-1, 6, 100);
Y = polyval(P, X);
plot(X,Y,"b");

b) f(1) = 3, f(2) = 1

x = [1, 2];
y = [3, 1];

l1 = [1, -x(1)]; % polinom (x - 1)


l2 = [1, -x(2)]; % polinom (x - 2)

Q1 = l2;
P1 = Q1/polyval(Q1, x(1));
Q2 = l1;
P2 = Q2/polyval(Q2, x(2));
P = P1*y(1) + P2*y(2)
plot(x, y, "ro");
hold on;
grid on;
X = linspace(0, 3, 100);
Y = polyval(P, X);
plot(X,Y,"b");

c) f(4) = 12.3, f(5) = 18.1, f(6) = 2.7, f(7) = 3.5, f(8) = -9.2

x = 4:8;
y = [12.3, 18.1, 2.7, 3.5, -9.2];

l1 = [1, -x(1)];
l2 = [1, -x(2)];
l3 = [1, -x(3)];
l4 = [1, -x(4)];
l5 = [1, -x(5)];

Q1 = conv(conv(l2, l3), conv(l4, l5));


P1 = Q1/polyval(Q1, x(1));
Q2 = conv(conv(l1, l3), conv(l4, l5));
P2 = Q2/polyval(Q2, x(2));
Q3 = conv(conv(l1, l2), conv(l4, l5));
P3 = Q3/polyval(Q3, x(3));
Q4 = conv(conv(l1, l2), conv(l3, l5));
P4 = Q4/polyval(Q4, x(4));
Q5 = conv(conv(l1, l2), conv(l3, l4));
P5 = Q5/polyval(Q5, x(5));
P = P1*y(1) + P2*y(2) + P3*y(3) + P4*y(4) + P5*y(5)
plot(x, y, "ro");
hold on;
grid on;
X = linspace(3, 9, 100);
Y = polyval(P, X);
plot(X,Y,"b");

d) f(0.1) = 2, f(0.2) = 1, f(0.3) = 4, f(0.4) = 0

x = 0.1:0.1:0.4;
y = [2, 1, 4, 0];
l1 = [1, -x(1)];
l2 = [1, -x(2)];
l3 = [1, -x(3)];
l4 = [1, -x(4)];
Q1 = conv(conv(l2, l3), l4);
P1 = Q1/polyval(Q1, x(1));
Q2 = conv(conv(l1, l3), l4);
P2 = Q2/polyval(Q2, x(2));
Q3 = conv(conv(l1, l2), l4);
P3 = Q3/polyval(Q3, x(3));
Q4 = conv(conv(l1, l2), l3);
P4 = Q4/polyval(Q4, x(4));
P = P1*y(1) + P2*y(2) + P3*y(3) + P4*y(4)
plot(x, y, "ro");
hold on;
grid on;
X = linspace(0, 0.5, 100);
Y = polyval(P, X);
plot(X,Y,"b");

4) Implementirati u 0ctave-u opisane metode za odredjivanje


interpolacionog polinoma. Primeniti implementaciju na primerima
sa prethodnog casa.

[resenja su data u fajlovima lagranzov_polinom.m i neodredjeni_koeficienti.m]

1) Metodom neodredjenih koeficienata odrediti interpolacione


polinome sledecih funkcija:

a) f(1) = 1.5, f(2) = 3.0, f(3) = 4.5

RESENJE:

x = [1,2,3]';
y = [1.5, 3.0, 4.5]';
A = [x.^2 x ones(size(x))];
p = A \ y;
X = linspace(0, 4, 100);
Y = polyval(p, X);
plot(x, y, "ro");
hold on;
grid on;
plot(X,Y,"b");

NAPOMENA: Ispostavlja se da je koeficient a_2 uz x^2 jednak nuli,


tj. dobijeni polinom je linearna funkcija (grafik je prava).

b) f(0.5) = 2.7, f(1.0) = 3.1, f(1.5) = 1.1, f(2.0) = -0.5

RESENJE:

x = [0.5, 1.0, 1.5, 2.0]';


y = [2.7, 3.1, 1.1, -0.5]';
A = [x.^3 x.^2 x ones(size(x))];
p = A \ y;
X = linspace(0, 2.5, 100);
Y = polyval(p, X);
plot(x, y, "ro");
hold on;
grid on;
plot(X,Y,"b");

c) f(1.2) = 1.3, f(1.9) = -4.2, f(2.7) = 0.1

RESENJE:

x = [1.2, 1.9, 2.7]';


y = [1.3, -4.2, 0.1]';
A = [x.^2 x ones(size(x))];
p = A \ y;
X = linspace(1, 3, 100);
Y = polyval(p, X);
plot(x, y, "ro");
hold on;
grid on;
plot(X,Y,"b");

d) f(0) = 0, f(1) = -1.2, f(2) = 3.5, f(3) = 3.0, f(4) = 1.7

RESENJE:

x = [0, 1, 2, 3, 4]';
y = [0, -1.2, 3.5, 3.0, 1.7]';
A = [x.^4 x.^3 x.^2 x ones(size(x))];
p = A \ y;
X = linspace(-1, 5, 100);
Y = polyval(p, X);
plot(x, y, "ro");
hold on;
grid on;
plot(X,Y,"b");

2) Lagranzovom metodom odrediti interpolacione polinome za


funkcije iz prethodnog zadatka.

RESENJE:

a)

x = [1, 2, 3];
y = [1.5, 3.0, 4.5];
l1 = [1, -x(1)];
l2 = [1, -x(2)];
l3 = [1, -x(3)];
Q1 = conv(l2, l3);
P1 = Q1 / polyval(Q1, x(1));
Q2 = conv(l1, l3);
P2 = Q2 / polyval(Q2, x(2));
Q3 = conv(l1, l2);
P3 = Q3 / polyval(Q3, x(3));
P = P1*y(1) + P2*y(2) + P3*y(3);
X = linspace(0, 4, 100);
Y = polyval(P, X);
plot(x, y, "ro");
hold on;
grid on;
plot(X,Y,"b");

b)

x = [0.5, 1.0, 1.5, 2.0];


y = [2.7, 3.1, 1.1, -0.5];
l1 = [1, -x(1)];
l2 = [1, -x(2)];
l3 = [1, -x(3)];
l4 = [1, -x(4)];
Q1 = conv(l2, conv(l3, l4));
P1 = Q1 / polyval(Q1, x(1));
Q2 = conv(l1, conv(l3, l4));
P2 = Q2 / polyval(Q2, x(2));
Q3 = conv(l1, conv(l2, l4));
P3 = Q3 / polyval(Q3, x(3));
Q4 = conv(l1, conv(l2, l3));
P4 = Q4 / polyval(Q4, x(4));
P = P1*y(1) + P2*y(2) + P3*y(3) + P4*y(4);
X = linspace(0, 2.5, 100);
Y = polyval(P, X);
plot(x, y, "ro");
hold on;
grid on;
plot(X,Y,"b");

c)
x = [1.2, 1.9, 2.7];
y = [1.3, -4.2, 0.1];
l1 = [1, -x(1)];
l2 = [1, -x(2)];
l3 = [1, -x(3)];
Q1 = conv(l2, l3);
P1 = Q1 / polyval(Q1, x(1));
Q2 = conv(l1, l3);
P2 = Q2 / polyval(Q2, x(2));
Q3 = conv(l1, l2);
P3 = Q3 / polyval(Q3, x(3));
P = P1*y(1) + P2*y(2) + P3*y(3);
X = linspace(1, 3, 100);
Y = polyval(P, X);
plot(x, y, "ro");
hold on;
grid on;
plot(X,Y,"b");

d)

x = [0, 1, 2, 3, 4];
y = [0, -1.2, 3.5, 3.0, 1.7];
l1 = [1, -x(1)];
l2 = [1, -x(2)];
l3 = [1, -x(3)];
l4 = [1, -x(4)];
l5 = [1, -x(5)];
Q1 = conv(conv(l2, l3), conv(l4, l5));
P1 = Q1 / polyval(Q1, x(1));
Q2 = conv(conv(l1, l3), conv(l4, l5));
P2 = Q2 / polyval(Q2, x(2));
Q3 = conv(conv(l1, l2), conv(l4, l5));
P3 = Q3 / polyval(Q3, x(3));
Q4 = conv(conv(l1, l2), conv(l3, l5));
P4 = Q4 / polyval(Q4, x(4));
Q5 = conv(conv(l1, l2), conv(l3, l4));
P5 = Q5 / polyval(Q5, x(5));
P = P1*y(1) + P2*y(2) + P3*y(3) + P4*y(4) + P5*y(5);
X = linspace(-1, 5, 100);
Y = polyval(P, X);
plot(x, y, "ro");
hold on;
grid on;
plot(X,Y,"b");

3) Za date funkcije, odrediti interpolacione polinome stepena


3, 5 i 10 na datim intervalima:

a) arctg(x) na [-10, +10]

% Najpre crtamo grafik funkcije arctg(x)


X = linspace(-10, 10, 100);
Y = atan(X);
plot(X, Y, "b");
hold on;
grid on;

% Odredjujemo interpolacioni polinom stepena 3


x = linspace(-10, 10, 3);
y = atan(x);
plot(x, y, "ro"); % crtamo tacke
p3 = lagranzov_polinom(x, y);
plot(X, polyval(p3, X), "r");

% Odredjujemo interpolacioni polinom stepena 5

x = linspace(-10, 10, 5);


y = atan(x);
plot(x, y, "ko"); % crtamo tacke
p5 = lagranzov_polinom(x, y);
plot(X, polyval(p5, X), "k");

% Odredjujemo interpolacioni polinom stepena 10

x = linspace(-10, 10, 10);


y = atan(x);
plot(x, y, "go"); % crtamo tacke
p10 = lagranzov_polinom(x, y);
plot(X, polyval(p10, X), "g");

b) 1 / (1 + 25*x^2) na [-1, 1]

% Najpre crtamo grafik funkcije


X = linspace(-1, 1, 100);
Y = 1 ./ (1 + 25 * X.^2);
plot(X, Y, "b");
hold on;
grid on;

% Odredjujemo interpolacioni polinom stepena 3


x = linspace(-1, 1, 3);
y = 1 ./ (1 + 25 * x.^2);
plot(x, y, "ro"); % crtamo tacke
p3 = lagranzov_polinom(x, y);
plot(X, polyval(p3, X), "r");

% Odredjujemo interpolacioni polinom stepena 5

x = linspace(-1, 1, 5);
y = 1 ./ (1 + 25 * x.^2);
plot(x, y, "ko"); % crtamo tacke
p5 = lagranzov_polinom(x, y);
plot(X, polyval(p5, X), "k");

% Odredjujemo interpolacioni polinom stepena 10

x = linspace(-1, 1, 10);
y = 1 ./ (1 + 25 * x.^2);
plot(x, y, "go"); % crtamo tacke
p10 = lagranzov_polinom(x, y);
plot(X, polyval(p10, X), "g");
c) sqrt(ln(x + 1)) / (x^3 + 1) na [0, 1]

% Najpre crtamo grafik funkcije


X = linspace(0, 1, 100);
Y = sqrt(log(X + 1)) ./ (X.^3 + 1);
plot(X, Y, "b");
hold on;
grid on;

% Odredjujemo interpolacioni polinom stepena 3


x = linspace(0, 1, 3);
y = sqrt(log(x + 1)) ./ (x.^3 + 1);
plot(x, y, "ro"); % crtamo tacke
p3 = lagranzov_polinom(x, y);
plot(X, polyval(p3, X), "r");

% Odredjujemo interpolacioni polinom stepena 5

x = linspace(0, 1, 5);
y = sqrt(log(x + 1)) ./ (x.^3 + 1);
plot(x, y, "ko"); % crtamo tacke
p5 = lagranzov_polinom(x, y);
plot(X, polyval(p5, X), "k");

% Odredjujemo interpolacioni polinom stepena 10

x = linspace(0, 1, 10);
y = sqrt(log(x + 1)) ./ (x.^3 + 1);
plot(x, y, "go"); % crtamo tacke
p10 = lagranzov_polinom(x, y);
plot(X, polyval(p10, X), "g");

d) (sin^2(x) + cos(x)) / (cos^2(x) + sin(x)) na [0, pi/2]

% Najpre crtamo grafik funkcije


X = linspace(0, pi/2, 100);
Y = (sin(X).^2 + cos(X)) ./ (cos(X).^2 + sin(X));
plot(X, Y, "b");
hold on;
grid on;

% Odredjujemo interpolacioni polinom stepena 3


x = linspace(0, pi/2, 3);
y = (sin(x).^2 + cos(x)) ./ (cos(x).^2 + sin(x));
plot(x, y, "ro"); % crtamo tacke
p3 = lagranzov_polinom(x, y);
plot(X, polyval(p3, X), "r");

% Odredjujemo interpolacioni polinom stepena 5

x = linspace(0, pi/2, 5);


y = (sin(x).^2 + cos(x)) ./ (cos(x).^2 + sin(x));
plot(x, y, "ko"); % crtamo tacke
p5 = lagranzov_polinom(x, y);
plot(X, polyval(p5, X), "k");

% Odredjujemo interpolacioni polinom stepena 10

x = linspace(0, pi/2, 10);


y = (sin(x).^2 + cos(x)) ./ (cos(x).^2 + sin(x));
plot(x, y, "go"); % crtamo tacke
p10 = lagranzov_polinom(x, y);
plot(X, polyval(p10, X), "g");

Graficki prikazati dobijeni rezultat.

4) Brzina tela nakon 1s kretanja je 5 m/s, nakon 2s kretanja je 7m/s,


nakon 3s je 6.2m/s, nakon 4s je 4.5m/s, nakon 5s je 5.1
m/s. Interpolacijom proceniti brzinu tela 3.7s nakon pocetka
kretanja.

RESENJE: Brzina je zadata kao funkcija v = v(t), gde je t proteklo vreme


od pocetka kretanja tela. Mi znamo vrednost ove funkcije u tackama
1, 2, 3, 4, 5 (izrazeno u sekundama). Aproksimiramo funkciju v(t) njenim
interpolacionim polinomom stepena 4 (jer imamo 5 tacaka).

t = [1,2,3,4,5];
v = [5, 7, 6.2, 4.5, 5.1];
% Koristimo Lagranzov metod
l1 = [1 -t(1)];
l2 = [1 -t(2)];
l3 = [1 -t(3)];
l4 = [1 -t(4)];
l5 = [1 -t(5)];
Q1 = conv(conv(l2,l3),conv(l4,l5));
P1 = Q1/polyval(Q1, t(1));
Q2 = conv(conv(l1,l3),conv(l4,l5));
P2 = Q2/polyval(Q2, t(2));
Q3 = conv(conv(l1,l2),conv(l4,l5));
P3 = Q3/polyval(Q3, t(3));
Q4 = conv(conv(l1,l2),conv(l3,l5));
P4 = Q4/polyval(Q4, t(4));
Q5 = conv(conv(l1,l2),conv(l3,l4));
P5 = Q5/polyval(Q5, t(5));
p = P1*v(1) + P2*v(2) + P3*v(3) + P4*v(4) + P5*v(5);
% Crtamo grafik (ovo se ne trazi u zadatku, ali je korisno zbog vizuelizacije)
plot(t,v,"o");
hold on;
grid on;
axis equal;
T = linspace(0,5,100);
V = polyval(p, T);
plot(T,V);
% Odredjujemo trazenu brzinu u trenutku 3.7s
v37 = polyval(p, 3.7) % 4.9392 m/s

5) Jedan evro je 1. avgusta vredeo 118 dinara, 5. avgusta je vredeo


119.5 dinara, 10. avgusta je vredeo 120.1 dinar, 15. avgusta je
vredeo 119.7 dinara, 20. avgusta je vredeo 118.8 dinara,
25. avgusta je vredeo 119.5, a 30. avgusta je vredeo 120 dinara.
Interpolacijom, proceniti vrednost dinara 17. avgusta.

RESENJE: Vrednost kursa izrazena je kao funkcija K(d), gde je d datum.


Imamo da je K(1) = 118, K(5) = 119.5, ..., K(30) = 120. Treba formirati
interpolacioni polinom (stepena 6, jer imamo 7 tacaka), i na osnovu njega
aproksimirati vrednost K(17).

d = [1, 5, 10, 15, 20, 25, 30];


K = [118, 119.5, 120.1, 119.7 118.8 119.5 120];
% Metod neodredjenih koeficienata
d = d';
K = K';
A = [d.^6, d.^5, d.^4, d.^3, d.^2, d.^1, d.^0];
p = A \ K;
% Crtamo grafik (ne trazi se u zadatku):
plot(d, K, "o");
hold on;
grid on;
axis equal;
D = linspace(1, 30, 100);
K = polyval(p, D);
plot(D,K);
% Resenje:
K17 = polyval(p, 17) % 119.29

function P = lagranzov_polinom(x, y)

%{
Funkcija odredjuje interpolacioni polinom za tacke (x_i, y_i)
Lagranzovim metodom.
%}

if(length(x) ~= length(y))
printf("x i y moraju biti iste duzine\n");
return;
end

n = length(x) - 1; % Stepen polinoma


P = 0; % Polinom P je inicijalno 0
% Za svaku tacku racunamo polinom Pi koji dodajemo na P
for i = 1:(n+1)

% Polinom Pi se racuna po formuli:


% Pi = (x - x_1)*..*(x - x_{i-1})*(x - x_{i+1})*...*(x - x{n+1}) /
% (x_i - x_1)*...*(x_i - x_{i-1})*(x_i - x_{i+1})*...*(x_i - x{n+1})
% Ovaj polinom P_i ima vrednost 0 u svim tackama x_j osim u tacki x_i u
% kojoj ima vrednost 1.
Pi = 1;
f = 1;
for j = 1:(n+1)
if(j ~= i)
Pi = conv(Pi, [1, -x(j)]);
f = f * (x(i) - x(j));
end
end
Pi = Pi/f;

% Sada na P dodajemo Pi*y(i). Ovaj polinom ima vrednost 0 u svim tackama


x_j,
% osim u tacki x_i u kojoj ima vrednost y_i.
P = P + Pi*y(i);
end

% Dobijeni polinom P ima vrednost y(i) u tacki x(i) (za svako i = 1, ..., n+1)
end

function p = neodredjeni_koeficienti(x, y)

%{
Funkcija odredjuje interpolacioni polinom za tacke (x_i, y_i)
metodom neodredjenih koeficienata.
%}

if(length(x) ~= length(y))
printf("x i y moraju biti iste duzine\n");
return;
end

n = length(x) - 1; % Stepen polinoma


P = 0; % Polinom P je inicijalno 0

% Ukoliko su argumenti dati kao vrste, treba ih pretvoriti u kolone


if(columns(x) > 1)
x = x';
end
if(columns(y) > 1)
y = y';
end

% Formiramo matricu linearnog sistema


%
% x_1^n x_1^{n-1} ... x_1 1
% x_2^n x_2^{n-1} ... x_2 1
% ... ... ...
% ... ... ...
% x_{n+1}^n x_{n+1}^{n-1} ... x_{n+1} 1
A = [];
for i = n:-1:0
A = [A x.^i];
end

% delimo y sa A (sa leve strane) i dobijamo koeficiente polinoma


p = A \ y;

end

You might also like