Post on 04-Dec-2015
description
20/10/2015 Ajuste de datos con MATLAB
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/datos/datos_1.html 1/5
Raíces de ecuaciones
Sistemas de ecuaciones
Valores y vectorespropios
Integración numérica
Ecuacionesdiferenciales
Interpolación, regresión
Inicio MATLAB Numérico
Ajuste de datos con MATLABMATLAB dispone de la función polyfit para ajustar datos a un polinomio de grado n. También tiene laposibilidad de ajustar los datos de forma interactiva en la ventana gráfica (Figure Windows) seleccionado en elmenú Tools/Basic Fitting.
Ajuste de datos con el operador, división por la izquierda \.
Conocidos los n pares de datos (xi,yi) i=1,2...n resolvemos el sistema de n ecuaciones para determinar lasincógnitas, los coeficientes a1,a2, a3 del polinomio que mejor ajusta
Tenemos n=9 pares de datos (xi,yi). Por lo que tenemos un sistema de nueve ecuaciones con tres incógnitas, quepodemos resolver con el operador \ (división por la izquierda)
x=[0,1,2,3,4,5,6,7,7.44]';y=[0,4.03,8.12,14.23,20.33,27.1,34.53,42.63,46.43]';M=[x.^2,x,ones(size(x))];a=M\y %coeficientes del polinomio
hold onplot(x,y,'ro','markersize',8,'markerfacecolor','r')x=(0:0.1:max(x))';y=[x.^2,x,ones(size(x))]*a; %evalúa el polinomio para cada valor de xplot(x,y,'b')xlabel('x')ylabel('y')title('Polinomio aproximador')hold off
En la ventana de comandos vemos los coeficientes a1,a2, a3 como elementos del vector a. En la ventana gráficase obtiene una figura similar.
a = 0.3446 3.7004 0.1188
Ajuste de datos con polyfit
Para el ajuste de datos a un polinomio se utiliza la función MATLAB polifit, cuya sintaxis es la siguiente:
p=polyfit(x,y,n)
x, y son los vectores de las abscisas y de las ordenadas de los datos, respectivamente
n, es el grado del polinomio al que se quieren ajustar los datos
p, es el vector de los coeficientes de dicho polinomio.
Para n=1 tenemos la regresión lineal. Si m es el número de datos, el polinomio pasa a través de todos los puntos si
y = + x +a1x2 a2 a3
=
⎛⎝⎜⎜⎜
y1
y2
...yn
⎞⎠⎟⎟⎟
⎛
⎝⎜⎜⎜⎜
x21
x22
...x2
n
x1
x2
...xn
1
1
...1
⎞
⎠⎟⎟⎟⎟
⎛⎝⎜
a1
a2
a3
⎞⎠⎟
20/10/2015 Ajuste de datos con MATLAB
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/datos/datos_1.html 2/5
n=m1. El grado n del polinomio no puede ser mayor que m1.
Renombramos el script datos_5 como datos_6, para cambiar la llamada a la función MATLAB polyfit en vez de apol_regresion
x=[0 1 2 3 4 5 6 7 7.44];y=[0 4.03 8.12 14.23 20.33 27.1 34.53 42.63 46.43];p=polyfit(x,y,2)
%gráficoshold onplot(x,y,'ro','markersize',8,'markerfacecolor','r')x=linspace(min(x),max(x),50);y=polyval(p,x);plot(x,y,'b')xlabel('x')ylabel('y')title('Polinomio aproximador')hold off
En la ventana de comandos corremos el script datos_6, y nos aparece el vector p que contiene los coeficientesa1,a2, a3 del polinomio
>> datos_6p = 0.3446 3.7004 0.1188
También se puede utilizar polyfit para realizar ajustes a una función potencial, exponencial, logarítmica, etc, talcomo se muestra en el siguiente cuadro
Función Llamada a polyfit
y=c∙xa p=polyfit(log(x), log(y),1)
y=c∙eax p=polyfit(x, log(y),1)y=a·ln(x)+c p=polyfit(log(x),y,1)
p=polyfit(x,1./y,1)
El primer elemento del vector p devuelto por polyfit, p(1) guarda el parámetro a y el segundo elemento, p(2)guarda el parámetro c.
Renombramos el script datos_2 como datos_7 para cambiar la llamada a la función MATLAB polyfit en vez deregresion.
x=[10 20 30 40 50 60 70 80];y=[1.06 1.33 1.52 1.68 1.81 1.91 2.01 2.11];p=polyfit(log10(x),log10(y),1);fprintf('exponente a= %2.3f\n',p(1));fprintf('coeficiente c = %3.3f\n',(10^p(2)));hold onplot(x,y,'ro','markersize',8,'markerfacecolor','r')x=linspace(min(x),max(x),50);z=(10^p(2))*x.^p(1);plot(x,z,'b')xlabel('x')ylabel('y')title('Regresión potencial')hold off
Corremos el script datos_7 en la ventana de comandos
>> datos_7exponente a= 0.331coeficiente c = 0.495
Renombramos el script datos_3 como datos_8 para cambiar la llamada a la función MATLAB polyfit en vez deregresion.
x=[12 41 93 147 204 264 373 509 773];y=[930 815 632 487 370 265 147 76 17];
y =1
ax + c
20/10/2015 Ajuste de datos con MATLAB
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/datos/datos_1.html 3/5
p=polyfit(x,log(y),1);fprintf('exponente a= %2.3f\n',p(1));fprintf('coeficiente c = %3.3f\n',exp(p(2)));hold onplot(x,y,'ro','markersize',8,'markerfacecolor','r')x=linspace(min(x),max(x),100);z=exp(p(2))*exp(x*p(1));plot(x,z,'b')xlabel('x')ylabel('y')title('Regresión exponencial')hold off
Corremos el script datos_8 en la ventana de comandos
>> datos_8exponente a= 0.005coeficiente c = 1036.896
Ajuste de forma interactiva
Determinar la recta de regresión para la siguiente tabla de datos, tomadas de una experiencia
x 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4y 0.25 0.42 0.58 0.72 0.85 0.98 1.10 1.12
Escribimos el script datos_9
x=[0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4];y=[0.25 0.42 0.58 0.72 0.85 0.98 1.1 1.12];p=polyfit(x,y,1)xp=linspace(min(x),max(x),20);yp=polyval(p,xp);plot(x,y,'r+',xp,yp)axis([min(x)0.05,max(x)+.05, min(y)0.1, max(y)+.1])grid onxlabel('x'), ylabel('y'), title('ajuste con polyfit')legend('datos originales','mejor ajuste','Location','SouthEast')
Corremos el script en la ventana de comandos
>> datos_9p = 2.5762 0.1729
Vamos a realizar el ajuste de datos de forma interactiva en la ventana Figure Window. En la ventana decomandos escribimos
>> x=[0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4];>> y=[0.25 0.42 0.58 0.72 0.85 0.98 1.1 1.12];>> plot(x,y,'+')
Aparece la representación gráfica de los puntos con el símbolo +
20/10/2015 Ajuste de datos con MATLAB
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/datos/datos_1.html 4/5
Seleccionamos en el menú Tools/Basic Fitting, y activamos la casilla linear (polinomio de grado 1) yquadratic(polinomio de grado dos) en el primer panel titulado Plot fits. Observamos en la ventana Figure 1 queel polinomio de segundo grado en color verde parece que se ajusta mejor a los datos experimentales
Ampliamos el cuadro de diálogo pulsando en el botón con la flecha inferior derecha > nos aprece loscoeficientes del polinomio de ajuste:
Seleccionamos en el segundo panel titulado Numerical results Fit/ linear y nos aparece
y = p1*x + p2
20/10/2015 Ajuste de datos con MATLAB
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/datos/datos_1.html 5/5
Coefficients: p1 = 2.5762 p2 = 0.17286
Norm of residuals = 0.1187
Seleccionamos en el segundo panel titulado Numerical results Fit/quadratic y nos aparece
y = p1*x^2 + p2*x + p3
Coefficients: p1 = ‐3.381 p2 = 4.0976 p3 = 0.046071
Norm of residuals = 0.045696
Pulsamos el botón con la flecha > para ampliar otra vez el cuadro de diálogo, podemos introducir un valor o unaexpresión para ser evaluada pulsando el botón Evaluate en el tercer panel titulado Find y=f(x).
El ajuste de datos de forma interactiva en la ventana Figure Window admite muchas posibilidades, que se puedenconsultar en el sistema de ayuda (Help).
Energías Renovables ©EUITI de Eibar