Está en la página 1de 27

Ejercicios 2D

Optimización de Sistemas
Pablo Suárez
pasuar03@ucm.es
16 de mayo de 2023

1
Optimización de Sistemas 16 de mayo de 2023

Índice 3. Tarea 2 18
3.1. Primera función: f (x1 , x2 ) = 2x21 +
1. Introducción 2 6x22 + 4x1 − 3x2 . . . . . . . . . . . . . 18
3.2. Segunda función: f (x1 , x2 ) = x31 +x32 +
2. Tarea 1 2 2 ∗ x21 + 4 ∗ x22 + 6 . . . . . . . . . . . 20
2.1. Primera función: f (x) = x5 − 5x3 − 3.3. Tercera función: f (x1 , x2 ) = 100(x2 −
20x + 5 . . . . . . . . . . . . . . . . . 2 x21 )2 + (1 − x1 )2 . . . . . . . . . . . . . 24
0′ 75
2.2. Segunda función: f (x) = 0′ 65− 1+x 2 −
4. Conclusión 26
0′ 65 · arctg x1 . . . . . . . . . . . . .

9
2
2.3. Tercera función: f (x) = cos(x) · e−(x−π) 14 5. Código 27

1. Introducción
En esta práctica se han comprobado y estudiado el funcionamiento de las funciones de optimización que
ofrece Matlab, también se han comparado los resultados obtenidos con los métodos de optimización utiliza-
dos en su momento para para optimizar las distintas funciones objetivo.

En este informe, la notación que se ha utilizado para definir un vector es la siguiente;

v = (v1 , v2 , ..., vn ) donde v ∈ Rn

2. Tarea 1
Elegir 3 de las funciones dependientes de una variable de decisión optimizadas en los trabajos de evaluación
continua previos y buscar el óptimo con las funciones de optimización de Matlab fminsearch y fminunc.
Comparar los resultados obtenidos los métodos de Matlab y con los métodos utilizados para resolverlos
anteriormente.
Para este primera tarea se han seleccionado las siguientes funciones objetivos dependientes tan solo de
una variable decisión.

1. f (x) = x5 − 5x3 − 20x + 5


0′ 75
2. f (x) = 0′ 65 − − 0′ 65 · arctg 1

1+x2 x
2
3. f (x) = cos(x) · e−(x−π)

2.1. Primera función: f (x) = x5 − 5x3 − 20x + 5


Para poder entender mejor la función, se enuncian las primeras dos primitivas de la función;

df (x)
= 5x4 − 15x2 − 20
dx

d2 f (x)
= 20x3 − 30x
dx2
En los métodos analı́ticos, una vez se obtenı́an las dos primitivas de f (x), se igualan a 0. Al igualar la segunda
derivada de la función a 0, se obtienen los máximos ası́ como los mı́nimos de la función. Para dfdx (x)
= 0 se

obtiene como resultado: x ∈ {−2, 2} ∴ Si se introducen estas soluciones en la expresión de la segunda
primitiva, podremos saber si se tratan de máximos , mı́nimos o de puntos de inflexión. Se introducen las
soluciones en la segunda primitiva:

d2 f (x) ⇒ f¨(x∗ ) = 100



20 · (2)3 − 30 · (2)

=
dx2 x=x∗ 20 · (−2) − 30 · (−2) ⇒ f¨(x∗ ) = −100
3
Optimización de Sistemas 16 de mayo de 2023

min{f (x)} = 100

max{f (x)} = −100

puntoinf lexión = Empty sym: 0-by-1


Para este caso no se ha encontrado ningún punto de inflexión porque ∄x∗ que haga que f (x∗ ) = 0
A continuación se adjunta la representación gráfica de la función:

Figura 1: Representación gráfica de la función del primer caso.

El método analı́tico, nos devuelve los siguientes valores que hacen 0 la primera derivada de la función;
x∗ = {−2, −j, j, 2}. Tal y como se ha mencionado en la introducción de esta práctica, se está optimizando
con una variable de decisión x ∈ R, por lo que las soluciones complejas quedan descartadas, ∴ x′∗ ∈ {−2, 2}
Como podemos comprobar en el gráfico de arriba, no se consigue ver con claridad el máximo y el mı́nimo
correspondientes a los puntos x′∗ ∈ {−2, 2}. Acotando los ejes, se obtiene:
Aquı́ ya se puede comprobar la posición de los máximos y los mı́nimos de la función. La parte cóncava
se corresponde con el máximo (x∗ = −2) y la parte convexa se corresponde con un mı́nimo (x∗ = 2)

En definitiva, con las funciones de Matlab deberı́amos de ser capaces de encontrar, el siguiente máximo
y mı́nimo:
Todo lo enunciado y adjuntado anteriormente se obtuvo con los métodos analı́ticos, ahora se adjunta
las explicaciones y los resultados analı́ticos obtenidos con las funciones de Matlab fminsearch y fminunc.
Primero se ha implementado el siguiente código;

f=@fun;
x0 = 0;
opt=optimset('Display','iter','MaxIter',100);
[x,y]=fminunc(f,x0,opt)
[x,y]=fminsearch(f,x0,opt)

function y=fun(x)
y=xˆ5−5*xˆ3−20*x+5;
%y=−y; %Para maximizar cambiamos el signo
end

Este código nos devuelve el siguiente resultado:


Optimización de Sistemas 16 de mayo de 2023

Figura 2: Figura acotada

Figura 3: Figura con los dos óptimos que se han encontrar.

First−order
Iteration Func−count f(x) Step−size optimality
0 2 5 20
1 12 −42.9281 0.0980777 3.69
2 16 −42.9982 0.1 0.599
3 18 −43 1 0.0246
4 20 −43 1 0.000154
5 22 −43 1 2.38e−07

Local minimum found.

Optimization completed because the size of the gradient is less than


the value of the optimality tolerance.

x = 2.0000
Optimización de Sistemas 16 de mayo de 2023

y = −43.0000

Iteration Func−count min f(x) Procedure


0 1 5
1 2 4.995 initial simplex
2 4 4.985 expand
3 6 4.965 expand
4 8 4.925 expand
5 10 4.845 expand
6 12 4.68498 expand
7 14 4.36484 expand
8 16 3.72371 expand
9 18 2.43461 expand
10 20 −0.197546 expand
11 22 −5.87001 expand
12 24 −19.7153 expand
13 26 −42.8821 expand
14 28 −42.8821 contract inside
15 30 −42.8821 contract inside
16 32 −42.8821 contract inside
17 34 −42.9869 contract inside
18 36 −42.9875 contract inside
19 38 −43 contract inside
20 40 −43 contract inside
21 42 −43 contract inside
22 44 −43 contract inside
23 46 −43 contract inside
24 48 −43 contract inside
25 50 −43 contract inside
26 52 −43 contract inside
27 54 −43 contract inside

Optimization terminated:
the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e−04
and F(X) satisfies the convergence criteria using OPTIONS.TolFun of 1.000000e−04

x = 2.0000
y = −43

