Sie sind auf Seite 1von 13

C

lculo del Jacobiano


usando Diferenciacin
Automtica
Alejandro Zamora Mndez, Carlos Prez Rojas, Sigridt Garca Martnez
y H. Daniel Villanueva Hernndez
Facultad de Ingeniera Elctrica, UMSNH

Resumen
Se presenta una breve descripcin al campo de la diferenciacin automtica (DA), la
cual es una poderosa herramienta basada en la regla de la cadena para el clculo de
derivadas exactas. Se estudiarn los dos enfoques de la DA (modo hacia delante y
modo hacia atrs), as como sus dos implementaciones (sobrecarga de operadores y
transformacin de cdigo). Se analizarn algunos de los mtodos usados para el
clculo de derivadas tales como la codificacin a mano, diferenciacin numrica (DN)
y diferenciacin simblica (DS). El objetivo es demostrar que utilizando DA obtenemos derivadas exactas, para esto se resolver un sistema de ecuaciones algebraicas
no lineales por medio del Newton Raphson para solucionar el problema de flujos de
potencia en el rea de ingeniera elctrica. Este problema se resolver en su forma
tradicional ya que entrega el Jacobiano exacto y se comparar con la solucin del Jacobiano obtenido aplicando DA. Esta comparacin demostrar que la DA calcula derivadas exactas.
Palabras clave: Diferenciacin Automtica, Jacobiano.

Abstract
This paper presents a brief description to field of automatic differentiation (AD). AD is a
powerful tool based on the chain rule to obtain exact derivates. Two approaches of AD
will be studied (forward and reverse modes), as well as its two implementations (overCiencia Nicolaita No. 47

131

Agosto de 2007

Clculo del Jacobiano...

loading operator and source-to-source transformation). Some methods used to compute derivatives will be analyzed such as hand-coding, numerical differentiation (ND)
and symbolic differentiation (SD). The objective is to demonstrate that using automatic differentiation we obtain exact derivatives, for this reason a nonlinear algebraic
equations system will be solved using the Newton Raphson method for solve the power flow problem in the electrical engineering area. This problem will be solved in its
traditional form since will give us the exact Jacobian and will be compared with the Jacobian solution using automatic differentiation. This comparison will demonstrate that
AD computes exact derivatives.
Keywords: Automatic Differentiation, Jacobian.

1. Introduccin
La diferenciacin frecuentemente constituye un papel importante en una gran variedad de aplicaciones de clculo cientfico, tales como; estudios de optimizacin, anlisis de
sensibilidades, solucin de sistemas de ecuaciones diferencio-algebraicas, solucin de
ecuaciones no lineales y solucin de problemas inversos no lineales, en donde se requiere
la informacin del clculo de las derivadas, ya sea en forma de vector Gradiente, Jacobiano
o Hessiano de una funcin dada, varias veces repetidamente.
Por esta razn es necesario tener un clculo de la derivada exacto y eficiente para la
solucin prctica de dichos problemas. Existen muchas opciones de calcular estas derivadas. Se pueden obtener manualmente, pero puede resultar difcil y/o tedioso, adems de estar propensos a errores. Tambin pueden obtenerse simblicamente usando paquetes
matemticos tales como Maple o Mathematica pero lo malo es de que no son directamente
aplicables para programas computacionales escritos en lenguajes de programacin tales
como C, adems pueden fallar o simplemente ser computacionalmente ineficientes para
problemas a gran escala. Otra forma de calcular derivadas es aproximndola usando diferenciacin numrica, pero sta puede resultar inexacta y lenta, en base a que el sistema tiene que ser evaluado n+1 veces, donde n es el nmero de variables de estado.
La diferenciacin automtica, tambin conocida como diferenciacin computacional,
diferenciacin algortmica o diferenciacin de algoritmos, ha emergido como una tcnica alterna para calcular derivadas. Dado un programa que calcula una funcin numrica F(x), utilizando alguna de las herramientas de la diferenciacin automtica generar un programa
relacionado que calcule F(x). La DA trabaja sistemticamente aplicando la regla de la cadena del clculo diferencial al nivel de los operadores y libreras incorporadas del lenguaje, por
lo que no est sujeto a los mismos errores numricos de la diferenciacin numrica. Debido
a esto la tcnica de la DA ha tenido un gran inters en los campos de la ingeniera y la ciencia.

