function P=approx_cebisev(fun,a,b,n)
% Aproksimacija f-je fun na intervalu [a,b], polinomom stepena n 
% u odnosu na bazu Cebisev-ovih polinoma. 

% Konstruisimo bazne polinome
% T je cell array koji sadrzi Cebisevove polinome T{i}=Ti-1 na intervalu [a, b]
T = cebisev_poly(n+1, a, b);

% koeficijenti aproksimacionog polinoma
P = zeros(1,n+1); %prealokacija

for i=1:n+1
    if i==1
        P = P + [zeros(1,n-i+1) 1/pi * quad(@Tf,a,b,[],[],fun,T{i}) * T{i}];
    else
        P = P + [zeros(1,n-i+1) 2/pi * quad(@Tf,a,b,[],[],fun,T{i}) * T{i}];
    end
    
    % ili
    % P = P + [zeros(1,n-i+1) quad(@Tf,a,b,[],[],fun,T{i})/quad(@Tt,a,b,[],[],T{i}) * T{i}];
end


% iscrtavamo rezultat 
X = linspace(a, b);
plot(X, fun(X), X, polyval(P, X));


% Pomocna funkcija potrebna za racunanje integrala 
% Funkcija racuna vrednost proizvoda tezinske funkcije p(x)=1/sqrt(1-x^2), funcije f i 
% odgovarajuceg Cebisevovog polinoma t u datoj tacki x
function y = Tf(x, f, t)
    % l(x)*f(x)*p(x)
    y = polyval(t, x).*feval(f, x)./sqrt(1-x.^2);
    
% Pomocna funkcija potrebna za racunanje integrala 
% Funkcija racuna vrednost kvadrata odgovarajuceg Cebisevovog polinoma t 
% u datim tackama x
%function y = Tt(x, t)
%    y = polyval(t, x).^2./sqrt(1-x.^2);