Como bien se puede observar, nos encuentra el mı́nimo perfectamente (e.g f (x∗ ) = −43 con x∗ = 2), y lo
encuentra en 5 iteraciones.

Cabe destacar que solo nos encuentra un tipo de óptimo (Preguntarle a Eva por si acaso), le hemos es-
pecificado la función sin cambiarle el signo, esto significa que queremos que minimice la función, y se ve
como lo hace correctamente. El punto inicial indicado es el 0, para x0 = 2, con fminunc y con fminsearch
se obtiene el mismo óptimo, pero en menos iteraciones. En el caso dónde x0 = 2, la función fminunc solo
itera una vez (es lógico porqué ahı́ es dónde se encuentra el óptimo) y curiosamente para x0 = 4 itera hasta
9 veces (3 iteraciones más que para x0 = 0), lo cual resulta extraño ya que se encuentra igual de cerca a
x0 = 2 que el punto x0 = 0. Intuyo que este comportamiento puede deberse a que x0 = 4 se encuentra cerca
de la zona creciente de la función, por lo que calculará algún gradiente por ahı́.

Cabe destacar que para todos los puntos iniciales con los que se ha simulado el código de Matlab, la fun-
ción fminsearch es la que siempre itera más veces. La diferencia es que fminunc utiliza el método basado
en el gradiente para encontrar el óptimo mientras que fminsearch utiliza el método de búsqueda directa
Nelder-Mead simplex que no tiene gradiente. Por ello al optimizar vemos los siguientes ’métodos’ 1 ;
Expand
Contract inside Initial simplex
Estos tres métodos, están en el orden indicado, ya que se aplican en ese orden. Son variantes del método de
búsqueda directa Nelder-Mead.
1 No son métodos sino etapas del algoritmo de Nelder-Mead
Optimización de Sistemas 16 de mayo de 2023

En aspectos generales, este método se puede entender muy bien con la siguiente imagen; Teniendo f (x),

Figura 4: Método de Nelder-Mead

donde x ∈ Rn y cuyos puntos de prueba son; x = {x1 , ..., xn+1 }

El método de Nelder-Mead simplex primero ordena consecuentemente según los vértices del triángulo;
f (x1 ) ≤ f (x2 ) ≤ ... ≤ f (xn+1 ), luego de esto comprueba si debe de parar. Luego calcula xo de todos
los puntos excepto el de xn+1 . La variable xo denota el centroide, también llamado: centro geométrico,
denota la posición media de manera aritmética de todos los puntos de la superficie de una figura. Véase la
siguiente figura de ejemplo:

Figura 5: Un triangulo con su centroide indicado.

La ’etapa’ con nombre Expand depende de otra anterior, que es la deReflection, esta etapa del método,
calcula el punto reflejado como;
xr = xo + α(xo − xn+1 ) con α > 0 (1)
Ahora, si el punto reflejado es mejor que el segundo peor pero no mejor que el punto ideal, entonces obtiene
un nuevo simplex reemplazando el peor punto xn+1 con aquel punto reflejado, calculado previamente; xr ,
y se vuelve al primer paso. Luego esta la fase de Expansion y Contraction, estas dos fases son las que se
ven mayoritariamente a la hora de resolver el problema. Sabido como opera el método a rasgos generales, se
puede enunciar de manera breve y muy por encima lo que se desarrolla en esta dos fases.

En la fase de Expansion, primero se evalúa si la función en el punto reflejado es mayor que la función
evaluada en el primer punto del conjunto de puntos iniciales (recall: x ∈ Rn : x = {x1 , ..., xn+1 },esto es;
f (xr ) < f (x1 ) (2)
Si esto es ası́, entonces se calcula el punto expandido que tiene la siguiente forma;
xe = xo + γ(xr − xo ) con γ > 1 (3)
Optimización de Sistemas 16 de mayo de 2023

Ahora bien, si el punto expandido es mejor que el punto reflejado (i.e: f (xe ) < f (xr )), entonces, se obtiene
un nuevo simplex reemplazando el peor punto xn+1 con el punto extendido: xe , hecho esto, se vuelve al paso
1 y se repite de nuevo el proceso. Si esta última condición no se cumple, entonces se obtiene un nuevo simplex
reemplazando el peor punto xn+1 con el punto reflejado; xr

A la fase de Expansion le sucede la fase de Contraction. En esta etapa/fase, ya se cumple que: f (xr ) ≥ f (xn )
donde f (xn ) hace referencia al segundo punto más ideal/mayor o lo que es lo mismo, el segundo mejor can-
didato.
Ahora bien, si f (xr ) < f (xn+1 ) entonces se calcula el ”punto contraı́do”, este se calcula de la siguiente
manera;
xc = xo + ρ(xr − xo ) con 0 < ρ ≤ 0′ 5 (4)
Sabiendo esto, se contemplan dos escenarios, el primero, se enuncia a continuación. Si el ”punto contraı́do” es
mejor que el ”punto reflejado”, esto es: f (xc ) < f (xr ), entonces se obtiene otro nuevo simplex reemplazando
el peor punto f (xn+1 ) con el ”punto contraı́do”, i.e: xc ) y se retorna al paso 1. En cualquier otro caso se
vuelve al último paso llamado ”Shrink”

El segundo escenario, contempla el cumplimiento de la siguiente condición: f (xr ) ≥ f (xn+1 ) luego se compu-
ta el punto fuera de la siguiente manera:

xc = xo + ρ(xn+1 − xo ) con 0 < ρ ≤ 0′ 5 (5)

Si el ”punto contraı́do es mejor que el peor punto, i.e: f (xc ) ≤ f (xn+1 ) Entonces se obtiene un nuevo simplex
reemplazando el peor punto f (xn+1 ) con el ”punto contraı́do”, i.e: xc y se retorna al paso 1. En cualquier
otro caso se va al último paso, en este caso el paso/etapa: Shrink (en castellano: retracción). En este paso
se reemplazan todos los puntos excepto el mejor (x1 )) con:

xi = x1 + σ(xi − x1 ) (6)

Hace falta notar que α, γ, ρ y σ son los coeficientes de reflexión, expansión, contracción y retracción. Algunos
valores estándar para estos coeficientes son; α = 1, γ = 2, ρ = 1/2 y σ = 1/2.

En el resultado de arriba se pueden ver todos estos pasos que se acaban de explicar, todos ellos en or-
den.

El handicap de este método reside en la poca versatilidad de la búsqueda que efectúa, ya que la búsqueda
de dos tipos de óptimos se hace por separado, es decir;
Primero se busca el mı́nimo/máximo.
Luego se busca el máximo/mı́nimo
Lo bueno de este método, es el ahorro en materia de código, correspondiente al cálculo de las primeras
y segundas derivadas en el caso de los métodos analı́ticos para una función con una única variable de decisión.

Se busca ahora el máximo, para ello en el código de arriba des-comentamos la lı́nea %y=-y ⇒ y=-y. El
resultado para x0 = 0 es el siguiente:

Iteration Func−count f(x) Step−size optimality


0 2 −5 20
1 12 −52.9281 0.0980777 3.69
2 16 −52.9982 0.1 0.599
3 18 −53 1 0.0246
4 20 −53 1 0.000154
5 22 −53 1 2.38e−07

