Main Content

La traducción de esta página está obsoleta. Haga clic aquí para ver la última versión en inglés.

Ajuste programático

Funciones para modelos polinomiales de MATLAB

Dos funciones de MATLAB® pueden modelar sus datos con un polinomio.

Funciones de ajuste polinomial

Función

Descripción

polyfit

polyfit(x,y,n) halla los coeficientes de un polinomio p(x) de grado n que se ajusta a los datos de y minimizando la suma de los cuadrados de las desviaciones de los datos del modelo (ajuste de mínimos cuadrados).

polyval

polyval(p,x) devuelve el valor de un polinomio de grado n determinado por polyfit y evaluado en x.

En este ejemplo se muestra cómo modelar datos con un polinomio.

Mida una cantidad y en varios valores de tiempo t.

t = [0 0.3 0.8 1.1 1.6 2.3];
y = [0.6 0.67 1.01 1.35 1.47 1.25];
plot(t,y,'o')
title('Plot of y Versus t')

Puede intentar modelar estos datos utilizando una función polinómica de segundo grado,

y=a2t2+a1t+a0.

Los coeficientes desconocidos a0, a1 y a2 se calculan minimizando la suma de los cuadrados de las desviaciones de los datos del modelo (ajuste de mínimos cuadrados).

Utilice polyfit para encontrar los coeficientes del polinomio.

p = polyfit(t,y,2)
p = 1×3

   -0.2942    1.0231    0.4981

MATLAB calcula los coeficientes del polinomio en potencias descendentes.

El modelo polinomial de segundo grado de los datos se da por la ecuación

y=-0.2942t2+1.0231t+0.4981.

Evalúe el polinomio en tiempos espaciados uniformemente, t2. Después, represente los datos originales y el modelo en la misma gráfica.

t2 = 0:0.1:2.8;
y2 = polyval(p,t2);
figure
plot(t,y,'o',t2,y2)
title('Plot of Data (Points) and Model (Line)')

Evalúe el modelo en el vector de tiempos de datos

y2 = polyval(p,t);

Calcule los valores residuales.

res = y - y2;

Represente los valores residuales.

figure, plot(t,res,'+')
title('Plot of the Residuals')

Observe que el ajuste de segundo grado sigue aproximadamente la forma básica de los datos, pero no captura la curva suave en la que los datos parecen estar. Parece haber un patrón en los valores residuales, lo que indica que podría ser necesario un modelo diferente. Un polinomio de quinto grado (que se muestra a continuación) hace un mejor trabajo al seguir las fluctuaciones en los datos.

Repita el ejercicio, esta vez usando un polinomio de quinto grado de polyfit.

p5 = polyfit(t,y,5)
p5 = 1×6

    0.7303   -3.5892    5.4281   -2.5175    0.5910    0.6000

Evalúe el polinomio en t2 y represente el ajuste en la parte superior de los datos en una nueva ventana de figura.

y3 = polyval(p5,t2);   
figure
plot(t,y,'o',t2,y3)
title('Fifth-Degree Polynomial Fit')

Nota

Si está intentando modelar una situación física, siempre es importante considerar si un modelo de un orden específico es significativo en su situación.

Modelo lineal con términos no polinómicos

En este ejemplo se muestra cómo ajustar los datos con un modelo lineal que contiene términos no polinómicos.

Cuando una función polinómica no produce un modelo satisfactorio de los datos, puede intentar utilizar un modelo lineal con términos no polinómicos. Por ejemplo, considere la siguiente función que es lineal en los parámetros a0, a1 y a2, pero no lineal en los datos t:

y=a0+a1e-t+a2te-t.

Puede calcular los coeficientes desconocidos a0, a1 y a2 construyendo y resolviendo un conjunto de ecuaciones simultáneas y resolviendo los parámetros. La sintaxis siguiente logra esto formando una matriz de diseño, donde cada columna representa una variable que se utiliza para predecir la respuesta (un término en el modelo) y cada fila corresponde a una observación de esas variables.

Introduzca t e y como vectores columna.

t = [0 0.3 0.8 1.1 1.6 2.3]';
y = [0.6 0.67 1.01 1.35 1.47 1.25]';

Forme la matriz de diseño.

X = [ones(size(t))  exp(-t)  t.*exp(-t)];

Calcule los coeficientes del modelo.

a = X\y
a = 3×1

    1.3983
   -0.8860
    0.3085

Por lo tanto, el modelo de los datos viene dado por

y=1.3983-0.8860e-t+0.3085te-t.

Ahora evalúe el modelo en puntos espaciados regularmente y represente el modelo con los datos originales.

T = (0:0.1:2.5)';
Y = [ones(size(T))  exp(-T)  T.*exp(-T)]*a;
plot(T,Y,'-',t,y,'o'), grid on
title('Plot of Model and Original Data')

Regresión múltiple

En este ejemplo se muestra cómo utilizar la regresión múltiple para modelar datos que son una función de más de una variable predictora.

