Professional Documents
Culture Documents
=================
*)
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).
RESENJE:
stepena n mora imati iste vrednosti kao i funkcija f u tim tackama sledi:
P(1) = a + b + c = 2 = f(1)
P(2) = 4a + 2b + c = f(2) = 0
P(3) = 9a + 3b + c = f(3) = 2
L1(x) = (x - x1) = x - 1
L2(x) = (x - x2) = x - 2
L3(x) = (x - x3) = x - 3
Sada je:
Sada je polinom P:
RESENJE:
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;
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");
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");
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");
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");
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");
RESENJE:
x = [0, 3, 5];
y = [1.5, 6.1, -4.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));
b) f(1) = 3, f(2) = 1
x = [1, 2];
y = [3, 1];
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)];
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");
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");
RESENJE:
RESENJE:
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");
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)
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");
b) 1 / (1 + 25*x^2) na [-1, 1]
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");
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]
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");
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");
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
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
% 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
end