Práctica 2 Métodos de búsqueda para funciones de una variable Introducción Definición 1. Una función real f se dice que es fuertemente cuasiconvexa en el intervalo (a, b) si para cada par de puntos x1 , x2 ∈ (a, b) con x1 6= x2 se verifica que: f (λx1 + (1 − λ)x2 ) < máx{f (x1 ), f (x2 )}, ∀λ ∈ (0, 1). Se puede demostrar que si f es una función continua y fuertemente convexa en el intervalo (a, b), entonces f tiene un mı́nimo en este intervalo y es único. Proposición 2. Sea f una función fuertemente cuasiconvexa en (a, b) y sea y, z tales que a < y < z < b. Entonces, se verifica que: 1. Si f (y) ≥ f (z) ⇒ f (x) ≥ f (z), ∀x ∈ [a, y] 2. Si f (y) ≤ f (z) ⇒ f (x) ≥ f (y), ∀x ∈ [z, b] Demostración. 1. Por reducción al absurdo. Supongamos que existe x ∈ [a, y] tal que f (x) < f (z). Entonces, para el intervalo [x, z] se verifica que f (λx + (1 − λ)z) < máx{f (x), f (z)} = f (z), 1 ∀λ ∈ (0, 1). 2 En particular, como y ∈ [x, z], f (y) < máx{f (x), f (z)} = f (z). Contradicción 2. Demostración análoga al caso anterior. La consecuencia del resultado anterior es que basta con controlar lo que vale f en dos puntos y, z. Si f (y) ≥ f (z), entonces f (x) ≥ f (z) para todo x ∈ [a, y], luego podemos restringir la búsqueda del mı́nimo al intervalo [y, b]. Sucesivamente iremos reduciendo la longitud de nuestro intervalo de incertidumbre hasta que sea menor que un cierto nivel . Realmente para los métodos que vamos a presentar, basta con que la función sea unimodal. Una función es unimodal en una cierta región si sólo tiene un óptimo en dicha región. Una función unimodal podrı́a ser continua o discontinua; incluso se podrı́an desarrollar métodos de búsqueda para funciones unimodales definidas sólo sobre un conjunto de valores discretos. Definición 3. Una función real f es unimodal en el intervalo [a, b] si existe un punto x∗ ∈ [a, b] tal que f es decreciente en [a, x∗ ] y f es creciente en [x∗ , b]. Los métodos que se van a presentar para funciones unimodales podrı́an funcionar también sobre funciones multimodales, pero en este caso sólo localizarı́an uno de los óptimos. En lo que sigue consideraremos una función unimodal con un único mı́nimo en el interior del intervalo o en su frontera. Búsqueda Dicotómica Consiste en reducir al máximo la longitud del intervalo de incertidumbre en cada iteración. 3 Paso Inicial Fijar > 0, h > 0. Hacer [a1 , b1 ] = [a, b] y k = 1. Paso General Repetir: 1. Si bk − ak < h, PARAR. [ak , bk ] es el intervalo buscado. 2. Si bk − ak ≥ h, hacer yk = ak +bk 2 − , zk = ak +bk 2 + y comparar los valores f (yk ) y f (zk ). Si f (yk ) ≥ f (zk ), hacer ak+1 = yk y bk+1 = bk . Hacer k = k + 1. Ir a 1 Si f (yk ) < f (zk ), hacer ak+1 = ak y bk+1 = zk . Hacer k = k + 1. Ir a 1 Método de la sección áurea La idea del método es la siguiente. Dado un intervalo (a, b) generamos inicialmente dos nuevos puntos y1 = a + (1 − α)(b − a) y z1 = a + α(b − a), para algún α ∈ 21 , 1 convenientemente elegido. Según los valores que tomen f (y) y f (z), el intervalo de incertidumbre en el siguiente paso será (a, z) o (y, b). Pues bien, la idea del método es elegir α de forma que según el caso que corresponda el valor yk coincida con el zk−1 , o bien zk coincida con yk−1 . Por ejemplo, si f (y1 ) ≥ f (z1 ), entonces el nuevo intervalo de incertidumbre es (a2 = y1 , b2 = b) y α debe ser tal que y2 = a2 + (1 − α)(b − a2 ) = z1 . Puesto que 4 a2 = y1 , la relación anterior quedarı́a a + (1 − α)(b − a) + (1 − α)(b − (a + (1 − α)(b − a)) = a + α(b − a) 2(1 − α)(b − a) − (1 − α)2 (b − a) = α(b − a) 2(1 − α) − (1 − α)2 = α (1 − α) − (2 − (1 − α)) = α (1 − α)(1 + α) = α 1 − α2 = α α2 + α − 1 = 0 cuya solución (positiva) es α= 1+ p (5) ∼ 0,618033989 2 Obsérvese que con este método se tiene siempre que la longitud de un intervalo Lk respecto del anterior Lk−1 es Lk = αLk−1 . La denominación del método se debe a que α es el número conocido como la sección áurea un número descubierto en la antigüedad (los griegos ya lo usaban) y que se asocia a proporciones que encontramos en la naturaleza en la morfologı́a de diversos elementos tales como caracolas, nervaduras de las hojas de algunos árboles, el grosor de las ramas, proporciones humanas, etc. La sección áurea se obtiene dividiendo un segmento en dos partes de forma que la proporción de la parte menor frente a la parte mayor coincida con la proporción entre ésta última y la longitud total del segmento. Algoritmo de la sección áurea Paso Inicial Fijar h > 0, α = √ 1+ (5) 2 , a1 = a, b1 = b. Obtener y1 = a1 + (1 − α)(b1 − a1 ), z1 = a1 + α(b1 − a1 ). Calcular f (y1 ), f (z1 ). Hacer k=1. 5 Paso General Repetir: 1. Si bk − ak < h, PARAR. [ak , bk ] es el intervalo buscado. En caso contrario, ir a 2. 2. Calcular f (yk ) y f (zk ). Si f (yk ) ≥ f (zk ), ir a 3. En caso contrario, ir a 4. 3. Hacer ak+1 = yk , bk+1 = bk ,yk+1 = zk y zk+1 = ak+1 + α(bk+1 − ak+1 ). Calcular f (zk+1 ). Hacer k = k + 1 e ir a 1. 4. Hacer ak+1 = ak , bk+1 = zk ,zk+1 = yk e yk+1 = ak+1 + (1 − α)(bk+1 − ak+1 ). Calcular f (yk+1 ). Hacer k = k + 1 e ir a 1. Método de Búsqueda de Fibonacci El método de Fibonacci está considerado cómo el más eficiente entre los métodos de búsqueda. Difiere del método de la sección áurea en el hecho de que el valor de α no permanece constante en cada iteración. Además, el número de iteraciones viene predeterminado en base al nivel de exactitud especificado por el usuario. El método de Fibonacci debe su nombre a que se utiliza la sucesión de Fibonacci F0 = F1 = 1, Fn = Fn−1 + Fn−2 . para determinar en cada iteración los nuevos valores yk y zk con los que evaluar el actual intervalo de incertidumbre. Como veremos, en el método de Fibonacci el (k + 1)-ésimo subintervalo se obtiene reduciendo la longitud del k-ésimo subintervalo por un factor Fn−k−1 . Fn−k Por consiguiente, después de n − 2 pasos, la longitud del último subintervalo será Fn−1 Fn−2 Fn−3 F2 F1 1 ... (b − a) = (b − a). Fn Fn−1 Fn−2 F3 F2 Fn 6 Algoritmo de búsqueda de Fibonacci Paso Inicial Fijar h > 0 y > 0. Elegir n tal que Fn > b−a . Hacer a1 = a, b1 = b, h Fn−1 Fn−1 y 1 = a1 + 1 − (b1 − a1 ) z1 = a1 + (b1 − a1 ), Fn Fn y k = 1. Paso General Repetir: 1. Si f (yk ) ≥ f (zk ), ir a 2. En caso contrario, ir a 3. 2. Hacer ak+1 = yk , bk+1 = bk , yk+1 = zk y zk+1 = ak+1 + Fn−k−1 (bk+1 − ak+1 ). Fn − k Si k = n − 2, ir a 5. En caso contrario, calcular f (zk+1 ) e ir a 4. 3. Hacer ak+1 = ak , bk+1 = zk , zk+1 = yk y calcular Fn−k−1 (bk+1 − ak+1 ). yk+1 = ak+1 + 1 − Fn − k Si k = n − 2, ir a 5. En caso contrario, calcular f (zk+1 ) e ir a 4. 4. Hacer k = k + 1 e ir a 1. 5. Hacer yn = yn−1 , zn = yn−1 + . Si f (yn ) ≤ f (zn ), tomar an = an−1 , bn = zn−1 . Si f (yn ) ≥ f (zn ), tomar an = yn−1 , bn = bn−1 . FINAL. [an , bn ] es el intervalo de incertidumbre final. 7 Para un valor de n suficientemente grande, la proporción Fn−1 Fn tiende al número áureo, y por lo tanto el método de Fibonacci se aproxima al método de la sección áurea. Método de aproximación de la función. Interpolación cuadrática Como hemos visto, los métodos de búsqueda consisten en ir reduciendo adecuadamente el intervalo de incertidumbre en el que se encuentra el óptimo de la función. Los métodos de aproximación de la función se basan en, a partir de la evaluación de la función en unos pocos puntos, aproximar ésta por un polinomio, y posteriormente aproximar la posición del óptimo de la función por la del óptimo del polinomio, más sencillo de obtener. Evaluamos la función f en tres puntos x1 , x2 , x3 y aproximamos f (x) por la función cuadrática g(x) = Ax2 + Bx + C, donde A,B y C se determinan por las ecuaciones: Ax21 + Bx1 + C = f (x1 ) Ax22 + Bx2 + C = f (x2 ) Ax23 + Bx3 + C = f (x3 ) la solución a este sistema viene dada por: [(x3 − x2 )f (x1 ) + (x1 − x3 )f (x2 ) + (x2 − x1 )f (x3 )] ∆ [(x22 − x23 )f (x1 ) + (x23 − x21 )f (x2 ) + (x21 − x22 )f (x3 )] B= ∆ [x2 x3 (x3 − x2 )f (x1 ) + x1 x3 (x1 − x3 )f (x2 ) + x1 x2 (x2 − x1 )f (x3 )] C= ∆ A= 8 donde ∆ = (x1 − x2 )(x2 − x3 )(x3 − x1 ). Como g(x) tiene un óptimo en −B , 2A podemos aproximar la ubicación del mı́nimo de f (x) por x∗ ≈ −1 [(x22 − x23 )f (x1 ) + (x23 − x21 )f (x2 ) + (x21 − x22 )f (x3 )] 2 [(x3 − x2 )f (x1 ) + (x1 − x3 )f (x2 ) + (x2 − x1 )f (x3 )] (1) Algoritmo de Interpolación Cuadrática Supongamos que tenemos una función real, f , unimodal en el intervalo [a, b] y de una variable. Vamos a desarrollar el procedimiento suponiendo que el óptimo se trata de un mı́nimo. Paso Inicial Tomar h > 0 cota del error de aproximación. Paso General Repetir: 1. Seleccionar tres puntos x1 , x2 , x3 ∈ [a, b] tales que f (x2 ) < f (x1 ) y f (x2 ) < f (x3 ). 2. Obtener el valor mı́nimo del polinomio de interpolación correspondiente a los puntos x1 , x2 , x3 . Dicho mı́nimo viene dado por la expresión 1. 3. Si |x2 − x∗ | < h, PARAR. x∗ se toma como aproximación al verdadero óptimo de la función. En caso contrario, ir a 4. 4. Si x2 ≤ x∗ , entonces tomar a = x1 , b = x2 y volver al paso 1. En caso contrario, tomar a = x2 , b = x3 y volver al paso 1. El siguiente es otro posible algoritmo basado en el mismo método: Paso Inicial Seleccionar tres puntos x1 , x2 , x3 ∈ [a, b]. Tomar h > 0 cota del error de aproximación. Hacer k = 1. 9 Paso General Repetir: 1. Obtener x∗ el valor mı́nimo del polinomio cuadrático de interpolación correspondiente a los puntos x1 , x2 , x3 . Dicho mı́nimo viene dado por la expresión 1. Sea yk = f (x∗ ). Si k = 1, ir al paso 3, en caso contrario ir al paso 2. 2. Si |yk − yk−1 | < h, PARAR. x∗ se toma como aproximación al verdadero óptimo de la función. En caso contrario, ir a 3. 3. Sea i tal que f (xi ) = máx{f (x1 ), f (x2 ), f (x3 )}. Hacer xi = x∗ y volver al paso 1.