Cuando y es una función de más de una variable predictora, las ecuaciones de matriz que expresan las relaciones entre las variables deben expandirse para dar cabida a los datos adicionales. Esto se llama regresión múltiple.

Mida una cantidad y para varios valores de x1 y x2. Almacene estos valores en vectores x1, x2, e y, respectivamente.

x1 = [.2 .5 .6 .8 1.0 1.1]';
x2 = [.1 .3 .4 .9 1.1 1.4]';
y  = [.17 .26 .28 .23 .27 .24]';

Un modelo de estos datos es de la forma

y=a0+a1x1+a2x2.

La regresión múltiple resuelve los coeficientes desconocidos a0, a1, y a2 minimizando la suma de los cuadrados de las desviaciones de los datos del modelo (ajuste de mínimos cuadrados).

Construya y resuelva el conjunto de ecuaciones simultáneas formando una matriz de diseño, X.

X = [ones(size(x1))  x1  x2];

Resuelva los parámetros mediante el operador de barra invertida.

a = X\y
a = 3×1

    0.1018
    0.4844
   -0.2847

El modelo de ajuste de mínimos cuadrados de los datos es

y=0.1018+0.4844x1-0.2847x2.

Para validar el modelo, busque el máximo del valor absoluto de la desviación de los datos del modelo.

Y = X*a;
MaxErr = max(abs(Y - y))
MaxErr = 0.0038

Este valor es mucho menor que cualquiera de los valores de datos, lo que indica que este modelo sigue con precisión los datos.

Ajuste programático

En este ejemplo se muestra cómo utilizar las funciones de MATLAB para:

Cargue los datos del censo de muestra de census.mat, que contiene datos de población de EE. UU. de los años 1790 a 1990.

load census

Esto añade las dos variables siguientes al área de trabajo de MATLAB.

  • cdate es un vector columna que contiene los años 1790 a 1990 en incrementos de 10.

  • pop es un vector columna con los números de población de EE. UU. correspondientes a cada año en cdate.

Represente los datos.

plot(cdate,pop,'ro')
title('U.S. Population from 1790 to 1990')

La gráfica muestra un patrón sólido, que indica una alta correlación entre las variables.

Calcular coeficientes de correlación

En esta porción del ejemplo, determinará la correlación estadística entre las variables cdate y pop para justificar el modelado de datos. Para obtener más información acerca de los coeficientes de correlación, consulte Correlación lineal.

Calcule la matriz correlación-coeficiente.

corrcoef(cdate,pop)
ans = 2×2

    1.0000    0.9597
    0.9597    1.0000

Los elementos en la diagonal de la matriz representan la correlación perfecta de cada variable consigo misma y son iguales a 1. Los elementos fuera de la diagonal están muy cerca de 1, lo que indica que hay una fuerte correlación estadística entre las variables cdate y pop.

Ajustar un polinomio a los datos

En esta parte del ejemplo se aplican las funciones polyfit y polyval de MATLAB para modelar los datos.

Calcule los parámetros de ajuste.

[p,ErrorEst] = polyfit(cdate,pop,2);

Evalúe el ajuste.

pop_fit = polyval(p,cdate,ErrorEst);

Represente los datos y el ajuste.

plot(cdate,pop_fit,'-',cdate,pop,'+');
title('U.S. Population from 1790 to 1990')
legend('Polynomial Model','Data','Location','NorthWest');
xlabel('Census Year');
ylabel('Population (millions)');

La gráfica muestra que el ajuste polinomial cuadrático proporciona una buena aproximación a los datos.

Calcule los valores residuales para este ajuste.

res = pop - pop_fit;
figure, plot(cdate,res,'+')
title('Residuals for the Quadratic Polynomial Model')

Observe que la gráfica de los valores residuales muestra un patrón, lo que indica que un polinomio de segundo grado podría no ser adecuado para modelar estos datos.

Representar y calcular límites de confianza

Los límites de confianza son intervalos de confianza para una respuesta pronosticada. La anchura del intervalo indica el grado de certeza del ajuste.

En esta parte del ejemplo se aplican las funciones polyfit y polyval a los datos de muestra census para producir límites de confianza de un modelo polinomial de segundo orden.

El código siguiente utiliza un intervalo de ±2Δ, que corresponde a un intervalo de confianza del 95% para muestras grandes.

Evalúe el ajuste y la estimación del error de predicción (delta).

[pop_fit,delta] = polyval(p,cdate,ErrorEst);

Represente los datos, el ajuste y los límites de confianza.

plot(cdate,pop,'+',...
     cdate,pop_fit,'g-',...
     cdate,pop_fit+2*delta,'r:',...
     cdate,pop_fit-2*delta,'r:'); 
xlabel('Census Year');
ylabel('Population (millions)');
title('Quadratic Polynomial Fit with Confidence Bounds')
grid on

El intervalo del 95% indica que tiene un 95% de probabilidad de que una nueva observación caiga dentro de los límites.