Professional Documents
Culture Documents
x
Primer 1 U tabeli su date tačke koje predstavljaju vrednosti funkcije f ( x )=1 .5 cos(2 x) . Primenom
metode linear i spline izračunati vrednosti y između datih tačaka. Nacrtati grafik za svaku metodu
interpolacije. Na svakom grafiku prikazati početne tačke, krivu funkcije i krivu koja predstavlja metodu
interpolacije.
x 0 1 2 3 4 5
y 1.0 -0.6242 -1.4707 3.2406 -0.7366 -6.3717
x=0:1:5;
y=[1 -0.6242 -1.4707 3.2406 -0.7366 -6.3717];
xi=0:1:5;
yilin=interp1(x,y,xi,'linear');
yispl=interp1(x,y,xi,'spline');
yfun=1.5.^xi.*cos(2*x);
subplot(1,2,1), plot(x,y,'*',xi,yilin,xi,yfun,'--')
subplot(1,2,2), plot(x,y,'*',xi,yispl,xi,yfun,'--')
Zadatak 1 Broj stanovnika Kine između 1940. godine i 2000. godine dat je u sledećoj tabeli:
Godina 1940 1950 196 1970 1980 1990 2000
0
Broj stanovnika (u 537 557 682 826 981 1135 1262
milionima)
Interpolirati podatke metodom linear i splajn. Proceniti broj stanovnika 1995. godine pomoću obe
metode. nacrtati grafik tačaka podataka (označene kružićima) i aproksimiranu odnosno u tački (b)
interpoliranu krivu.
god=[1940:10:2000];
brst=[537 557 682 826 981 1135 1262];
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");
2) Za date funkcije odrediti interpolacione polinome stepena 3 i 5 (za
tacke uzeti ravnomerno rasporedjene tacke zadatih intervala):
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)
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(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");
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
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