Local minimum found.


Optimización de Sistemas 16 de mayo de 2023

Optimization completed because the size of the gradient is less than


the value of the optimality tolerance.

<stopping criteria details>

x = −2.0000
y = −53.0000

Iteration Func−count min f(x) Procedure


0 1 −5
1 2 −5 initial simplex
2 4 −5.01 expand
3 6 −5.03 expand
4 8 −5.07 expand
5 10 −5.15 expand
6 12 −5.31002 expand
7 14 −5.63016 expand
8 16 −6.27128 expand
9 18 −7.56033 expand
10 20 −10.1923 expand
11 22 −15.8641 expand
12 24 −29.7077 expand
13 26 −52.8834 expand
14 28 −52.8834 contract inside
15 30 −52.8834 contract inside
16 32 −52.8834 contract inside
17 34 −52.9865 contract inside
18 36 −52.9879 contract inside
19 38 −53 contract inside
20 40 −53 contract inside
21 42 −53 contract inside
22 44 −53 contract inside
23 46 −53 contract inside
24 48 −53 contract inside
25 50 −53 contract inside
26 52 −53 contract inside
27 54 −53 contract inside

Optimization terminated:
the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e−04
and F(X) satisfies the convergence criteria using OPTIONS.TolFun of 1.000000e−04

x = −2.0000
y = −53

Como se puede volver a comprobar, nos devuelve el óptimo correcto, en este caso el máximo indicado, que
se encontró en su momento con los métodos analı́ticos. Esto es; f (x∗ ) = 53 con x∗ = −2. Para el caso de
x0 = 0 el máximo lo ha encontrado en 6 iteraciones. Para x0 = 4 no encuentra el óptimo deseado, ya que
esta cerca de la zona creciente de la función, por lo tanto nos devuelve el siguiente resultado;

x = 66434
y = −1.2941e+24

Este óptimo no es correcto, el resultado lo encuentra en 2 iteraciones. Además nos explica porque ha parado:
La función no está acotada, y efectivamente esto es ası́, como ya se comentó en un párrafo anterior.

Problem appears unbounded.

fminunc stopped because the objective function value is less than


or equal to the value of the objective function limit.
Optimización de Sistemas 16 de mayo de 2023

0′ 75
 
2.2. Segunda función: f (x) = 0′ 65 − 1+x2
− 0′ 65 · arctg 1
x

0′ 75
 
′ 1
f (x) = 0 65 − − 0′ 65 · arctg (7)
1 + x2 x
Es importante notar que la función objetivo en este caso, no es continua 2 . Como se ha visto en teorı́a, para
calcular los máximos y mı́nimos ası́ como los puntos de inflexión, se ha de derivar la función dos veces.

df (x) 3x 13
= +
dx 2
2(x + 1) 2 20x · ( x12 + 1)
2

d2 f (x) 3 13 6x2 13
= − 1 − 2 +
dx 2 2
2(x + 1) 2 10x · ( x2 + 1) (x + 1)3
3 10x5 · ( x12 + 1)2
Una vez obtenidas las dos primitivas de f (x), las dos se igualan a 0. Al igualar la segunda derivada de
la función a 0, se obtienen los máximos ası́ como los mı́nimos de la función. Para dfdx
(x)
= 0 se obtiene
∗ ′ ′
como resultado: x ∈ {−1 7295, −0 5782} ∴ Si se introducen estas soluciones en la expresión de la segunda
primitiva, podremos saber si se tratan de máximos , mı́nimos o de puntos de inflexión. Se introducen las
soluciones en la segunda primitiva:

6(−1′ 7295)2

2

d f (x)  f¨(x∗1 ) = 3
2((−1′ 7295)2 +1)2 − 13
1
10(−1′ 7295)3 ·( (−1′ 7295)
− ((−1′ 7295)2 +1)3 + 13
1
10(−1′ 7295)5 ·( (−1′ 7295) 2
2 +1) 2 +1)

= 6(−0′ 5782)2
dx2 x=x∗  f¨(x∗2 ) = 3
− 13
− + 13
2((−0′ 5782)2 +1)2 1
10(−0′ 5782)3 ·( (−0′ 5782)2 +1) ((−0′ 5782)2 +1)3 1
10(−0′ 5782)5 ·( (−0′ 5782)2 +1)
2

f¨(x∗1 ) = −0,0470
f¨(x∗ ) = 0,4203
2

min{f (x)} = 0,4203

max{f (x)} = −0,0470

puntoinf lexión = Empty sym: 0-by-1


Para este caso no se ha encontrado ningún punto de inflexión porque ∄x∗ que haga que f (x∗ ) = 0
A continuación se adjunta la representación gráfica de la función:
En el gráfico 15 se puede ver el máximo y el mı́nimo mencionados antes, pero podemos ver como se
tratan de óptimos locales. Al ver el gráfico podrı́amos pensar que hay un máximo global y un mı́nimo global
que el método analı́tico no ha sabido devolver, pero en realidad la linea vertical que une esos dos óptimos,
analı́ticamente no existe, e ilustra la presencia de un limite, por la izquierda se tiene: lı́mx→0 f (x) = ∞ y por
la derecha se tiene: lı́mx→(x>0) f (x) = 0′ 6. Por lo que teóricamente no se tratan ni de un máximo ni de un
mı́nimo, pero si fuese ası́, el máximo global (el pico más alto en el gráfico) se consigue para un x∗ = −0′ 05
y el mı́nimo global es para x∗ ≈ 0. Estos no aparecen, pues al derivar 3 , se obtiene el siguiente resultado
gráfico, donde solo se aprecian los óptimos analı́ticos mencionados anteriormente.

Sabiendo cuáles son los óptimos que uno ha de esperar en esta función, se implementan las funciones nativas
de Matlab, para encontrar dichos óptimos.
2 Como f : x ∈ R, entonces x puede tomar el 0 como valor, si esto es asi, se tendrı́a; arctan(1/x)|
x=0 = arctan(1/0) − → ∞.
Esto darı́a como resultado f (x) = −∞ pero f ∈ R, por lo tanto: f : R \ {0} −
→ R significando esto que la función no está definida
en ese punto.
3 f (x) = arctg(x) → f˙(x) = 1
al derivar no hay arctn lo que no da lugar a una discontinuidad puesto que se ha fijado
1+x2 √
que x ∈ R, en el caso de que x ∈ C entonces f˙ : C \ {j} −
→ C pues la función no estarı́a definida para j (j = −1)
Optimización de Sistemas 16 de mayo de 2023

(a) Representación gráfica de la función del (b) Representación gráfica de la primera derivada
segundo caso. de la función del segundo caso de la tarea 1.

Figura 6: Resultado gráfico de los métodos analı́ticos

Para esta función y la siguiente, no se enunciará el código ya que lo único que varı́a es la función y el
punto inicial.

Para un x0 = 0, se obtiene el siguiente resultado minimizando la función objetivo;

First−order
Iteration Func−count f(x) Step−size optimality
0 2 −1.12102 0.65