Agosto de 2007

132

Ciencia Nicolaita No. 47

Clculo del Jacobiano...

Hay dos formas de implementar la DA, una es transformando el cdigo fuente y la otra
es por medio de la sobrecarga de operadores. Tambin existen dos enfoques utilizados en la
diferenciacin automtica, los as llamados modo hacia delante y modo hacia atrs.

2. Codificacin a mano
La codificacin a mano (Bishof et al., 1994, Orfanogianni 2000) fue usada extensivamente en el pasado, especialmente cuando el nmero de funciones a diferenciar es pequeo y las funciones son relativamente simples. Podemos obtener derivadas numricas de
funciones simples derivando las expresiones analticas para las derivadas de primer orden y
orden superior a mano y codificndolas en un lenguaje de programacin de alto nivel tales
como C o FORTRAN. La eficiencia del cdigo resultante depender de la eficiencia del cdigo de la derivada, lo cual es responsabilidad del programador, por lo que para un cdigo
grande este proceso puede resultar tedioso y propenso a error.

3. Diferenciacin simblica
La diferenciacin simblica (Ajjarapu y Ibsais, 1997, Jerosolimsky y Levacher, 1994)
es un mtodo ampliamente usado por cientficos y matemticos para el clculo de derivadas. Existen paquetes comerciales basados en el clculo simblico, tales como MAPLE,
MACSYMA y MATHEMATICA, los cuales son poderosas herramientas computacionales de
uso fcil que proporcionan derivadas exactas, expresando todas las derivadas en trminos
de las variables independientes.
La DS es una poderosa tcnica, pero la desventaja de los paquetes que usan el clculo simblico es que corren dentro de ciertas limitaciones de los recursos del CPU, y por lo
tanto no pueden manejar procesos intensos en donde la dimensin de las matrices es grande y complicada.

4. Diferenciacin numrica
En caso en donde el nmero de funciones a ser diferenciadas es muy grande o la
complejidad de las funciones hacen que la derivacin de la expresin analtica a mano sea
difcil, podemos obtener las derivadas de primer orden mediante diferenciacin numrica
(Bischof et al. 1994, Orfanogianni 2000, Prez 2004), mejor conocida como aproximacin
por diferencias divididas, este mtodo posee popularidad en algunas disciplinas cientficas y
reas de la ingeniera ya que es fcil de implementar.
La aproximacin por diferencias divididas a derivadas de primer orden est basada
en la expansin truncada de la serie de Taylor. Existen varias aproximaciones mediante esta
tcnica, tales como:

Ciencia Nicolaita No. 47

133

Agosto de 2007

Clculo del Jacobiano...

Diferencias hacia adelante.

f ( x)
x j

f ( x0 + h * e j ) - f ( x0 )

(1)

x = x0

Diferencias centrales.

f ( x)
x j

f ( x0 + h * e j ) - f ( x0 - h * e j )

x = x0

donde h (perturbacin en la variable

(2)

2h

x j ) es el tamao del paso; esto es, la longitud del

intervalo sobre el cual se hace la aproximacin y

e j es el i-simo vector base

Cartesiano, lo cual nos asegura la perturbacin para solo la j-sima variable

xj .

El valor de la perturbacin debe ser un parmetro pequeo y positivo, por lo que


se elige un valor lo ms pequeo posible para obtener una aproximacin ms exacta de
la derivada, pero no tan cercano a cero ya que esto nos llevara a resultados incorrectos
o incluso a una cancelacin numrica. Una buena eleccin es h 10

-7

(Prez, 2004).

5. Diferenciacin automtica
En las secciones previas se mostraron las tcnicas ms populares para el clculo
de derivadas, las cuales contienen importantes desventajas que las hacen imprcticas
para aplicaciones grandes. Idealmente, una tcnica para el clculo diferencial debe
contener las siguientes propiedades:

