En la
siguiente entrada se muestra como derivar funciones en R, y se resuelve un
problema de optimización con funciones objetivos con más de dos variables, sin
restricciones. Para aplicar esta entrada, se resuelve el ejemplo 1 presentado
por Chiang y Wainwright (2006), en el libro “Métodos Fundamentales de Economía Matemática”,
p.315.
Encuentre los valores extremos de la función:
f2*x^2 + x*y + 4*y^2 + x*z + z^2 + 2
Lo
primero es obtener las primeras derivadas.
Para esto, insertamos en R la expresión correspondiente a la función objetivo, utilizando la función expression. Posteriormente, utilizando la función D, obtenemos las primeras derivadas
parciales respecto a cada variable.
> FunObj<-expression(2*x^2
+ x*y + 4*y^2 + x*z + z^2 + 2)
> #
Primeras derivadas
> D(FunObj,"x")
2 * (2
* x) + y + z
> D(FunObj,"y")
x + 4 *
(2 * y)
> D(FunObj,"z")
x + 2 *
z
Luego,
es necesario identificar las condiciones de primer orden f1=f2=f3=0. Esto, lo
podemos obtener matricialmente a partir del sistema de ecuaciones resultante (las primeras derivadas obtenidas anteriormente) [Ver R Tutorial #7 - Solvingsystems of linear equations - Statistical Programming Language R]:
> coef<-matrix(c(4,1,1,1,8,0,1,0,2), 3, 3, byrow=T)
> coef
[,1] [,2] [,3]
[1,] 4 1 1
[2,] 1 8 0
[3,] 1 0 2
> rest<-c(0,0,0)
>
> var<-solve(coef)%*%rest
> rownames(var)<-c("x","y","z")
> var
[,1]
x 0
y 0
z 0
Por tanto, los valores críticos identificados son x*=y*=z*=0.
Ahora,
una vez identificados los puntos críticos y obtenidas las primeras derivadas,
es necesario encontrar la matriz hessiana [3x3] de segundas derivadas, dado que
necesitamos verificar si esta es definida positiva o negativa, para determinar la condición necesaria de segundo orden. Utilizando las primeras derivadas
obtenidas anteriormente, se obtienen las derivadas parciales de segundo orden para conformar la hessiana (H):
> H<-matrix(NA, 3,3)
> H[1,1]<-D(expression(4*x+y+z),"x")
> H[1,2]<-D(expression(4*x+y+z),"y")
> H[1,3]<-D(expression(4*x+y+z),"z")
> H[2,1]<-D(expression(x+8*y),"x")
> H[2,2]<-D(expression(x+8*y),"y")
> H[2,3]<-D(expression(x+8*y),"z")
> H[3,1]<-D(expression(x+2*z),"x")
> H[3,2]<-D(expression(x+2*z),"y")
> H[3,3]<-D(expression(x+2*z),"z")
> H
[,1] [,2] [,3]
[1,] 4 1 1
[2,] 1 8 0
[3,] 1 0 2
Ahora,
sabiendo que:
Máximo: ∣H1∣ < 0; ∣H2∣ > 0; ∣H3∣ < 0
Mínimo: ∣H1∣, ∣H2∣,..,∣Hn∣>0
Ahora, necesitamos
encontrar los menores principales (∣H1∣, ∣H2∣,..,∣Hn∣) de la matriz hessiana (H), estos se obtienen a partir de los determinantes de las matrices cuadradas que podemos obtener de la matriz hessiana. Estos determinantes se obtienen en R a partir de la función det:
> H1<-H[1,1]
> H2<-det(H[c(1:2),c(1:2)])
> H3<-det(H[c(1:3),c(1:3)])
>
> H1; H2; H3
[1] 4
[1] 31
[1] 54
Dado
que todos los signos de los determinantes son positivos (>0), la matriz es
definida positiva, por lo que, los puntos críticos identificados corresponden a
un mínimo.