%% Interfaz
% Array X
x_str = input('Inserte array X: ','s');
x = str2double(split(x_str));
fprintf('\n');
% Array Y
y_str = input('Inserte array Y: ','s');
y = str2double(split(y_str));
fprintf('\n');
% Error por dimensiones
if (length(x) ~= length(y))
fprintf('ERROR! Revisa que las dimensiones del array X e Y sean iguales.\n\n');
end
%% Programa
% Array X con más resolución (100 puntos)
x_fit_accurate = linspace(min(x),max(x));
% Prueba y evaluación de diferentes regresiones polinómicas (hasta orden 5)
for n = 1 : 5
p = polyfit(x,y,n);
y_fit(:,n) = polyval(p,x);
y_fit_accurate(:,n) = polyval(p,x_fit_accurate);
Rsq(n) = 1 - sum((y - y_fit(:,n)).^2)/sum((y - mean(y)).^2);
end
% Elección de la mejor regresión (Rsq)
RsqMax = max(Rsq);
idx_RsqMax = find(Rsq == RsqMax,01,'first');
% NOTA. La variable "Rsq" hace referencia al parámetro R^2, el cual se
% utiliza para conocer la calidad de una regresión.
% NOTA 2. Si más de una regresión tienen el mismo "Rsq", se elige el
% primero de todos por sencillez.
%% Gráfico
figure;
plot(x,y,'o');
hold on;
plot(x_fit_accurate,y_fit_accurate(:,idx_RsqMax));
grid on;