Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Ajuste programático

Funciones para los modelos polinomialesMATLAB

Dos funciones pueden modelar los datos con un polinomio.MATLAB®

Funciones de ajuste polinomial

Función

Descripción

polyfit

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

polyval

Devuelve el valor de un polinomio de grado que fue determinado por, evaluado en.polyval(p,x)npolyfitx

Este ejemplo muestra cómo modelar los datos con un polinomio.

Mida una cantidad en varios valores de tiempo.yt

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,

<math display="block">
<mrow>
<mi>y</mi>
<mo>=</mo>
<msub>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
<msup>
<mrow>
<mi>t</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msup>
<mo>+</mo>
<msub>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
<mi>t</mi>
<mo>+</mo>
<msub>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>0</mn>
</mrow>
</msub>
<mo>.</mo>
</mrow>
</math>

Los coeficientes desconocidos,

<math display="block">
<mrow>
<msub>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>0</mn>
</mrow>
</msub>
</mrow>
</math>
,
<math display="block">
<mrow>
<msub>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</math>
Y
<math display="block">
<mrow>
<msub>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</math>
, se calculan minimizando la suma de los cuadrados de las desviaciones de los datos del modelo (ajuste de mínimos cuadrados).

Se usa para encontrar los coeficientes polinómicos.polyfit

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

   -0.2942    1.0231    0.4981

MATLAB calcula los coeficientes polinómicos en potencias descendentes.

El modelo Polinómico de segundo grado de los datos viene dado por la ecuación

<math display="block">
<mrow>
<mi>y</mi>
<mo>=</mo>
<mo>-</mo>
<mn>0</mn>
<mo>.</mo>
<mn>2</mn>
<mn>9</mn>
<mn>4</mn>
<mn>2</mn>
<msup>
<mrow>
<mi>t</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msup>
<mo>+</mo>
<mn>1</mn>
<mo>.</mo>
<mn>0</mn>
<mn>2</mn>
<mn>3</mn>
<mn>1</mn>
<mi>t</mi>
<mo>+</mo>
<mn>0</mn>
<mo>.</mo>
<mn>4</mn>
<mn>9</mn>
<mn>8</mn>
<mn>1</mn>
<mo>.</mo>
</mrow>
</math>

Evalúe el polinomio en tiempos uniformemente espaciados,.t2 A continuación, trace los datos originales y el modelo en el mismo trazado.

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 tiempo de datos

y2 = polyval(p,t);

Calcule los residuos.

res = y - y2;

Trace los residuos.

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 mentir. Parece haber un patrón en los residuos, lo que indica que puede ser necesario un modelo diferente. Un polinomio de quinto grado (que se muestra a continuación) hace un mejor trabajo de seguir las fluctuaciones en los datos.

Repite 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 y trace el ajuste en la parte superior de los datos en una nueva ventana de figura.t2

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

Nota

Si está tratando de 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 polinomiales

Este ejemplo 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, tenga en cuenta la siguiente función que es lineal en los parámetros

<math display="block">
<mrow>
<msub>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>0</mn>
</mrow>
</msub>
</mrow>
</math>
,
<math display="block">
<mrow>
<msub>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</math>
Y
<math display="block">
<mrow>
<msub>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</math>
, pero no lineales en el
<math display="block">
<mrow>
<mi>t</mi>
</mrow>
</math>
Datos:

<math display="block">
<mrow>
<mi>y</mi>
<mo>=</mo>
<msub>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>0</mn>
</mrow>
</msub>
<mo>+</mo>
<msub>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
<msup>
<mrow>
<mi>e</mi>
</mrow>
<mrow>
<mo>-</mo>
<mi>t</mi>
</mrow>
</msup>
<mo>+</mo>
<msub>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
<mi>t</mi>
<msup>
<mrow>
<mi>e</mi>
</mrow>
<mrow>
<mo>-</mo>
<mi>t</mi>
</mrow>
</msup>
<mo>.</mo>
</mrow>
</math>

Puede calcular los coeficientes desconocidos

<math display="block">
<mrow>
<msub>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>0</mn>
</mrow>
</msub>
</mrow>
</math>
,
<math display="block">
<mrow>
<msub>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</math>
Y
<math display="block">
<mrow>
<msub>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</math>
construyendo y resolviendo un conjunto de ecuaciones simultáneas y resolviendo para los parámetros. La sintaxis siguiente logra esto formando un, donde cada columna representa una variable utilizada para predecir la respuesta (un término en el modelo) y cada fila corresponde a una observación de esas variables.design matrix

Introduzca y como vectores de columna.ty

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

