La función vectorial
describe una órbita elíptica inclinada con un foco en (0, 0). Pensemos en el Sol como si estuviera situado en este punto. El parámetro φ1 es el ángulo de inclinación. Si A1 es mayor o igual que P1, entonces A1 y P1 son las distancias máximas y mínimas entre el Sol y la órbita. Sea
una segunda órbita de este tipo y la cual podemos visualizar en la gráfica siguiente.
Gráfico de las órbitas. Elaborado con GNU Octave, por
donde (A1, P1, φ1) = (10, 2, pi/8), y (A2, P2, φ2) = (10, 2, pi/8).
Nuestro objetivo es encontrar la distancia mínima desde un punto en la primera órbita (A1, P1, φ1) hasta un punto en la segunda órbita (A2, P2, φ2). Para una medida de distancia, utilizamos la siguiente función
Esta es una función de dos variables, y de acuerdo como lo vimos en la publiación anterior (Ecuaciones no Lineales y Optimización | 5ta Parte), la función S es la función objetivo. Notemos que t1 es un punto seleccionado en la órbita exterior y t2 es un punto seleccionado la órbita interior. A continuación estudiaremos la mínimización de funciones multivaluadas como S(t).
La implementación de S(t) depende de otra función que llamaremos orbita, la cual mostramos a continuación:
Función
orbita. Elaborada con GNU Octave, por Con esta función podemos fácilmente generar y gráficas y puntos en las órbitas. El script siguiente gráfica dos órbitas y traza una línea que conecta el punto t1 = 3 en la primera órbita con el punto t2 = 4 en la segunda órbita.
Script usando para gráficas las órbitas. Elaborada con GNU Octave, por
La separación entre estos dos puntos es una función de un vector de dos variables independientes y los parámetros A1, P1, φ1, A2, P2, φ2, el cual visualizamos en el siguiente funcion:
Función
separacion. Elaborado en GNU Octave, por Observemos cómo se empaquetan los parámetros de órbita en un vector de dimensión 6, y usando el siguiente script a continuación podemos ver como usamos la función que acabamos de mostrar
separacionScript para calcular la separación de las órbitas. Elaborado en GNU Octave, por
asigna a d el valor
con
Supongamos que una persona se encuentra en un lugar nublado, y parada en una ladera sin un mapa. Si esta persona quiere dar un paso coherente con el objetivo de alcanzar de un valle, es razonable dar ese paso en la dirección más cuesta abajo. Matemáticamente, este hecho, dirigirse en la dirección del gradiente negativo.
Recordemos que el gradiente de una función
es un vector de derivadas parciales:
El gradiente siempre apunta en la dirección del mayor incremento y su negación apunta en la dirección de la mayor disminución. Tomando las parciales en t1 y t2 en la ecuación dada en (1), vemos que
Sustituyendo las definiciones de las funciones de las componentes, llegamos a la siguiente implementación del gradiente:
Función para calcular el gradiente de la función
separacion. Elaborado con GNU Octave, por La derivación no es importante. Pero lo que es importante es apreciar que la implementación de la función gradiente puede ser muy complicada y consumir mucho tiempo. Nuestro problema es pequeño (n = 2) y simple. Para aplicaciones de alta dimensión con funciones objetivas complicadas, a menudo es necesario usar algunos paquetes de diferenciación simbólica.
A partir de la teoría de aproximación de Taylor multivalorada, sabemos que si λc es real y sc es un n-vector, entonces
Por lo tanto, podemos esperar una disminución en el valor de f si establecemos que la dirección del paso sc sea
y el parámetro de longitud de paso λc para que sea lo suficientemente pequeño. Si el gradiente es cero, entonces este argumento se rompe. En ese caso tc es un punto crítico, pero puede no ser un mínimo local. Nuestra búsqueda del fondo del valle puede estancarse en ese lugar.
La determinación práctica de λc es el problema de la búsqueda de línea. Idealmente, nos gustaría minimizar f(tc + λcsc) sobre todo λ . Sin embargo, una solución aproximada a este problema de minimización unidimensional suele ser lo suficientemente buena y a menudo esencial si f es muy costosa de evaluar. Esto nos lleva al marco de descenso más empinado para calcular una mejora t+ al minimizador actual:
- calcular el gradiente
y sea sc = - gc. - Elegir a bajo costo λc tal que f(tc + λcsc) es suficientemente pequeña como f(tc).
- Sea t+ = tc + λcsc.
El diseño de una estrategia razonable de búsqueda de líneas es una tarea no trivial.
Queridos amigos y lectores, espero hayan disfrutado de esta segunda entrega de este tan apasionante e interesante tema del cálculo numérico, Ecuaciones no Lineales y Optimización | 6ta Parte apoyado con el entorno GNU Octave, en esta oportunidad pudimos estudiar algunas detalles o aspectos importantes, acerca de la minimización de funciones multivaloradas. Espero que el mismo sea de apoyo a ustedes en sus trabajos, o quizás sirva de apoyo para sus hijos, nietos, sobrinos o amigos que quieran aprender un poco más del maravilloso mundo de las matemáticas y la programación. No olviden dejar sus comentarios. Saludos y nos leemos pronto.
Si desean consultar un poco más del tema pueden usar las siguientes referencias:
- Demidovich, B. P., and I. A. Maron. Computational Mathematics Mir, Moscow, 1976.
- Björck, Åke. Numerical methods in matrix computations. Vol. 59. Cham: Springer, 2015.
- Burden, Richard L., and J. Douglas Faires. Numerical analysis. Ninth Edition. Cengage Learning. 2011.
Las imágenes, separadores y las ecuaciones fueron creadas y editadas por usando software libre, GNU Octave,
, GIMP e Inkscape.
@SteemSTEM es un proyecto comunitario con el objetivo de promover y apoyar la Ciencia, la Tecnología, la Ingeniería y las Matemáticas en la blockchain Steem. @Stem-espanol es parte de esta comunidad, si desea apoyar el proyecto, puedes contribuir con contenido en español en las áreas de Ciencia, Tecnología, Ingeniería y Matemáticas, utilizando las etiquetas #steemstem y #stem-espanol.