function [errors]=root_check(polynomial,roots)

%-------------------------------------------------------------
%Funkcija proverava validnost izracunatih korena
%Algoritam se izvrsava u tri koraka

%1) rekonstruise polinom od sracunatih korena
    % (x-x1)*(x-x2)*......*(x-xn), x1,x2,...,xn - koreni
    
%2) zaokruzivanje rezultata (odbacivanje imaginarnih delova)

%3) izracunavanje greske (razlika u koeficijentima polinoma)
    % i slanje na izlaz
    

%polynomial   -->   koeficijenti polinoma
%roots        -->   koreni polinoma

%------------------------------------------------------------

n=length(roots);
A=1;                % koeficijenti rekonstruisanog polinoma


% rekonstrukcija polinoma
for i=1:n
    A=conv(A,[1 -roots(i)]);                %mnozenje A*(x-xi)
end

%zaokruzivanje novih koeficijenata
for i=1:n
    
    if(abs(real(A(i)))<0.0001)
        A(i)=imag(A(i))*i;
    end
    
    if(abs(imag(A(i)))<0.0001)
        A(i)=real(A(i));
    end

end


coefficients=A';                            %novi koeficijenti


%ako je koef. uz najveci stepen ulznog polinoma razlicit od 1 a koef.
%uz najveci stepen sracunatog polinoma jednak 1 onda se mnozi novi
%polinom sa vodecim ulaznog
if(coefficients(1)==1 && polynomial(1)~=1)
    coefficients=polynomial(1)*coefficients;
    A=A*polynomial(1);
end
                            


%provera validnosti koeficijenata (tolerancija 0.1)
for i=1:n
    if(abs(coefficients(i)-polynomial(i))>0.1)
        good=0;
        break;
    end
    
    if(i==n)
        good=1;
    end
end


%racunanje greske
for i=1:n
    errors(i,1)=abs(coefficients(i,1)-A(1,i));
end

%ispis validnosti
if(good==0)
    sprintf('ROOTS ARE BAD!')
else
    sprintf('ROOTS ARE OK!')
end

end