Local minimum possible.

fminunc stopped because it cannot decrease the objective function


along the current search direction.

<stopping criteria details>

x = 0
y = −1.1210

Iteration Func−count min f(x) Procedure


0 1 −1.12102
1 2 −1.12102 initial simplex
2 4 −1.12102 contract inside
3 6 −1.12102 contract inside

Optimization terminated:
the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e−04
and F(X) satisfies the convergence criteria using OPTIONS.TolFun of 1.000000e−04

x = 0
y = −1.1210

Para el método de fminunc se obtiene x = 2.3512e-06, y = -1.1210, el valor de la función es y = −1′ 1210.
No es el mı́nimo deseado, de hecho tanto fminunc como fminsearch nos devuelve el mismo resultado, se
puede ver arriba. El resultado que nos devuelven los dos métodos se corresponde con el supuesto mı́nimo
que hay en la siguiente gráfica:
Como se ha mencionado antes, al inicio de la función el resultado que se muestra no se corresponde con
un óptimo de la función sino con el lı́mite al que la función tiende, el método lo toma como un óptimo
porque Matlab lo ha pintado, pero no lo es. Teniendo en cuenta este resultado, las dos funciones de Matlab
para encontrar el mı́nimo no son ”fiables”. Se intenta ahora para otro punto inicial para ver si se consigue
Optimización de Sistemas 16 de mayo de 2023

Figura 7: Graficado de la función con el resultado obtenido por fminunc y por fminsearch

encontrar el óptimo correcto, se ha probado con x0 = 2 y esto nos devolvı́a el mismo óptimo que para x0 = 0
pero en el caso del método de fminsearch el proceso de búsqueda se alargaba hasta 29 iteraciones, lo mismo
pasa para x0 = 4. El comportamiento cambia cuando se le pasa un punto inicial negativo, por ejemplo para
x0 = −2, el resultado para este nuevo punto inicial es el siguiente.

First−order
Iteration Func−count f(x) Step−size optimality
0 2 0.801371 0.01
1 14 0.674721 2307.18 0.000938
2 16 0.672668 1 0.000789
3 18 0.665738 1 0.000381
4 20 0.662243 1 0.00023
5 22 0.659131 1 0.000128
6 24 0.656923 1 7.37e−05
7 26 0.655217 1 4.19e−05
8 28 0.65394 1 2.39e−05
9 30 0.652974 1 1.36e−05
10 32 0.652245 1 7.75e−06
11 34 0.651695 1 4.42e−06
12 36 0.651279 1 2.52e−06
13 38 0.650966 1 1.43e−06
14 40 0.650729 1 8.18e−07

Local minimum found.


Optimization completed because the size of the gradient is less than
the value of the optimality tolerance.
<stopping criteria details>
x = −890.5280
y = 0.6507

Iteration Func−count min f(x) Procedure


0 1 0.801371
1 2 0.80024 initial simplex
2 4 0.797346 expand
3 6 0.790088 expand
4 8 0.774291 expand
5 10 0.748087 expand
6 12 0.717206 expand
7 14 0.690695 expand
8 16 0.672636 expand
9 18 0.661974 expand
10 20 0.656163 expand
11 22 0.653127 expand
12 24 0.651575 expand
13 26 0.650791 expand
14 28 0.650396 expand
Optimización de Sistemas 16 de mayo de 2023

15 30 0.650198 expand
16 32 0.650099 expand
17 34 0.65005 expand
18 36 0.650025 expand
19 38 0.650012 expand
20 40 0.650006 expand
21 42 0.650003 expand
22 44 0.650002 expand
23 46 0.650001 expand
24 48 0.65 expand
25 50 0.65 expand
26 52 0.65 expand
27 54 0.65 expand
28 56 0.65 expand
... ... ... ...
45 90 0.65 expand
46 92 0.65 expand
47 94 0.65 expand
48 96 0.65 expand
49 98 0.65 expand
50 100 0.65 expand
51 102 0.65 expand
52 104 0.65 expand
53 106 0.65 expand
54 108 0.65 expand
55 110 0.65 reflect
56 112 0.65 contract outside
57 115 0.65 shrink
58 118 0.65 shrink
... ... ... ...
82 190 0.65 shrink
83 193 0.65 shrink
84 196 0.65 shrink
85 199 0.65 shrink
86 202 0.65 shrink

Exiting: Maximum number of function evaluations has been exceeded


− increase MaxFunEvals option.
Current function value: 0.650000
x = −2.7022e+15
y = 0.6500

Los dos métodos, tanto fminunc como fminsearch encuentran el mismo mı́nimo, pero en un numero dife-
rente de iteraciones. Mientras que fminunc encuentra el óptimo en 15 iteraciones, fminsearch lo encuentra
en 87 iteraciones, algo lógico ya que implementa el algoritmo directo de Nelder-Mead 4 , como se ha vis-
to es un algoritmo sencillo matemáticamente hablando, pero computacional mente puede ser algo pesado
por el numero de veces que puede iterar debido al número de etapas que tiene, además es un poco largo,
ya que el algoritmo tiene 5 etapas. Pero esto también se debe al punto inicial especificado. Comparándo-
lo con los métodos analı́ticos se puede verificar que estas dos funciones de Matlab tampoco encuentran el
mı́nimo correcto, para dicho punto inicial, pues el óptimo que encuentran es para x∗f minunc = −890,5280 y
x∗f minsearch = −2,7022 × 1015 , algo imposible de ver gráficamente. Cabe recordar que la columna First order
optimality enuncia los posibles óptimos, en el caso de esta función, ninguno de los valores que se muestran
en dicha columna se corresponden con el óptimo correcto.

Finalmente se ha probado con x0 = −1, para este punto si que se encuentra el mı́nimo correcto con las
dos funciones de Matlab, esto es; f (x∗ ) = 0′ 7681 con x∗ = −0′ 5787, véase el siguiente resultado:

First−order
Iteration Func−count f(x) Step−size optimality
0 2 0.785509 0.05
1 6 0.769647 10 0.04
2 10 0.768178 0.355663 0.000348
4 El método se ha explicado en la primera función
Optimización de Sistemas 16 de mayo de 2023

3 12 0.768178 1 6.22e−05
4 14 0.768178 1 1.34e−07

Local minimum found.

Optimization completed because the size of the gradient is less than


the value of the optimality tolerance.
<stopping criteria details>
x = −0.5782
y = 0.7682

Iteration Func−count min f(x) Procedure


0 1 0.785509
1 2 0.785509 initial simplex
2 4 0.780323 expand
3 6 0.77069 expand
4 8 0.769647 reflect
5 10 0.768274 contract inside
6 12 0.768274 contract inside
7 14 0.76818 contract inside
8 16 0.76818 contract inside
9 18 0.76818 contract inside
10 20 0.768178 contract inside
11 22 0.768178 contract inside
12 24 0.768178 contract inside
13 26 0.768178 contract inside
14 28 0.768178 contract inside
15 30 0.768178 contract inside