Clculo de derivadas automticamente.

Ser capaz de manejar cdigos arbitrarios de alto nivel.

Clculo exacto de las derivadas (libres de errores de truncacin).

Clculo de derivadas a un costo independiente del nmero de variables.

La diferenciacin automtica (Ajjarapu y Ibsais, 1997, Bishof et al., 1994, Bishof et


al., 2002, Griewank, 1989, Orfanogianni, 2000, Rall y Corliss, 1996, Verma, 2000,
Zamora, 2005) es una tcnica relativamente reciente que posee estas cuatro
propiedades y evala el valor de la funcin y sus derivadas con respecto a las variables
independientes en una forma rpida y exacta.
Agosto de 2007

134

Ciencia Nicolaita No. 47

Clculo del Jacobiano...

Esta tcnica confa en el hecho de que todos los programas computacionales, sin
importar que tan complicados sean, utilizan un sistema finito de operaciones elementales
(unario o binario), segn lo definido por el lenguaje de programacin y sta se basa en
dos evaluaciones; evaluacin de la funcin y evaluacin de la derivada.

Evaluacin de la funcin
Dada una funcin

F ( x1 ,..., xn ) , el valor de la funcin se calcula mediante la

introduccin de variables intermedias por cada operacin aritmtica elemental (adicin,


substraccin, etc.) y por cada funcin elemental (expresiones trigonomtricas,
exponenciales, etc.). La ltima variable intermedia es el valor de la funcin. Esto se
puede observar en el siguiente pseudocdigo.
For i = n + 1, n + 2, K , m

xi = fi ( x j ) jJi
end

f = xm
Esta subrutina representa a la funcin
elementales
calculadas

F ( x) como una composicin de funciones

{ fi }i =n +1 , aqu las funciones elementales


m

f i dependen de las cantidades ya

x j , donde n es el nmero de variables independientes y m indica la ltima

variable intermedia. Por ejemplo, considere la siguiente funcin.


F ( x1 , x2 ) = x12 + x1 cos( x2 )

esta funcin puede descomponerse en funciones elementales tal y como se mencion.

Variables Intermedias
x3 = x12

Ciencia Nicolaita No. 47

Funciones elementales

x3 = f 3 ( x1 )

x4 = cos( x2 )

x4 = f 4 ( x2 )

x5 = x1 * x4
F = x3 + x5

x5 = f 5 ( x1 , x4 )
F = f 6 ( x3 , x5 )

135

Agosto de 2007

Clculo del Jacobiano...

Evaluacin de la derivada
Tradicionalmente, fueron desarrolladas dos diferentes maneras de aplicar la regla
de la cadena en la DA; los as llamados modo hacia delante y modo hacia atrs.
Modo hacia delante
Mantiene las derivadas de cada variable intermedia con respecto a las variables
independientes x1 ,..., xn , donde cada variable intermedia xi tiene un vector gradiente

xi , i = n + 1,..., m . A continuacin se muestra el algoritmo para el modo hacia delante.


For i = 1 n

xi = ei

end
For i

= n +1 m
xi = fi ( x j ) jJi

xi = jJ

f i
x j
x j

end

y = xm
f = xm
donde

ei es la i-sima base cannica en R n , la cual inicializa los gradientes para las

variables independientes. Por lo tanto, para el ejemplo anterior inicializamos los


gradientes para x1 y x2 . El ltimo vector gradiente da las derivadas.

x1 = [1 0]

Agosto de 2007

y x2 = [0 1]

136

Ciencia Nicolaita No. 47

Clculo del Jacobiano...

Variables Intermedias

Gradientes

1 2 x
f3
x1 = 2 x1 = 1
x1
0 0

x3 = x12

x3 =

x4 = cos( x2 )

x4 =

sin(
x
)

x5 = x1 * x4

x4

x5 =

- x1 sin( x2 )
x + 2 x1
x6 = 4

- x1 sin( x2 )

x6 = x3 + x5

Modo hacia atrs


Mantiene la derivada del resultado final con respecto a una cantidad intermedia,
asociando un escalar

