You are on page 1of 27

Optimización en dúas variables: ’O xogo da auga’

Optimización en dúas variables: ’O xogo da auga’

Hugo Carreira Rial

ETSE - Universidade de Santiago de Compostela

24 de Abril, 2022
Optimización en dúas variables: ’O xogo da auga’

Táboa de contidos

Introducción

Definición da función proposta

Cálculo do punto máximo inicial

Cálculo do máximo máis proximo

Conclusións
Optimización en dúas variables: ’O xogo da auga’
Introducción

Introducción

Enunciar e resolver un problema de optimización non linear


Construı́r unha función e determinar por qué é necesario resolver o
problema de optimización
Calcular a matriz Hessiana e Jacobiana da función
Prácticar o manexo de SageMath e dos códigos proporcionados
Desenvolver un código Sage de debuxa_dicotomia().
Aportar unha solución ó problema plantexado inicialmente.
Optimización en dúas variables: ’O xogo da auga’
Definición da función proposta

Cal é a función escollida para optimizar?

f (x, y ) = 2sin (2x ) + 2cos (2y ) − 4


Optimización en dúas variables: ’O xogo da auga’
Definición da función proposta

Qué representa?

O obxectivo: Identificar dous máximos en cada un dos eixos, x e y .


A finalidade: Determinar a distancia entre dous máximos no eixo x e no
eixo y.
Entón...decidimos crear: O xogo da auga
Consiste en, dado un punto inicial P, débese saltar o seguinte punto máis
proximo, en calquera dos eixos. Se o punto calculado é erroneo, o
participante caerá a auga, posto que os máximos da función atópanse
ó nivel da auga pero os demáis puntos farı́an que o xogador se precipitase
á auga.
Optimización en dúas variables: ’O xogo da auga’
Definición da función proposta

Representación da función en Sage


Definir a función
var(’y’)
f(x,y) = 2*sin(2*x) + 2*cos(2*y) - 4
c = plot3d(f,[x,-5,5],[y,-5,5], adaptive = True)
c.save(’funcion.eps’)
Optimización en dúas variables: ’O xogo da auga’
Definición da función proposta

Representación das curvas de nivel

Representación das curvas de nivel da función empregrando MatLab e


Sage.

contour_plot(f,(x,0,5),(y,0,5),contours=8,labels=true, \+
cmap=’jet’, fill=true,colorbar=true) \+
+ plot_vector_field(diff(f),(x,0,5),(y,0,5))
sage:
Optimización en dúas variables: ’O xogo da auga’
Cálculo do punto máximo inicial

P inicial, no que comeza o xogo


Entón, sabendo que o punto inicial do xogo é o punto P, queremos
atopar o máximo máis próximo que nos vai permitir cruzar sen caer a
auga, e polo tanto, perder o xogo.
Aplicando os métodos de newton e descenso implementados en
resolvesis.sage e minimiza.sage poderemos calular os máximos nun
intervalos dado. Isto sucede soamente por ser unha función periódica,
posto que senón teriamos que calcular todos e cada un dos máximos.
A cuadrı́cula proposta é: x, y ∈ [−0,1, 5].
Optimización en dúas variables: ’O xogo da auga’
Cálculo do punto máximo inicial

Códigos en Sage

Derivación en dúas variables


f . diff(x)
sage : (x,y) | -> 4cos(2x)
f . diff(y)
sage : (x,y) | -> 4sin(2y)
i(x,y) = [4*cos(2*x) ,-4*sin(2*y) ]

Construcción do sistema non linear


system = [4*cos(2*x)==0,-4*sin(2*y)==0]
A = [eq . lhs()-eq . rhs() for eq in system]
Optimización en dúas variables: ’O xogo da auga’
Cálculo do punto máximo inicial

Matriz Xacobiana e Hessiana

Matriz Xacobiana
! #
4cos (2x )
Df(x) = " $
−4sin(2y )