Optimization terminated:
the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e−04
and F(X) satisfies the convergence criteria using OPTIONS.TolFun of 1.000000e−04
x = −0.5782
y = 0.7682

Se encuentra el mı́nimo correcto en pocas iteraciones (5 para fminunc y 16 para fminsearch). En este caso
entre los métodos analı́ticos y las funciones de optimización de Matlab, personalmente, resolverı́a el problema
con las funciones de Matlab, si supiese más o menos dónde está el mı́nimo para poder saber donde poner
el punto inicial: x0 y obtener el resultado lo más rápido posible, ya que a nivel de velocidad de computo,
son más rápidas las funciones de Matlab, que los métodos analı́ticos. Si que es verdad que nunca se va a
saber con exactitud dónde van a estar los óptimos de una función por lo que si se quiere jugar seguro, lo más
acertado serı́a optimizar la función con los métodos analı́ticos, pero todo depende del contexto y del problema.

Una vez encontrado el mı́nimo, se intenta encontrar el máximo de la función (para no hacer el informe
más largo de lo que es, enunciaré el único resultado correcto, y mencionaré para que otros puntos iniciales
se ha simulado el código)

Para x0 = −1 se ha encontrado el máximo correcto, para las dos funciones: fminunc y fminsearch, véase
el resultado:

First−order
Iteration Func−count f(x) Step−size optimality
0 2 −0.785509 0.05
1 6 −0.800673 8.97112 0.0166
2 8 −0.802755 1 0.00291
3 10 −0.802836 1 0.000548
4 12 −0.802839 1 2.65e−05
5 14 −0.802839 1 2.58e−07

Local minimum found.


Optimization completed because the size of the gradient is less than
the value of the optimality tolerance.
Optimización de Sistemas 16 de mayo de 2023

<stopping criteria details>

x = −1.7295
y =−0.8028

Iteration Func−count min f(x) Procedure


0 1 −0.785509
1 2 −0.78794 initial simplex
2 4 −0.792305 expand
3 6 −0.798685 expand
4 8 −0.80283 expand
5 10 −0.80283 contract outside
6 12 −0.80283 contract outside
7 14 −0.80283 contract inside
8 16 −0.802839 contract inside
9 18 −0.802839 contract inside
10 20 −0.802839 contract inside
11 22 −0.802839 contract inside
12 24 −0.802839 contract inside
13 26 −0.802839 contract inside
14 28 −0.802839 contract inside
15 30 −0.802839 contract inside
16 32 −0.802839 contract inside

Optimization terminated:
the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e−04
and F(X) satisfies the convergence criteria using OPTIONS.TolFun of 1.000000e−04

x = −1.7295
y = −0.8028

Hace falta notar que máximo correcto es f (x∗ ) = 0,8028 con x∗ = −1,7295, las dos funciones nos lo devuelven
cambiado de signo, porque para poder encontrar el máximo, se le ha de cambiar el signo a toda la función,
por ello el valor de la función está cambiado de signo, por lo que el resultado es correcto.

2
2.3. Tercera función: f (x) = cos(x) · e−(x−π)
2
f (x) = cos(x) · e−(x−π) (✈)
df (x) 2 2
f˙(x) = = −e−(x−π) · sin(x) − e−(x−π) · cos(x) · (2x − 2π)
dx
d2 f (x) 2 2 2
f¨(x) = = e−(x−π) · cos(x) · (2x − 2π)2 − 3e−(x−π) · cos(x) + 2e−(x−π) · sin(x) · (2x − 2π)
dx2
Con el método analı́tico, se obtiene el siguiente resultado;

Figura 8: Representación gráfica de la función


Optimización de Sistemas 16 de mayo de 2023

Figura 9: Representación gráfica de la derivada de la función

Corrección respecto a la P2B: esta función no es discontinua en π de hecho la función es continua ∀R,
debı́ de hacer ese apartado rápido y cometı́ esa barbaridad de error. El óptimo se corresponde con un mı́nimo
en x∗ = −1′ 6742 pues f (x∗ ) = −8′ 74 · 10−12 aunque podrı́a ser aproximado a un punto de inflexión por lo
pequeño que es el valor que toma la función en ese punto.

Viendo la representación gráfica se intuye que habrá un mı́nimo en x∗ = π en dicho valor la función vale;
f (x∗ ) = −1. Sabiendo que se tiene un coseno multiplicado a una exponencial, se analiza la ecuación. El
cos(x) toma un valor máximo para x = 0 y x = 2π, En dichos valores, la función f (x) toma los siguientes
valores de manera correspondiente; f (x∗ ) = 5,1723 × 10−5 y f (x∗ ) = 5,1723 × 10−5 , este es el óptimo que
se encuentra arriba con los métodos analı́ticos. Esta función también se resolvió con los métodos iterativos
y con todos ellos se llegó a la conclusión de que el mı́nimo estaba en x∗ = −1,680000 y la función vale 0
en ese punto. Pero la función tiene el otro mı́nimo en π. Volviendo a los métodos iterativos y resolviendo la
función con todos lo métodos iterativos en R todas las simulaciones se han realizado con; x0 = 3 y L = 1 ası́
como se le ha especificado que vaya por la derecha (no todos los métodos necesitan punto inicial ni tampoco
un paso, pero lo he puesto una vez para no tener que repetirlo).

Resultado con Newton;


Elapsed time is 0.004847 seconds. Newton: count=4 x=[3.141593] -->f(x)=[-1.000000]

Figura 10: Representación gráfica del método tras iterar

Resultado con la secante;


Elapsed time is 0.005844 seconds. Secant: count=1 x=[3.141593] -->f(x)=[-1.000000]
Resultado con la dicotómica;
Optimización de Sistemas 16 de mayo de 2023

Figura 11: Representación gráfica del método tras iterar

Elapsed time is 0.010197 seconds. Dichotomy: count=36 x=[3.141592] -->f(x)=[-1.000000]

Figura 12: Representación gráfica del método tras iterar

Resultado con la tricotómica;


Elapsed time is 0.012800 seconds. Trichotomy: count=22 x=[3.141592] -->f(x)=[-1.000000]

Figura 13: Representación gráfica del método tras iterar

Resultado con la interpolación cuadrática (ver figura 14)


Elapsed time is 0.037365 seconds. Quadratic: count=1 x=[3.065948] -->f(x)=[-0.991451]
Optimización de Sistemas 16 de mayo de 2023

Figura 14: Representación gráfica del método tras iterar

Ahora se resuelve con las funciones de Matlab; fminsearch y fminunc:

First−order
Iteration Func−count f(x) Step−size optimality
0 2 −0.970342 0.413
1 6 −0.999983 0.334625 0.0101
2 8 −1 1 0.000292
3 10 −1 1 4.74e−09
Local minimum found.
Optimization completed because the size of the gradient is less than
the value of the optimality tolerance.
<stopping criteria details>

x = 3.1416
y = −1.0000

Iteration Func−count min f(x) Procedure


