Está en la página 1de 3

Tarea 3

f(x+td)
1. En varias oportunidades hemos usado en clase que si φ(t) = f (x + td) con f una función en n variables,
x, d ∈ Rn entonces
φ0 (t) = ∇f (x + td)t d.
Este resultado es consecuencia directa de aplicar la regla de la cadena. En esta pregunta se pide que
lo demuestre para confirmar que se entiende.
2. Sea f (x) = 21 xt Qx + bt x con x, b ∈ Rn y Q ∈ Rn×n semipositivo definida. Es decir, que f es una
función cuadrática convexa en n variables. Usando la forma de ∇f (x) y ∇2 f (x) que encontraron en la
primera tarea, demostrar uue dado xk ∈ Rn y dk una dirección de descenso de f en xk entonces
−(Qxk +b)t dk
a) αk∗ = arg mı́nα>0 f (xk + αdk ) = dtk Qdk
Observe que αk resuelve la búsqueda lineal exacta.
b) ∇f (xk + αk∗ dk )t dk = 0
3. Considere los problemas mı́n f (x) = 3x21 + 2x1 x2 + x22 y mı́n f (x) = 1/2(x1 − x2 )2 + 1/2(1 − x1 )2 .
Determine si los problemas tienen solución y cuáles serı́a usando condiciones de optimalidad.
Aplique una iteración del método de Cauchy (que también es llamado método de mayor descenso
o del gradiente con búsqueda lineal exacta) partiendo de x0 = (1, 1)t para el primero. Es decir,
∇f (x0 )
calcule x1 = x0 + α0∗ d0 con d0 = − ||∇f ∗
(x0 )|| y α0 satisfaciendo búsqueda lineal exacta.
Elija η = 0,1 y β = 0,5. Vea si α0∗ satisace las condiciones de Armijo y Goldstein para la misma
función y datos de la parte anterior.
4. Haga una implementación del método del mayor descenso para resolver los problemas anteriores. Usted
debe hacer un código para la función, el gradiente y el hessiano (funciones funquad(x), gradquad(x) y
hessquad(x)).
Puede usar el código que está a continuación en Matlab y correrlo en Matlab mismo o usarlo como
modelo para otro lenguaje de su preferencia.
x=input(’enter the initial column vector x ’);
xsol=input(’enter the solution xsol ’);
obj=funquad(x);
g=gradquad(x);
h=hessquad(x);
k=0;
while norm(g) > 1e − 6
d = -g;
a=-g’*d/(d’*h*d);
newobj=funquad(x + a*d);
fprintf(’ %5.0f %12.5e %12.5e ’,k,norm(x-xsol),norm(g))
x = x + a*d;
obj=newobj;
g=gradquad(x);
k = k + 1;
end
x, k

1
5. Ahora modifique su código para incluir una implementación del Método del Gradiente (o Mayor Des-
censo) con búsqueda lineal inexacta, esto es:

xk+1 = xk − λk ∇f (xk )

donde λk satisface la condición de Armijo (usando ’backtracking’ con η = 10−4 y ρk = ρ = 0,5). Puede
usar el código en Matlab que se da a continuación. Intente resolver el problema a continuación y el de
la pregunta anterior.

mı́n f (x) = 100(x2 − x21 )2 + (1 − x1 )2 ,


partiendo de x0 = (1,2, 1,2)t y x0 = (−1,2, 1)t .
x=input(’enter the initial column vector x ’);
xsol=input(’enter the solution xsol ’);
obj=func(x); Para cada problema usted debe programar estas funciones.
g=grad(x);
disp(’Inexact Line Search’)
% Armijo stepsize rule parameters
sigma = 10−4 ;
beta = .5;
k=0; % k = iterations
nf=1; % nf = function eval.
% Begin method
while norm(g) > 1e−6
d = -g; % steepest descent direction
a = 1;
newobj = func(x + a*d);
nf = nf+1;
% Begin Backtracking
while (newobj-obj)/a > sigma*g’*d
a = a*beta;
newobj = func(x + a*d);
nf = nf+1;
end
fprintf(’ %5.0f %12.5e %12.5e ’,k,norm(x-xsol),norm(g));
x = x + a*d;
obj=newobj;
g=grad(x);
k = k + 1;
end
% Output x and k
x, k
end

2
6. Corra ambos códigos y obtenga la tabla con los resultados obtenidos para todas las funciones y distintos
iterados iniciales, donde se refleje: iteración k , ||xk − x∗ ||2 , ||∇f (xk )||2 para las 10 últimas iteraciones.
En base a los resultados obtenidos escriba conclusiones acerca de la convergencia global del método y
la rapidez de convergencia.

También podría gustarte