xi a cada variable intermedia, donde xi =

y
. En este modo
xi

iniciamos con las variables dependientes propagando las derivadas hacia las variables
independientes acumulando las cantidades escalares adjuntas
cadena se sostiene que

xj =

xi . De la regla de la

fi
xi . A continuacin se muestra el algoritmo para el
x j

modo hacia atrs.


For

i = n + 1, n + 2,K, m
xi = fi ( x j ) jJi

{recorrido directo}

xi = 0
end

y = xm
xm = 1

Ciencia Nicolaita No. 47

137

Agosto de 2007

Clculo del Jacobiano...

For

i = 1, 2, K , n
xi = 0

end
For i

= m, m - 1,K, n + 1
f
x j = x j + i xi , "j J i
x j

{recorrido reverso}

end
For i = 1, 2, K , n

fi = xi
end
Para aplicar este modo al ejemplo anterior, primero inicializamos

y = 1, x1 = 0, x2 = 0, xi = 0
Variables Intermedias

Escalares

y = x3 + x5

y
= x5 + y*1
x5

x3 = x3 + y

y
= x3 + y*1
x3

x5 = x1 x4

x1 = x1 + x5 *x4

x4 = cos x2

x2 = x2 + x4 * ( - sin x2 )

x3 = x12

x1 = x1 + x3 *(2 x1 )

x4 = x4 + x5 *x1

y = [ x1

Agosto de 2007

x5 = x5 + y

138

x2 ]

Ciencia Nicolaita No. 47

Clculo del Jacobiano...

Implementacin de la diferenciacin automtica


La DA puede ser implementada en dos formas. La primera por sobrecarga de
operadores y la segunda transformando el cdigo fuente, stas se describen a continuacin.
Sobrecarga de operadores
Para obtener la derivada por medio de este enfoque, es necesario sobrecargar los
operadores aritmticos bsicos. Esto consiste en decirle al compilador que ahora cada
nmero real ser reemplazado por un par de nmeros reales, en el cual el segundo
corresponder a la derivada.
Cada operacin elemental sobre los nmeros reales es sobrecargada, es decir, es
internamente reemplazado por uno nuevo y se trabaja sobre pares de nmeros reales,
los cuales calcularn tanto su valor como su derivada. La ventaja de este enfoque es el
hecho de que el programa original virtualmente queda sin cambios. La desventaja que se
tiene del programa resultante es que correr muy lentamente debido a la constante
creacin y destruccin de pares de nmeros reales.
Este enfoque de la DA trabaja solo con lenguajes que soportan la sobrecarga de
operadores, tales como C++ o Fortran 90. Algunas herramientas que utilizan este
enfoque son; ADMAT (Coleman y Verma, 1997) y ADOL-C (Griewank et al., 1990).
Transformacin del cdigo fuente
Este enfoque emplea tcnicas de compilacin para transformar el cdigo fuente de
un programa en un nuevo cdigo fuente que realice explcitamente el clculo de las
derivadas, por lo que es aplicable a cualquier lenguaje de programacin.
La transformacin del cdigo fuente consiste en adherir al programa las nuevas
variables, arreglos y estructuras de datos que nos mantendrn las derivadas, y en la
adicin de nuevas instrucciones que son las que calcularn la derivada.
La ventaja de este enfoque es que el programa que resulta se puede compilar en
un cdigo eficiente. La desventaja es que esta transformacin es enorme, por lo que no
se podra realizar a mano en programas grandes, por lo que se realizan herramientas
capaces de hacer esta transformacin en forma correcta y rpida. Algunas herramientas
que utilizan la transformacin de cdigo fuente son; ADIFOR (Bishof et al., 1994a) y
TAPENADE (TAPENADE, 2003)

Ciencia Nicolaita No. 47

139

Agosto de 2007

Clculo del Jacobiano...

6. Clculo del Jacobiano


