clear
disp('------------------------------------------------------------');
disp('---------   Programa de representacion grafica   -----------');
disp('---------     de ajuste por minimos cuadrados    -----------');
disp('---------         GMNI - UDC (20250131)          -----------');
disp('------------------------------------------------------------');
disp('--             Puntos base datos: datos.dat               --');
disp('--   Puntos para representacion del ajuste: ajuste.dat    --');
disp('------------------------------------------------------------\n');
n=input('Indique el orden maximo del polinomio de ajuste (m): ');
xmin=-Inf;
xmax=Inf;
ymin=-Inf;
ymax=Inf;
ymin=input('Indique el valor minimo del eje Y (Si se omite se ajusta a los datos): ');
ymax=input('Indique el valor maximo 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,transpose(error),'-o','DisplayName','Raiz cuadrada del error cuadratico medio');
title('Raiz cuadrada del error cuadratico medio del ajuste por minimos cuadrados');
legend
%
j=0;
while(1)
  j=j+1;
  [a,count]=fscanf(fi,'%f',n+2);
  if(count == n+2)
    AX(j,:)=transpose(a);
  else
    break;
  end
end
%
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);
  for i=1:3
    [b]=fscanf(fi,'%s',1);
    [b] = strrep (b, 'D', 'E');
    [b] = strrep (b, 'd', 'e');
    c(i) = sscanf(b,'%f',1);
  end
BX(j,:)=c';
end
%
figure(2);
clf(2);

hold on;
plot(BX(:,1),BX(:,2),'x','DisplayName','datos')

for i=2:n+2
texto=sprintf('P_{%d}(x)',i-2);
  plot(AX(:,1),AX(:,i),'-','DisplayName',texto)
end
legend
hold off

title('Ajuste por minimos cuadrados');


