clear
%
disp("************************************************************");
disp("*********   Programa de representación gráfica   ***********");
disp("*********     de ajuste por mínimos cuadrados    ***********");
disp("*********         GMNI - UDC (20210301)          ***********");
disp("************************************************************");
disp("**             Puntos base datos: datos.dat               **");
disp("**   Puntos para representación del ajuste: ajuste.dat    **");
disp("************************************************************\n");
n=input("Indique el orden máximo del polinomio (n): ");
ymin=-Inf;
ymax=Inf;
ymin=input("Indique el valor mínimo del eje Y (Si se omite se ajusta a los datos): ");
ymax=input("Indique el valor máximo del eje Y (Si se omite se ajusta a los datos): ");
%
[fi,txterr]=fopen('ajuste.dat','r');
%
[error]=fscanf(fi,'%f',n+1);
%
xerror=zeros(n+1,1);
for i=1:n+1
  xerror(i)=i-1;
end
figure(1);
clf(1);
plot(xerror,error',"+-;raíz cuadrada del error cuadrático medio;");
title('Raíz cuadrada del error cuadrático medio del ajuste por minimos cuadrados');
%
j=0;
while(1)
  j++;
  [a,count]=fscanf(fi,'%f',n+2);
  if(count == n+2)
    AX(j,:)=a';
  else
    break;
  endif
endwhile
%
st=fclose(fi);
refresh(1);
%
[fi,txterr]=fopen('datos.dat','r');
%
[z]=fscanf(fi,'%d',1);
%
[ntexto]=fscanf(fi,'%s',1);

for j=1:z+1
  [d]=fscanf(fi,'%d',1);
  [b]=fscanf(fi,'%f',3);
BX(j,:)=b';
end
%
figure(2);
clf(2);

hold on;
plot(BX(:,1),BX(:,2),"x;datos;");
for i=2:n+2
texto=sprintf("-;P_%d(x);",i-2);
  plot(AX(:,1),AX(:,i),texto);
end

axis([-Inf +Inf ymin ymax]);
title('Ajuste por minimos cuadrados');
refresh(2);