Matriz Hessiana
! #
−8sin(2x ) 0
Hhf(x) = " $
0 −8cos (2y )
Optimización en dúas variables: ’O xogo da auga’
Cálculo do punto máximo inicial

Debuxo das curvas de nivel [0] do sistema non linear

Derivación en dúas variables


h1 = contour_plot(A[0] , *args1 , cmap =[’blue’] , **kwds1)
h2 = contour_plot(A[1] , *args1 , cmap =[’red’] , **kwds1)
show(h1+h2)
Optimización en dúas variables: ’O xogo da auga’
Cálculo do punto máximo inicial

Debuxo das curvas de nivel [0] do sistema non linear


Derivación en dúas variables
Entón, vaise calcular o máximo máis próximo ás coordenadas (0, 0). Isto
farase empregando, o método de Newton e o criterio da matriz Hessiana.
Escollemos un iterante inicial, o P (0,5, 0,5).

newton(i ,diff(i) , [0.5,0.5] )[0]


sage : (0 . 7853981633974483,0.0)
debuxa_newton(i ,diff(i) , [0.5,0.5] , [-0.1,3,-0.1,3])
Optimización en dúas variables: ’O xogo da auga’
Cálculo do punto máximo inicial

criterio_hessiana(f ,0.78539, 0.0, rtol = 1.00e-7)


sage : H[0] [0]=-8.00000000000000, det(H)=64.0000000000000;
o punto e un maximo local .

Figura: Iterantes de newton & Curvas de nivel


Optimización en dúas variables: ’O xogo da auga’
Cálculo do máximo máis proximo

Newton e Descenso Rápido


Considerando o punto inicial P (0,7853, 0,0), debemos calcular o máximo
máis próximo no eixo y empregando o método de newton e o método de
descenso rápido á función −f (x, y ), xa que este método soamente
é capaz de achar mı́nimos.

Criterio da Hessiana
Empregarase o criterio da Hessiana para determinar se realmente estamos
a tratar dun maximo, minimo ou punto de sela.

Como xa comprobamos na Tarefa 1, no método de Newton precisamos


escoller un iterante inicial bo para que converxa no punto esperado.
Neste caso, escollese o P (1, 1).
Optimización en dúas variables: ’O xogo da auga’
Cálculo do máximo máis proximo

Código Sage de newton|


newton(i ,diff(i) , [3,3] ) [0 : 2]
sage : ((0.7853981633974483, 3.141592653589793) ,7)

Código Sage de debuxa newton|


debuxa_newton(i ,diff(i) , [3,3] , [-0.001 ,5,-0.001 ,5])
Optimización en dúas variables: ’O xogo da auga’
Cálculo do máximo máis proximo

Método de ”descenso rápido”

O método de descenso rápido é un dos procedementos máis


empregados para minimizar unha función diferenciable de varias
variables.
Xa que se trata dun máximo, descenso soamente calculará os
mı́nimo, por iso debemos voltear a función, é dicir:

z (x, y ) = −(2sin (2x ) + 2cos (2y ) − 4)

Debemos calcular a matriz ’Jacobiana’ e ’Hessiana’ da función.


Optimización en dúas variables: ’O xogo da auga’
Cálculo do máximo máis proximo

Método de ”descenso rápido”

O método de descenso rápido é un dos procedementos máis


empregados para minimizar unha función diferenciable de varias
variables.
Xa que se trata dun máximo, descenso soamente calculará os
mı́nimo, por iso debemos voltear a función, é dicir:

z (x, y ) = −(2sin (2x ) + 2cos (2y ) − 4)

Debemos calcular a matriz ’Jacobiana’ e ’Hessiana’ da función.


Optimización en dúas variables: ’O xogo da auga’
Cálculo do máximo máis proximo

Método de ”descenso rápido”

O método de descenso rápido é un dos procedementos máis


empregados para minimizar unha función diferenciable de varias
variables.
Posto que se trata de optimizar un máximo, descenso soamente
calculará o mı́nimo, por iso debemos invertir o signo da función,
é dicir: z (x, y ) = −(2sin (2x ) + 2cos (2y ) − 4)
Calcular a matriz ’Jacobiana’ e ’Hessiana’ da función.
Optimización en dúas variables: ’O xogo da auga’
Cálculo do máximo máis proximo