En el rea de ingeniera elctrica, la determinacin de las condiciones de
operacin en estado permanente de un sistema de potencia se realiza por medio de un
estudio de flujos de potencia (Zamora, 2005), el cual es no lineal por naturaleza por lo
que requiere del clculo del Jacobiano que se evaluar por medio del Newton Raphson.
El sistema de ecuaciones no lineales de potencias formado para la solucin del
problema de flujos de potencia est constituido por las siguientes expresiones
n

Pp = E p EqYpq cos(q pq + d p - d q )

(3)

q =1
n

Qp = E p EqYpq sen(q pq + d p - d q )

(4)

q =1

Expandiendo (3) y (4) en una serie de Taylor cerca de la estimacin inicial y


omitiendo todos los trminos de orden superior da como resultado el siguiente sistema
de ecuaciones lineales.

DP H N Dd
DQ = J L D E / E
1

424
3

(5)

JACOBIANO

donde la matriz coeficiente es el Jacobiano y sus elementos estn definidos como sigue:
H=

Pp
d q

N=

Pp
Eq

J=

Eq

Q p
d q

L=

Q p
Eq

Eq

Los elementos de cada submatriz se calculan de la siguiente manera, los cuales


dan el Jacobiano exacto.
2

H pp = - E p B pp - Q pcalc
H pq = E p Eq (G pq sin q pq - B pq cos q pq )

(6)

q p

N pp = E p G pp + Ppcalc

(7)

N pq = E p Eq (G pq cos q pq + B pq sin q pq )
Agosto de 2007

140

q p

Ciencia Nicolaita No. 47

Clculo del Jacobiano...


2

J pp = - E p G pp + Ppcalc

(8)

J pq = - E p Eq (G pq cos q pq + B pq sin q pq )

q p

L pp = - E p B pp + Q pcalc

(9)

L pq = E p Eq (G pq sin q pq - B pq cos q pq )

q p

Para calcular el Jacobiano utilizando diferenciacin automtica, se aplica esta tcnica a las ecuaciones (3) y (4), que son las funciones a derivar con respecto a las variables independientes (magnitud

E y ngulo de fase d del voltaje). Esto se hace tal y

como se mostr en la Seccin 5. Por lo que obtenemos tanto el valor de la funcin


(Potencia Real y Potencia Reactiva), as como sus derivadas parciales (Jacobiano).

7. Resultados
Se resuelve el Jacobiano para un sistema de 3 nodos tomado de la referencia
(Zamora, 2005), mostrando resultados para la tercera iteracin la cual es en la que
converge el mtodo de Newton Raphson. Los resultados obtenidos para el clculo del
Jacobiano usando ambos mtodos, esto es, utilizando las expresiones (6) a (9) que
proporcionan el Jacobiano exacto (Forma Tradicional), y utilizando diferenciacin
automtica, se muestran a continuacin.
-2 1 .1 4 7 4 -5 1 .5 9 6 7 3 1 .6 9 3 9
-4 7 .9 5 4 9 2 8 .5 4 8 2 -1 7 .3 9 6 9

1 5 .3 5 1 6
3 2 .9 3 3 9 -6 5 .5 9 7 6
1 4 4 4 4 442 4 4 4 4 4 4
3

-21.1474 -51.5967 31.6939


-47.9549 28.5482 -17.3969

15.3516
32.9339 -65.5976
1 4 4 4 4 442 4 4 4 4 4 4
3

F o rm a T rad icio nal

D iferenciacin A utom tica

Se observa que los resultados son exactamente los mismos, se imprimen solo 4
decimales sin embargo los valores son idnticos ya que las operaciones numricas que
se realizan son hasta el final en ambas formulaciones, lo cual indica que no hay error por
truncamientos, por lo tanto la precisin es la que tenga la computadora. El ejemplo aqu
mostrado de 3 nodos es solo con la finalidad de hacer ms fcil la aplicacin de la DA al
problema de flujos de carga, en (Zamora, 2005) se pueden encontrar los resultados al
aplicarla a problemas de mayor orden como son los sistemas de prueba del IEEE
(Institute of Electrical and Electronics Engineers), que son de 36 y 118 nodos.
Ciencia Nicolaita No. 47

141

Agosto de 2007

Clculo del Jacobiano...