0 1 −0.970342
1 2 −0.999894 initial simplex
2 4 −0.999894 contract inside
3 6 −0.999894 contract inside
4 8 −0.999894 contract inside
5 10 −0.999999 contract inside
6 12 −0.999999 contract inside
7 14 −0.999999 contract inside
8 16 −1 contract inside
9 18 −1 contract inside
10 20 −1 contract inside
11 22 −1 contract inside
12 24 −1 contract inside

Optimization terminated:
the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e−04
and F(X) satisfies the convergence criteria using OPTIONS.TolFun of 1.000000e−04

x = 3.1416
y = −1.0000

Las dos funciones nos devuelven el resultado esperado y correcto, cabe destacar que este resultado se ha
obtenido para x0 = 3, por ello a las dos funciones les ha llevado muy pocas iteraciones encontrar el óptimo.
El mejor resultado a nivel de número de iteraciones contemplando solo las dos funciones de optimización de
Matlab, es la función fminunc ya que es la que itera menos (ya sabemos el porqué). Ahora bien teniendo en
cuenta el resto de métodos, los dos mejores métodos son el de Newton y el de la secante ya encuentran el
óptimo en 4 iteraciones y en 1 iteración respectivamente.

Ahora se va intentar maximizar la función para ver si fminsearch y fminunc encuentran algún máxi-
Optimización de Sistemas 16 de mayo de 2023

mo. Pondremos el punto inicial cerca de la pequeña colina posicionada antes del mı́nimo en x∗ = π. Se ha
probado con puntos iniciales que están dentro del siguiente rango: −2 ≤ x0 ≤ 4 y todos devolvı́an un valor
de la función de f (x∗ ) = 0′ 0090 que viene a ser 0 aproximadamente. Por lo que teniendo estos datos sobre la
mesa, se concluye diciendo que la función no tiene ningún máximo ya que ni con los métodos analı́ticos, ni
con los iterativos, ni tampoco con las funciones fminsearch y fminunc se ha conseguido encontrar un valor
superior a 0’5 y que lo tome la función.

3. Tarea 2
Elegir 3 de las funciones dependientes de múltiples variable de decisión optimizadas en los trabajos de
evaluación continua previos y buscar el óptimo con las funciones de optimización de Matlab fminsearch
y fminunc. Comparar los resultados obtenidos los métodos de Matlab y con los métodos utilizados para
resolverlos anteriormente.

3.1. Primera función: f (x1 , x2 ) = 2x21 + 6x22 + 4x1 − 3x2


Esta función se resolvió con los métodos analı́ticos en la P2A Se adjuntan a continuación el cálculo del
gradiente ası́ como el calculo del Hessiano.

Se comienza con el gradiente de la función:


" #
∂f (x)    
∂x1 4x1 + 4 4x1 + 4 = 0
∇f (x) := ∂f (x) = ⇒ (8)
12x2 − 3 12x2 − 3 = 0
∂x2

Se obtiene el siguiente resultado;

x∗ = −1 1
 
4

Ahora se procede con el cálculo de la matriz hessiana:


 2 2

∂ f (x) ∂ f (x)  
2
 2∂x1 ∂x1 x2  4 0
∇2 f (x) := ∂ f (x) ∂ 2 f (x)
= (9)
0 12
∂x2 x1 ∂x22

Como en la segunda derivada ya no hay ninguna variable de decisión (ni x1 y tampoco x2 ) solamente hay
que enunciar los valores obtenidos tras igualar el gradiente de la función a 0. Obteniendo:
 
4 0
∇2 f (x∗ ) =
0 12
Como ∇2 f (x∗ ) es definida, entonces se tiene un óptimo local y sabiendo que x∗ = −1 41 con ∇2 f (x∗ )
 

positiva, entonces se puede concluir diciendo que se trata de un mı́nimo local. A continuación la representación
gráfica en 2D y 3D;

(a) Representación gráfica de (b) Representación gráfica en


las curvas de nivel 3 dimensiones

Figura 15: Resultado gráfico de los métodos analı́ticos


Optimización de Sistemas 16 de mayo de 2023

El mı́nimo de la función se encuentra en f (x∗1 , x∗2 ) = −2′ 375 con (x∗1 , x∗2 ) = (−1, 0′ 25) Por lo que a la hora
de optimizar la función con las funciones de Matlab se deberı́a de obtener dicho óptimo. Para x0 = (−1, 0′ 2)
y usando fminunc resultado gráfico es el siguiente:

Figura 16: Representación gráfica de la función fminunc de Matlab tras iterar

Como se puede ver por el resultado gráfico, se encuentra el óptimo correcto esto es f (x∗1 , x∗2 ) = −2′ 36
con (x∗1 , x∗2 ) = (−1, 0′ 2)
El resultado analı́tico es el siguiente;

Norm of First−order
Iteration f(x) step optimality CG−iterations
0 2.36 0.6
1 2.36 0.05 0.6 1
2 2.36 0.0125 0.6 0
3 2.36 0.003125 0.6 0
4 2.36 0.00078125 0.6 0
5 2.36 0.000195312 0.6 0
6 2.36 4.88281e−05 0.6 0
7 2.36 1.2207e−05 0.6 0
8 2.36 3.05176e−06 0.6 0
9 2.36 7.62939e−07 0.6 0
Local minimum possible.
fminunc stopped because the size of the current step is less than
the value of the step size tolerance.

<stopping criteria details>


x = −1.0000 0.2000
y = 2.3600

Ahora se prueba con fminsearch (se intuye que el número de iteraciones será mayor ya que utiliza el método
de Simplex de Nelder Mead.)

Norm of First−order
Iteration f(x) step optimality CG−iterations
0 −2.36 0.6
1 −2.375 0.05 4.44e−16 1
Local minimum found.
Optimization completed because the size of the gradient is less than
the value of the optimality tolerance.
<stopping criteria details>
x = −1.0000 0.2500
y = −2.3750
x = −1.0000 0.2500
y = −2.3750

El resultado gráfico es el siguiente;


Optimización de Sistemas 16 de mayo de 2023

Figura 17: Representación gráfica de la función fminsearch de Matlab tras iterar

Como se puede observar, la función encuentra el mı́nimo correcto, y sorprendentemente lo encuentra


en tan solo 2 iteraciones, algo bastante extraño prestando atención al historial de soluciones obtenidas con
este método. Cabe destacar que la función es bastante sencilla por lo que tampoco es tan sorprendente. En
este caso el método de optimización ofrecido por las funciones de Matlab resulta eficaz, incluso más que los
métodos analı́ticos, en lo que a iteraciones se refiere.

3.2. Segunda función: f (x1 , x2 ) = x31 + x32 + 2 ∗ x21 + 4 ∗ x22 + 6


Se comienza con el gradiente de la función:
" # 
∂f (x)
3x21 + 4x1
  2 
∂x1 3x1 + 4x1 = 0
∇f (x) := ∂f (x) = ⇒ (10)
3x2 + 8x2 3x2 + 8x2 = 0
∂x2

Se obtiene el siguiente resultado;

x∗,1 = 0 0
 

x∗,2 = 0 −8
 
3

x∗,3 = −4
 
3 0
x∗,4 = −4 −8
 
3 3

Ahora se procede con el cálculo de la matriz hessiana:


 2 2

