function reg_line(xvals,yvals,M)
%
% (XVALS(i),YVALS(i)), i=1,...,n=length(xvals) son
% los datos originales.
%
% COEF contiene los coeficientes del mejor polinomio de
% grado M-1 que aproxima los datos y esta dado por:
%
%    y=COEF(1)*x^(M-1)+COEF(2)*x^(M-2)+...+COEF(M)
%
% Primero se calculan los coeficientes de diicho polinomio.
%
coef=polyfit(xvals,yvals,M);
%
% Luego divide el intervalo de las x's en 100 subintervalos
% y evalua el mejor polinomio en estos datos.
%
xint=linspace(min(xvals),max(xvals),100);
yint=polyval(coef,xint);
%
% Calcula las diferencias o residuos entre el modelo dado
% por el polinomio y los datos originales y el error cuadrado
% medio (RMSE).
%
errors=yvals-polyval(coef,xvals);
RMSE=sqrt(sum(errors.^2)/length(xvals));
%
% Traza la grafica de los datos originales junto con la mejor recta.
%
figure(1)
clf
plot(xvals,yvals,'.',xint,yint)
title(['Regresion Lineal con un Modelo Lineal: RMSE=' num2str(RMSE)])
legend('Datos','Mejor Polinomio')
%
% Traza la grafica de las diferencias o residuos.
%
figure(2)
clf
plot(xvals,errors,'.')
title('Grafica de Diferencias o Residuos - Regresion Lineal')