8. Conclusiones
Para demostrar que la tcnica de la diferenciacin automtica es eficiente para el
clculo de derivadas exactas, se utiliz el mtodo de Newton Raphson para solucionar el
problema de flujos de potencia. Se resolvi en su forma tradicional ya que sta nos
entrega el Jacobiano exacto, para as compararlo con la solucin obtenida por
diferenciacin automtica.
Ya que los resultados son iguales, se concluye que el clculo de derivadas por
medio de diferenciacin automtica es exacto, por lo que esta tcnica resulta eficiente
cuando se requiere del clculo de derivadas, ya sea en la forma de vector gradiente,
Jacobiano o Hessiano de una funcin dada.

9. Referencias
Ajjarapu V., and Ibsais A. Mayo 1997. The Role of Automatic Differentiation in Power
System Analysis, IEEE Transactions on Power Systems, Vol. 12, No. 2, pp. 592597.
Averick Brett M., Mor Jorge J., Bishof Christian H., Carle Alan, and Griewank Andreas.
1994. Computing Large Sparse Jacobian Matrices Using Automatic Differentiation.
SIAM Journal on Scientific Computing, 15(2):285-294.
Bishof Christian, Carle Alan, Khademi Peyvan, and Mauer Andrew. 1994. The ADIFOR
2.0 System for the Automatic Differentiation of Fortran 77 Programs. Technical
Report ANL-MCS-P481-1194, Mathematics and Computer Science Division,
Argonne National Laboratory.
Bishof Christian, Carle Alan, Hovland Paul, Khademi Peyvand and Mauer Andrew; 1994.
ADIFOR 2.0 Users Guide (Revision D), Technical Report ANL/MCS-TM-192,
Mathematics and Computer Science Division, Argonne National Laboratory.
Bischof, C. H., Hovland, P. D., and Norris, B. 2002. Implementation of automatic
differentiation tools. In Proceedings of the 2002 ACM SIGPLAN Workshop on
Partial Evaluation and Semantics-Based Program Manipulation (Portland, Oregon,
January 14 - 15, 2002). PEPM '02. ACM Press, New York, NY, 98-107.

Agosto de 2007

142

Ciencia Nicolaita No. 47

Clculo del Jacobiano...

Coleman T. F., and Verma A., Marzo 1997. ADMIT-1: Automatic Differentiation and
MATLAB interface toolbox, Tech. Rep. CTC97TR271, Theory Center, Cornell
University.
Griewank A., 1989. "On Automatic Differentiation," in Mathematical Programming: Recent
Developments and Applications (M. Iri and K. Tanabe, eds.), pp. 83--108, Kluwer
Academic Publishers.
Griewank A., Juedes D., and Srinivasan J, 1990. "ADOL-C, a package for the automatic
differentiation of algorithms written in C/C++", Preprint MCS-P180-1190,
Mathematics and Computer Science Division, Argonne National Laboratory.
Jerosolimsky M., and Levacher L. Mayo 1994. A New Method for Fast Calculation of
Jacobian Matrices: Automatic Differentiation for Power System Simulation, IEEE
Transactions on Power Systems, Vol. 9, No. 2, pp. 700-706.
Orfanogianni Tina. 2000. A flexible software environment for steady-state power flow
optimization with series FACTS devices. Tesis Doctoral, Swiss Federal Institute of
Technology (ETH) Zurich.
Prez R. Carlos. 2004. Modelos Avanzados de Elementos del Sistema Elctrico de
Potencia en Coordenadas de Fase para Estudios de Estabilidad Dinmica. Tesis
Doctoral, Universidad Autnoma de Nuevo Len, Monterrey, N.L.
Rall L. B., and Corliss G. F. 1996. An introduction to automatic differentiation. In M. Berz,
C. Bischof, G. Corliss, and A. Griewank, editors, Computational Differentiation,
Procs Second International Workshop on Computational Differentiation. SIAM.
TAPENADE 2003. The TAPENADE tutorial. http://www-sop.inria.fr/tropics/tapenade/

Ciencia Nicolaita No. 47

143

Agosto de 2007

Das könnte Ihnen auch gefallen