<math display="block">
<mrow>
<mi>y</mi>
<mo>=</mo>
<mn>1</mn>
<mo>.</mo>
<mn>3</mn>
<mn>9</mn>
<mn>8</mn>
<mn>3</mn>
<mo>-</mo>
<mn>0</mn>
<mo>.</mo>
<mn>8</mn>
<mn>8</mn>
<mn>6</mn>
<mn>0</mn>
<msup>
<mrow>
<mi>e</mi>
</mrow>
<mrow>
<mo>-</mo>
<mi>t</mi>
</mrow>
</msup>
<mo>+</mo>
<mn>0</mn>
<mo>.</mo>
<mn>3</mn>
<mn>0</mn>
<mn>8</mn>
<mn>5</mn>
<mi>t</mi>
<msup>
<mrow>
<mi>e</mi>
</mrow>
<mrow>
<mo>-</mo>
<mi>t</mi>
</mrow>
</msup>
<mo>.</mo>
</mrow>
</math>

Ahora evalúe el modelo en puntos espaciados regularmente y trace 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

Este ejemplo muestra cómo utilizar la regresión múltiple para modelar datos que es 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 ampliarse para acomodar los datos adicionales. Esto se llama.multiple regression

Mida una cantidad

<math display="block">
<mrow>
<mi>y</mi>
</mrow>
</math>
para varios valores de
<math display="block">
<mrow>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</math>
Y
<math display="block">
<mrow>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</math>
. Almacene estos valores en vectores y, respectivamente.x1x2y

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

<math display="block">
<mrow>
<mi>y</mi>
<mo>=</mo>
<msub>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>0</mn>
</mrow>
</msub>
<mo>+</mo>
<msub>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
<mo>+</mo>
<msub>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
<mo>.</mo>
</mrow>
</math>

La regresión múltiple resuelve los coeficientes desconocidos

<math display="block">
<mrow>
<msub>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>0</mn>
</mrow>
</msub>
</mrow>
</math>
,
<math display="block">
<mrow>
<msub>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</math>
Y
<math display="block">
<mrow>
<msub>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</math>
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 utilizando el operador de barra diagonal inversa.

a = X\y
a = 3×1

    0.1018
    0.4844
   -0.2847

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

<math display="block">
<mrow>
<mi>y</mi>
<mo>=</mo>
<mn>0</mn>
<mo>.</mo>
<mn>1</mn>
<mn>0</mn>
<mn>1</mn>
<mn>8</mn>
<mo>+</mo>
<mn>0</mn>
<mo>.</mo>
<mn>4</mn>
<mn>8</mn>
<mn>4</mn>
<mn>4</mn>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
<mo>-</mo>
<mn>0</mn>
<mo>.</mo>
<mn>2</mn>
<mn>8</mn>
<mn>4</mn>
<mn>7</mn>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
<mo>.</mo>
</mrow>
</math>

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

Este ejemplo muestra cómo utilizar funciones para:MATLAB

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

load census

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

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

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

Graficar los datos.

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

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

Calcular coeficientes de correlación

En esta parte del ejemplo, se determina la correlación estadística entre las variables y se justifica el modelado de los datos.cdatepop Para obtener más información sobre los coeficientes de correlación, consulte.Correlación lineal

Calcule la matriz de coeficiente de correlación.

corrcoef(cdate,pop)
ans = 2×2

    1.0000    0.9597
    0.9597    1.0000

Los elementos de la matriz diagonal representan la correlación perfecta de cada variable consigo mismo y son iguales a 1. Los elementos fuera de la diagonal son muy cercanos a 1, lo que indica que hay una fuerte correlación estadística entre las variables y.cdatepop

Ajuste un polinomio a los datos

Esta parte del ejemplo aplica las funciones y para modelar los datos.polyfitpolyvalMATLAB

Calcule los parámetros de ajuste.

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

Evalúe el ajuste.

pop_fit = polyval(p,cdate,ErrorEst);

Graficar 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 la forma cuadrática-polinómica proporciona una buena aproximación a los datos.

Calcule los residuos 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 residuos exhibe un patrón, lo que indica que un polinomio de segundo grado podría no ser adecuado para modelar estos datos.

Trazar y calcular límites de confianza

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

Esta parte del ejemplo se aplica y a los datos de ejemplo para producir límites de confianza para un modelo Polinómico de segundo orden.polyfitpolyvalcensus

El código siguiente utiliza un intervalo de ±2Δ, que corresponde a un intervalo de confianza de 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);

Trace 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 de 95% indica que tiene un 95% de probabilidades de que una nueva observación se caiga dentro de los límites.