Matriz Xacobiana e Hessiana

Matriz Xacobiana
! #
4cos (2x )
Df(x,y) = " $
4sin (2y )

Matriz Hessiana
! #
8sin (2x ) 0
Hhf(x,y) = " $
0 8cos (2y )
Optimización en dúas variables: ’O xogo da auga’
Cálculo do máximo máis proximo

Construı́r con Sage a Matriz Xacobiana e a Hessiana

jacobian()
#O comando sage para construir a Xacobiana
jacobian(funcion, (varriable1,variable2,...))

jacobian(z,(x,y))
sage: (x, y) |--> 4*sin(2*y)

Hessiana
#Non ten un comando especifico
jacobian(jacobian(funcion,(var1,var2)),(var1,va2))
jacobian(jacobian(f,(x,y)),(x,y))
sage: [(x, y) |--> 8*sin(2*x) (x, y) |--> 0 ]
[(x, y) |--> 0 (x, y) |--> 8*cos(2*y)]
Optimización en dúas variables: ’O xogo da auga’
Cálculo do máximo máis proximo

Código en Sage de descenso rápido

descenso(z, diff(z), [1.5,1.5])


sage:
Sen mellora, posible minimo.
(0.7853981718146311, 3.141592654396569), 5,
[(1.5, 1.5),
(0.7601043494985311, 1.3945304327853216),
(0.5168294713271564, 3.055659322927132),
(0.7837277541440513, 3.1448665451633824),
(0.7853981718146311, 3.141592654396569)])
Optimización en dúas variables: ’O xogo da auga’
Conclusións

Agora, empregamos o criterio da Hessiana:

Máximo, mı́nimo ou punto de sela?


criterio_hessiana(f,0.7853, 3.14159, rtol = 1.0e-7)
sage: H[0][0]=-8.00000, det(H)=64.0000;
o punto e un maximo local.
Optimización en dúas variables: ’O xogo da auga’
Conclusións

Visto isto, e considerando a función da que partimos, concluı́mos que os


máximos atópanse sempre nos puntos que cuxa distancia sexa o número
π.
Ademáis, se queremos coñecer a coordenada de calquera punto máximo
sabemos que o punto inicial é ( π4 , π ) e a distancia a cada un dos
máximos debe ser de π metros. Con isto, podemos calcular calquera
máximo que se nos propoña, e indicarlle á persoa a lonxitude do salto
que debe realizar para gañar o xogo.
No caso de que o salto sexa en diagonal, aplicando o teorema de
pitágoras, obtemos que o salto deberı́a ser de 4,44 metros.
Optimización en dúas variables: ’O xogo da auga’
Conclusións

Código de debuxa newton|

Visto o código debuxa_newton, implementouse o código de ’Sage’ de


debuxa_descenso, que non foi proporcionado.
Este anaco de código, que invoca a descenso() debuxará todos os
iterantes para achar o mı́nimo dunha función.
Pódese descargar debuxa_descenso clicando aquı́.
O xeito de invocalo é o seguinte:

load(’debuxa_descenso.sage’)
debuxa_descenso(z,diff(z),[2,2],[-0.1,5,-0.1,5])
sage:
Optimización en dúas variables: ’O xogo da auga’
Conclusións
Optimización en dúas variables: ’O xogo da auga’
Conclusións

AQUÍ IRÍA A BIBLIOGRAFÍA QUE AINDA NON FIXEN, PORQUE


NON USEI NADA. ENTÓN, POÑEREI ALGUN LIBRO, PAXINA WEB
(MELLOR PÁXINA WEB) E VÍA.....
Optimización en dúas variables: ’O xogo da auga’
Conclusións

|Hugo Carreira Rial - Cálculo e Análise Numérica|


hugo.carreira@rai.usc.gal

You might also like