function [P,errore] = min_quad(x,y)
% Costruzione di una funzione approssimante
% nel senso dei minimi quadrati
% INPUT:  coppie (x_i,y_i) da approssimare
%         INSERIRE VETTORI DI LUNGHEZZA OPPORTUNA (ALMENO 5 ELEMENTI)
% OUTPUT: P, vettore dei coefficienti del 
%         polinomio approssimante
%         errore di approssimazione
close all
figure
xplot=min(x):0.02:max(x) ;
m=length(x) ;   %numero di punti da approssimare
if m>3
    nmax=min(m-3,5) ;
else
    nmax=2 ;
end
errore=zeros(1,nmax) ;
% Costruisco polinomi approssimanti
% di grado da 1 a nmax
for n=1:nmax
    P=polyfit(x,y,n) ;
    yapp=polyval(P,xplot) ;
    plot(xplot,yapp)
    hold on
    ypol=polyval(P,x) ;
    errore(n)=norm(y-ypol,inf) ;
end
%%
% Retta di regressione
%P=polyfit(x,y,1) ;
% Parabola
%P2=polyfit(x,y,2) ;
%xplot=x ;
%yrr=polyval(P,xplot) ;
%ypar=polyval(P2,xplot) ;
%%
%
% Grafici
plot(x,y,'mx','LineWidth',2)
hold on
grid
title(['Polinomi approssimanti di grado ' mat2str(1:nmax)]) 
figure
semilogy(errore)
grid
title('Errore')
xlabel('Grado del polinomio')
end

