You are on page 1of 5

20/10/2015

Inicio 

Ajuste de datos con MATLAB

MATLAB 

Numérico

Ajuste de datos con MATLAB

Raíces de ecuaciones
Sistemas de ecuaciones
Valores y vectores
propios
Integración numérica
Ecuaciones
diferenciales
Interpolación, regresión

MATLAB dispone de la función polyfit para ajustar datos a un polinomio de grado n. También tiene la
posibilidad de ajustar los datos de forma interactiva en la ventana gráfica (Figure Windows) seleccionado en el
menú 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 las
incógnitas, los coeficientes a1,a2, a3 del polinomio que mejor ajusta
2

y = a1 x

y1

+ a2 x + a3
2

x

1
2

⎜ x
⎜ y2 ⎟
2


⎟ = ⎜
⎜ ... ⎟
⎜ ...

yn

2
xn

x1
x2
...
xn

1


a
⎛ 1 ⎞
1 ⎟


a2 ⎟

... ⎟ ⎝

a3

1

Tenemos n=9 pares de datos (xi,yi). Por lo que tenemos un sistema de nueve ecuaciones con tres incógnitas, que
podemos 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 on
plot(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 x
plot(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áfica
se 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
http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/numerico/datos/datos_1.html

1/5

es/sbweb/energias­renovables/MATLAB/numerico/datos/datos_1.1 34.'markerfacecolor'.11]; p=polyfit(log10(x).1) 1 y = ax + c p=polyfit(log(x).max(x).'ro'.html 2/5 .1.1) y=c∙eax y=a·ln(x)+c p=polyfit(x. logarítmica. Renombramos el script datos_2 como datos_7 para cambiar la llamada a la función MATLAB polyfit en vez de regresion.y.495 Renombramos el script datos_3 como datos_8 para cambiar la llamada a la función MATLAB polyfit en vez de regresion.68 1. etc.20/10/2015 Ajuste de datos con MATLAB n=m­1.p(1)); fprintf('coeficiente c = %3.1) p=polyfit(x.01 2.y.23 20.81 1.1); fprintf('exponente a= %2.8.max(x). y nos aparece el vector p que contiene los coeficientes a1./y. log(y).log10(y).'markersize'.52 1.y.33 1. p(1) guarda el parámetro a y el segundo elemento.'markersize'. exponencial.91 2.^p(1); plot(x.'markerfacecolor'.53 42.x); plot(x.'b') xlabel('x') ylabel('y') title('Regresión potencial') hold off Corremos el script datos_7 en la ventana de comandos >> datos_7 exponente a= 0.y. log(y).44]; y=[0 4.50); z=(10^p(2))*x.3f\n'.ehu. tal como se muestra en el siguiente cuadro Función Llamada a polyfit y=c∙xa p=polyfit(log(x). x=[12 41 93 147 204 264 373 509 773]; y=[930 815 632 487 370 265 147 76 17]; http://www.63 46.'r') x=linspace(min(x).'ro'.43]; p=polyfit(x.a2.sc.2) %gráficos hold on plot(x.03 8. Renombramos el script datos_5 como datos_6.12 14.3446    3. para cambiar la llamada a la función MATLAB polyfit en vez de a pol_regresion x=[0 1 2 3 4 5 6 7 7. a3 del polinomio >> datos_6 p =     0. p(2) guarda el parámetro c.331 coeficiente c = 0.1188 También se puede utilizar polyfit para realizar ajustes a una función potencial.33 27.z.8.y.06 1. x=[10 20 30 40 50 60 70 80]; y=[1.7004   ­0.50); y=polyval(p.1) El primer elemento del vector p devuelto por polyfit.'r') x=linspace(min(x).'b') xlabel('x') ylabel('y') title('Polinomio aproximador') hold off En la ventana de comandos corremos el script datos_6. El grado n del polinomio no puede ser mayor que m­1.(10^p(2))); hold on plot(x.3f\n'.

 max(y)+.'b') xlabel('x') ylabel('y') title('Regresión exponencial') hold off Corremos el script datos_8 en la ventana de comandos >> datos_8 exponente a= ­0.98 0.05 0.es/sbweb/energias­renovables/MATLAB/numerico/datos/datos_1.42 0.05.xp); plot(x.'+') Aparece la representación gráfica de los puntos con el símbolo + http://www.35 0.58 0.y.y.3 0.15 0.12]; >> plot(x.max(x).y.1 0.10 0.42 0.42 0.log(y).20); yp=polyval(p.1); fprintf('exponente a= %2.05 0.1 1.15 0.15 0.max(x). En la ventana de comandos escribimos >> x=[0.1.2 0.98 1.1729 Vamos a realizar el ajuste de datos de forma interactiva en la ventana Figure Window.12]; p=polyfit(x.72 0.35 0.1 1.005 coeficiente c = 1036.20/10/2015 Ajuste de datos con MATLAB p=polyfit(x.25 0.'markersize'.4]; >> y=[0.100); z=exp(p(2))*exp(x*p(1)); plot(x.3 0.05.8.max(x)+.'r+'.exp(p(2))); hold on plot(x.xp.5762    0.3f\n'.html 3/5 .sc.p(1)); fprintf('coeficiente c = %3.25 0.1) xp=linspace(min(x).72 0. ylabel('y').25 0.98 1.'Location'.05 0.1]) grid on xlabel('x').'SouthEast') Corremos el script en la ventana de comandos >> datos_9 p =     2.y.2 0.58 0.1 0.72 0.25 0.'ro'.85 0.1 0.25 0.4 1. title('ajuste con polyfit') legend('datos originales'.3 0.yp) axis([min(x)­0.4]; y=[0.12 Escribimos el script datos_9 x=[0.'markerfacecolor'.85 0.z. tomadas de una experiencia x y 0.'mejor ajuste'.3f\n'.35 1.85 0.ehu.'r') x=linspace(min(x).58 0.25 0.2 0.896 Ajuste de forma interactiva Determinar la recta de regresión para la siguiente tabla de datos. min(y)­0.

ehu.sc.es/sbweb/energias­renovables/MATLAB/numerico/datos/datos_1.html 4/5 . Observamos en la ventana Figure 1 que el 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 los coeficientes del polinomio de ajuste: Seleccionamos en el segundo panel titulado Numerical results Fit/ linear y nos aparece y = p1*x + p2  http://www.20/10/2015 Ajuste de datos con MATLAB Seleccionamos en el menú Tools/Basic Fitting. y activamos la casilla linear (polinomio de grado 1) y quadratic(polinomio de grado dos) en el primer panel titulado Plot fits.

0976    p3 = 0. podemos introducir un valor o una expresión para ser evaluada pulsando el botón Evaluate en el tercer panel titulado Find y=f(x).1187 Seleccionamos en el segundo panel titulado Numerical results Fit/quadratic y nos aparece y = p1*x^2 + p2*x + p3  Coefficients:    p1 = ‐3.   Energías Renovables ©EUITI de Eibar http://www.5762    p2 = 0.html 5/5 .17286 Norm of residuals =     0.045696 Pulsamos el botón con la flecha ­­> para ampliar otra vez el cuadro de diálogo.046071 Norm of residuals =     0. El ajuste de datos de forma interactiva en la ventana Figure Window admite muchas posibilidades.20/10/2015 Ajuste de datos con MATLAB Coefficients:    p1 = 2.381    p2 = 4.sc.es/sbweb/energias­renovables/MATLAB/numerico/datos/datos_1.ehu. que se pueden consultar en el sistema de ayuda (Help).