FANDOM


Ajuste de un modelo no -lineal

En muchos casos de ingeniería se presentan modelos no lineales que deben ser ajustado a un conjunto de datos. En el presente contexto, estos modelos se definen como aquellos que tienen dependencia no lineal de sus parámetros. Por ejemplo:

    $(x)=a_0(1-\exp^{-a_1x})+ \exp

Un problema asociado a un modelo no-lineal es del tipo:

    y= f(x,0) + \epsilon


basado en datos multidimensionales x,y, donde f es alguna función no-lineal respecto a algunos parametros desconocidos 0. La minimización pretende obtener los valores de los parámetros asociados con la mejor curva de ajuste (generalmente usando el método de los mínimos cuadrados). La ecuación anterior no puede ser manipulada para se llevada a la forma general de la ecuación.

Como en el caso de los mínimos cuadrados lineales, la regresión no lineal se basa en la determinación de valores de los parámetros que minimizan la suma de los cuadrados de los residuos. Sin embargo, en el caso de modelos no lineales, la solución se lleva a cabo a través de métodos iterativos.

El método de Gauss-Newton es uno de los algoritmos más usados para minimizar la suma de los cuadrados de los residuos entre los datos y las ecuaciones lienales. Es una modificación del método de Optimización de Newton que no usa segundas derivadas. El algoritmo representa un procedimiento iterativo. Esto significa que se debe proporcionar una estimación inicial del parámetro vector denominado p^0. Algunos problemas de regresión no-lineal pueden linealizarse mediante una transformación en la formulación del modelo, lo que permite un estimación de los parámetros desconocidos a través de un modelo de regresión lineal sin la necesidad de utilizar procedimiento iterativos.


Ejemplo modelo ajuste modelo no-lineal

Sea el modelo no-lineal f(x)=a + (4-b)\exp(-cx), con los datos de observación

    x=1,2,3,4,5,6,7,8,9,10
    f_i=1,3,10,22,34,58,62,87,102,114

La función que minimiza está dada por

    min S:=\sum (f(x_i)-f_i)^2


Solución:

Buscamos los parámetros a,b,c tal que la curva (x,f(x)) se ajuste de mejor manera a los datos.

    S(a*,b*,c*)=min_{a,b,c} S(a,b,c)


Grafico

gráfico datos de observación

Minimizar S(a,b,c)

criterio para un mínimo:

F_2=\frac{\partial S(a,b,c)}{\partial a}=0

F_2=\frac{\partial S(a,b,c)}{\partial b}=0

F_3=\frac{\partial S(a,b,c)}{\partial c}=0


Definir F

    \vec{F}=
         \begin{pmatrix}
         F_1\\
         F_2\\
         F_3
         \end{pmatrix}
         \vec{F}=\vec{F}(a,b,c)
         

\vec{F}=\bigtriangledown(a,b,c)


Calcular las componentes de \vec{F}

Calculamos las derivadas parciales de la funcion S con respecto a todos parametros de la función.

F_1=\frac{\partial}{\partial a} \sum_{i=1}^{n} (f(x_i)-f_i)^2

F_2=\frac{\partial}{\partial b} \sum_{i=1}^{n} (f(x_i)-f_i)^2


F_3=\frac{\partial}{\partial c} \sum_{i=1}^{n} (f(x_i)-f_i)^2


Linealizar el modelo

Debemos linealizar la función \vec{F}(a,b,c) para aproximar \vec{F}(\vec{p})=0, con \vec{p}=(a,b,c).

Introducimos \vec{p_i}=(a_i,b_i,c_i), i=0,1,2,3,...


Formular método de Newton

Lo formulamos a partir de la especificación de la función \vec{F}(a,b,c)

\vec{F}(\vec{p_i}+1)=  
\vec{F}(\vec{p_i})+  
\begin{pmatrix}  
\frac{\partial F_1}{\partial a} & \frac{\partial F_1}{\partial b} & \frac{\partial F_1}{\partial c}\\  
\frac{\partial F_2}{\partial a} & \frac{\partial F_2}{\partial b} & \frac{\partial F_2}{\partial c}\\  
\frac{\partial F_3}{\partial a} & \frac{\partial F_3}{\partial b} & \frac{\partial F_3}{\partial c}  
\end{pmatrix}  
\Delta \vec{p}=\vec{0}


Iteración con respecto a i\to i+1

    J_F(\vec{p_i})\Delta p = -\vec{F}(\vec{p_i})
    p_{i+1} = p_i + \Delta p 
         donde  \Delta p = p_{i+1}-p_i=
         \begin{pmatrix}
         a_{i+1}-a_i\\
         b_{i+1}-b_i\\
         c_{i+1}-c_i
         \end{pmatrix}
         =
         \begin{matrix}
         (\Delta a\\
         \Delta b\\
         \Delta c)
         \end{matrix}
         


Código e implementación en Matlab


%Inicializar las variables

syms a b c % variables simbolicas (momentaneamente) S=0 % funcion s que guarda la sumatoria (f-fi)^2 f=[] %vector de la funcion inicialmente vacia

x=[1 2 3 4 5 6 7 8 9 10] %vector xi

fi=[1 3 10 22 34 58 62 87 102 114] %vector fi

plot(x,fi,'*')%graficar los datos de observacion

%Generar la función f for i=1:10

  f=[f, a+(4-b)*exp(-c*x(i))];
  end

%generamos la funcion S para calcular los ceros for i=1:10 S=[S + sum((f(i)-fi(i))^2)]; end

%derivadas parciales de S F1=diff(S,a) F2=diff(S,b) F3=diff(S,c)

%vector columna F F=[F1;F2;F3]

%generar la matriz jacobiana J=[diff(F1,a) diff(F1,b) diff(F1,a); diff(F2,a) diff(F2,b) diff(F2,a); diff(F3,a) diff(F3,b) diff(F3,a)]

%sustituir valores a variables a b c en vector F y matriz J

FF=subs(F,{a,b,c},{1,2,0}) JJ=subs(J,{a,b,c},{1,2,0})


%metodo de Newton %Definimos el rango de error epsilon epsilon=1e-7;

%Iteraciones que buscan el DX y el ajuste óptimo i=1; X=[0 2 4] XX=[];%registro DX=[]; while norm(FF)>epsilon & (i<100) DX=FF\JJ;%resolver sistema de ecuaciones

  X=X+DX;i=i+1;XX=[XX,X];

end

plot(XX,'*'); %graficamos el registro

¡Interferencia de bloqueo de anuncios detectada!


Wikia es un sitio libre de uso que hace dinero de la publicidad. Contamos con una experiencia modificada para los visitantes que utilizan el bloqueo de anuncios

Wikia no es accesible si se han hecho aún más modificaciones. Si se quita el bloqueador de anuncios personalizado, la página cargará como se esperaba.

También en FANDOM

Wiki al azar