∂ f (x) ∂ f (x)  
2 ∂x1 x2  6x1 + 4 0
∇2 f (x) :=  ∂ 2∂x 1
f (x) ∂ 2 f (x)
= (11)
0 6x2 + 8
∂x2 x1 ∂x22

Ahora solamente hay que sustituir los valores obtenidos tras igualar el gradiente de la función a 0 en el
resultado de la Hessiana, ası́ se podrá caracterizar cada solución, pues serán matrices diagonales y por ello
se podrán ver directamente los eigenvalues que serán los encargados de caracterizar la matriz. Se obtienen:

 
4
0
∇2 f (x∗,1 ) = ⇒ positiva
0
8
 
4 0
∇2 f (x∗,2 ) = ⇒ indef inida
0 −8
 
2 ∗,3 −4 0
∇ f (x ) = ⇒ indef inida
0 8
Optimización de Sistemas 16 de mayo de 2023

 
−4 0
∇2 f (x∗,4 ) = ⇒ negativa
0 −8

Esto significa que se tendrán un máximo y un mı́nimo, siendo los dos óptimos de carácter local, además
de 2 puntos sillas, pues hay dos matrices hessianas que son indefinidas.

A continuación se muestra la representación gráfica en 2D y 3D; En las curvas de nivel, se pueden ob-

(a) Representación gráfica de las curvas de (b) Representación gráfica en 3


nivel dimensiones

Figura 18: Resultado gráfico de los métodos analı́ticos

servar los dos puntos silla (el de abajo a la derecha y el de arriba a la izquierda). Además de un máximo y
un mı́nimo. Sabiendo los mı́nimos que se han encontrado con los métodos analı́ticos, se intentará encontrar
dichos óptimos con las funciones de Matlab.

Con fminunc y con una coordenada de puntos iniciales; x0 = (−1, 0′ 2)


Se obtiene el siguiente resultado gráfico;

Figura 19: Representación gráfica de la función fminunc de Matlab tras iterar

El resultado analı́tico es el siguiente;

Norm of First−order
Iteration f(x) step optimality CG−iterations
0 7.168 1.72
1 7.168 10 1.72 1
2 7.168 2.5 1.72 0
3 6.26209 0.625 1.1 0
Optimización de Sistemas 16 de mayo de 2023

4 6.1704 0.666403 1.32 1


5 6.02419 0.166601 0.463 1
6 6.00011 0.0997344 0.0298 1
7 6 0.00737802 0.000163 1
8 6 4.0824e−05 5e−09 1
Local minimum found.
Optimization completed because the size of the gradient is less than
the value of the optimality tolerance.

<stopping criteria details>


x = 1.0e−08 * 0.1250 −0.0000
y = 6

Se encuentra el mı́nimo de la función, pues f (x∗ , y ∗ ) = 6 con (x∗ , y ∗ ) = (0, 0) al algoritmo le toma 9 iteracio-
nes encontrar uno de los óptimos (el mı́nimo). Ahora se repite el proceso pero para la función fminsearch
con el mismo punto inicial que antes.

Norm of First−order
Iteration f(x) step optimality CG−iterations
0 10 5
1 10 2.76197 5 1
2 7.23216 0.690492 2.27 0
3 6.60026 1.38098 2.67 1
4 6.02237 0.387506 0.444 1
5 6.0001 0.0962185 0.0278 1
6 6 0.00687186 0.000142 1
7 6 3.54151e−05 3.76e−09 1

Local minimum found.


Optimization completed because the size of the gradient is less than
the value of the optimality tolerance.
<stopping criteria details>

x = 1.0e−09 * 0.9411 −0.0000


y = 6
x = 1.0e−04 * 0.3803 0.2874
y = 6.0000

La función fminsearch también encuentra el óptimo de antes, pero lo hace en una iteración menos en com-
paración a la función fminunc, este comportamiento decreciente en lo que a iteraciones se refiere, ya se ha
observado arriba, y es que se intuye que cuando la función es fácil (cuadrática, cúbica sin ninguna componen-
te trigonométrica o exponencial y mucho menos logarı́tmica) la búsqueda del óptimo es más rápida que con
la función fminunc. Esto no se cumplı́a para las funciones de la anterior tarea, y justamente las funciones de
la tarea 1 de esta práctica tienen trigonométricas o exponenciales y a la hora de resolver los problemas con
las funciones de Matlab, la función fminsearch solı́a encontrar el óptimo en muchas más iteraciones, cosa
que no pasa en esta tarea.

El mı́nimo ya se ha encontrado, pero ahora se deberı́a de encontrar el máximo, para encontrar el máxi-
mo le cambiamos el signo a la función y también a las componentes del gradiente. Se simula el código para;
x0 = (−1, −1)
El resultado analı́tico es el siguiente;

Norm of First−order
Iteration f(x) step optimality CG−iterations
0 −10 5
1 −10 10 5 1
2 −13.3076 2.5 8.68 0
3 −16.5606 0.696969 1.34 1
4 −16.6664 0.152567 0.0676 1
5 −16.6667 0.00841536 0.000212 1
6 −16.6667 2.64408e−05 2.1e−09 1
Optimización de Sistemas 16 de mayo de 2023

Local minimum found.


Optimization completed because the size of the gradient is less than
the value of the optimality tolerance.
<stopping criteria details>
x = −1.3333 −2.6667
y = −16.6667

Como se puede observar se obtiene el máximo esperado, el óptimo se ha obtenido en 7 iteraciones.


El resultado gráfico es el siguiente; En rojo se puede ver el punto inicial desde el cual se ha partido para

Figura 20: Representación gráfica de la función fminunc de Matlab tras iterar

encontrar el óptimo. Si se intenta optimizar la función objetivo con fminsearch se obtiene el siguiente
resultado analı́tico;

Norm of First−order
Iteration f(x) step optimality CG−iterations
0 −10 5
1 −10 10 5 1
2 −13.3076 2.5 8.68 0
3 −16.5606 0.696969 1.34 1
4 −16.6664 0.152567 0.0676 1
5 −16.6667 0.00841536 0.000212 1
6 −16.6667 2.64408e−05 2.1e−09 1

Local minimum found.


Optimization completed because the size of the gradient is less than
the value of the optimality tolerance.
<stopping criteria details>

x = −1.3333 −2.6667
y = −16.6667
x = −1.3333 −2.6667
y = −16.6667

En este caso las dos funciones de Matlab encuentran el óptimo correcto y en el mismo número de iteracio-
nes. Cabe destacar que no ha sido posible encontrar los puntos sillas con estas dos funciones ya que aún
poniendo el punto inicial dónde se encuentran estos puntos, los métodos se van al máximo o al mı́nimo, creo
que esto puede deberse a la cercanı́a de todos los puntos entre ellos, se ha probado incluso maximizando o
minimizando, pero tampoco ha surtido efecto.

Las funciones de Matlab son buenas, pero solo devuelven un óptimo por cada simulación algo poco práctico,
en cambio los métodos analı́ticos pueden devolver diferentes óptimos a la vez.
Optimización de Sistemas 16 de mayo de 2023

