CAPÍTULO 5. ESCRITURA DE FUNCIONES
117
Nótese que el valor de la función es diferente del vector
0
, lo que indica que
los valores dados, no son una solución del sistema de ecuaciones 5.13.
Ahora, la matriz jacobiana de la función anterior, evaluada en el mismo
punto del ejemplo, se calcula de manera muy simple así:
jacobian
(miFun, p_tst)
##
[,1] [,2]
## [1,] 6.50 1.5
## [2,] 36.75 32.5
Para implementar el método, se tienen dos posibilidades. Tanto la ecua-
ción 5.9 como la 5.10, proporcionan una forma para calcular el siguiente valor
del vector
x
a partir de un valor anterior. Aquí se hará de la manera que lo
indica la ecuación 5.10, que es numéricamente la más
económica
. De esta for-
ma, el método establece que se debe resolver el sistema de ecuaciones descrito
por la ecuación 5.10 para encontrar el incremento que se debe aplicar al vector
x
y obtener así un nuevo valor, lo que en R se hace con la función
solve()
.
Así, si el valor inicial del vector, fuera, para el ejemplo,
p_tst
, y el sistema de
ecuaciones, fuera el descrito por la ecuación 5.13 y, en el código, por
miFun
, el
procedimiento para obtener el siguiente valor es:
incremento
<-
solve
(
jacobian
(miFun, p_tst),
-
miFun
(p_tst))
# El incremento es:
incremento
## [1] 0.5360 -0.6561
siguiente_p
<-
p_tst
+
incremento
# Y el siguiente valor de p es:
siguiente_p
## [1] 2.036 2.844
Para que el procedimiento sea general, la función podrá ser cualquiera que
represente un sistema de
m
ecuaciones no lineales, con
m
incógnitas. Por con-
siguiente conviene escribir una función de la siguiente manera:
sigDx
<-
function
(
ff
,
x
) {
solve
(
jacobian
(ff, x),
-
ff
(x))
}
# y podemos obtener los mismos resultados que antes con:
(siguiente_p
<-
p_tst
+
sigDx
(miFun, p_tst))
## [1] 2.036 2.844
Para concluir el método, lo anterior se tiene aplicar iterativamente, y pa-
ra determinar la salida del ciclo de iteraciones se deben aplicar criterios de