3.3. Tercera función: f (x1 , x2 ) = 100(x2 − x21 )2 + (1 − x1 )2


Se comienza con el gradiente de la función:

" #
∂f (x)
2x1 − 400x1 · (−x21 + x2 ) − 2, 2x1 − 400x1 · (−x21 + x2 ) − 2 = 0
   
∂x1
∇f (x) := = ⇒ (12)
∂f (x) −200x21 + 200x2 −200x21 + 200x2 = 0
∂x2

Se obtiene el siguiente resultado;

x∗ = 1
 
1
Ahora se procede con el cálculo de la matriz hessiana:
 2 
∂ f (x) ∂ 2 f (x)
1200x21 − 400x2 + 2
 
2 ∂x1 x2  −400x1
∇2 f (x) :=  ∂ 2∂x 1
2 = (13)
f (x) ∂ f (x)
2
−400x1 200
∂x2 x1 ∂x2

Ahora solamente hay que sustituir los valores obtenidos tras igualar el gradiente de la función a 0 en el
resultado de la Hessiana, ası́ se podrá caracterizar cada solución, pues serán matrices diagonales y por ello
se podrán ver directamente los eigenvalues que serán los encargados de caracterizar la matriz. Se obtienen:

 
800 −400
∇2 f (x∗ ) = ⇒ positiva
−400 200
1.000000 1.000000 positiva

Esto significa que se tendrán un mı́nimo, siendo un óptimo de carácter local

A continuación se muestra la representación gráfica;

(a) Representación gráfica de las curvas de (b) Representación gráfica en 3


nivel dimensiones

Figura 21: Resultado gráfico de los métodos analı́ticos

Sabiendo que se ha de encontrar, el mı́nimo en f (x∗1 , x∗2 ) = 0 para (x∗1 , x∗2 ) = (1, 1)

Para x0 = (0, 0) y usando fminunc resultado gráfico es el siguiente:


Optimización de Sistemas 16 de mayo de 2023

Norm of First−order
Iteration f(x) step optimality CG−iterations
0 1 2
1 1 1 2 1
2 0.953125 0.25 12.5 0
3 0.549578 0.0625 1.63 1
4 0.414158 0.125 2.74 1
5 0.292376 0.218082 5.67 1
6 0.155502 0.123894 0.954 1
7 0.117347 0.25 7.16 1
8 0.0385147 0.0935869 0.308 1
9 0.0385147 0.284677 0.308 1
10 0.0268871 0.0625 0.351 0
11 0.0118213 0.125 1.38 1
12 0.0029522 0.113247 0.983 1
13 0.000358233 0.0664422 0.313 1
14 1.04122e−05 0.0322022 0.0759 1
15 1.29593e−08 0.00556538 0.00213 1
16 2.21812e−14 0.000223724 3.59e−06 1

Local minimum possible.


fminunc stopped because the final change in function value relative to
its initial value is less than the value of the function tolerance.
<stopping criteria details>
x = 1.0000 1.0000
y = 2.2181e−14

Ahora el resultado gráfico;

Figura 22: Representación gráfica de la función fminunc de Matlab tras iterar

Como se puede comprobar gráfica y analı́ticamente, se encuentra el óptimo correcto ya que en los puntos
(x∗1 , x∗2 ) = (1, 1) la función vale; f (x∗1 , x∗2 ) ≃ 0

Ahora se simula para el mismo punto inicial pero para la función fminsearch.
El resultado analı́tico es el siguiente;

x =
1.0000 1.0000
y =
3.6862e−10
Optimización de Sistemas 16 de mayo de 2023

El resultado gráfico es el siguiente;

Figura 23: Representación gráfica de la función fminsearch de Matlab tras iterar

De nuevo, el mı́nimo devuelto es correcto, para este caso la función de optimización de Matlab: fminsearch
solo devuelve los valores (x∗1 , x∗2 ) = (1, 1) y el valor de la función en dichos puntos f (x∗1 , x∗2 ) = 0, debe de ser
que solo iterar una vez, lo que es una mejora con respecto al resultad en materia de iteraciones con respecto
a la función fminunc que itera hasta 17 veces.

4. Conclusión
En esta práctica se han comparado métodos de optimización mediante resultados analı́ticos y gráficos.
Cabe destacar la gran funcionalidad de las funciones fminunc y fminsearch, pero el hecho de que solo
devuelvan un tipo de óptimo reduce la versatilidad. Los métodos analı́ticos son potentes, por ello también
requieren de una mayor computación, debido al cálculo de gradientes, hessianos asi como de primeras y segun-
das derivadas, dependiendo del número de variables de decisión. Los métodos iterativos en comparación con
las funciones de optimización de Matlab, me parecen mejores ya que hay algunos que devuelven más de un
óptimo a la vez e iteran poco, sobretodo el método de Newton y de la secante. Ha sido un práctica larga pero
ilustrativa que me ha ayudado a refrescar funciones anteriores, ası́ como afianzar conceptos de los métodos
analı́ticos e iterativos vistos anteriormente. Creo además que ha sido una de las prácticas más importantes
que hemos hecho, porque al haber tenido que comparar resultados obtenidos con métodos anteriores, me
ha permitido corregir errores, un aspecto muy importante para ir afianzando conceptos correctamente y no
construir ideas erróneas unas encima de otras.

En la siguiente página se encuentra el código que se ha implementado para las funciones con dos varia-
bles de decisión. No he adjuntado todos los códigos porque solo cambia la función, por ello he adjuntado el
de dos variables de decisión, porque considero que es el más completo a nivel de contenido.
Optimización de Sistemas 16 de mayo de 2023

5. Código

clc
clear all
close all

f=@fungrad; %Funcion elegida


x=−3:0.01:2;
for i=1:length(x)
for j=1:length(x)
fv(i,j)=−f([x(i),x(j)]);
x1(i,j)=x(i);x2(i,j)=x(j);
end
end

%Pintar
subplot(2,1,1);mesh(x1,x2,fv);hold on;
subplot(2,1,2);contour(x1,x2,fv);hold on;
x0=[0,0];
y=−f(x0);
subplot(2,1,1);plot3(x0(1),x0(2),y,'or');
subplot(2,1,2);plot(x0(1),x0(2),'or');

%Parametros de optimizacion
opt=optimoptions(@fminunc,...
'Algorithm','trust−region',...
'GradObj','on',...
'Display','iter','MaxIter',20);
%Optimizo por los dos m t o d o s
%[x,y]=fminunc(f,x0,opt)
[x,y]=fminsearch(f,x0)
subplot(2,1,1);plot3(x(1),x(2),−y,'*b');
subplot(2,1,2);plot(x(1),x(2),'*b');

function [y,g]=fungrad(x)
x1=x(1);
x2=x(2);
y=100*(x2−x1ˆ2)ˆ2+(1−x1)ˆ2;
y=y; %Para maximizar cambiamos el signo
g(1)=2*x1 − 400*x1*(− x1ˆ2 + x2) − 2;
g(2)=−200*x1ˆ2 + 200*x2;
end

También podría gustarte