1+ function F = Newton_backtrack(x1 ,c ,itr_num )
2+ f = @(x ) 100 *(x(2 )-x(1 )^2 )^2 +(1 - x(1 ))^2 ;
3+ gf = @ (x ) [-2 *(1 - x(1 ))-400 * x(1 )*(x(2 )-x(1 )^2 ) ; 200 *(x(2 )-x(1 )^2 )] ;
4+ hf = @ (x ) [-400 * x(2 )+1200 * x(1 )^2 + 2 - 400 * x(1 ) ; - 400 * x(1 ) 200 ] ;
5+ phi = @ (Alpha ,x ,p ) 100 *((Alpha * p(2 )+x(2 ))-(Alpha * p(1 )+x(1 ))^2 )^2 +(1 -(Alpha * p(1 )+x(1 )))^2 ;
6+ gphi = @ (Alpha ,x ,p ) 200 *(p(2 ) - 2 * p(1 )*(x(1 ) + Alpha * p(1 )))*(x(2 ) + Alpha * p(2 ) - (x(1 ) + Alpha * p(1 ))^2 ) + 2 * p(1 )*(x(1 ) + Alpha * p(1 ) - 1 );
7+
8+
9+ % x0 = [0,1]'
10+ alpha_arr = .9 * ones(1 ,itr_num ) ;
11+ X = ones(2 ,itr_num ) ;
12+ F = ones(1 ,itr_num ) ;
13+ % P=[0;0]
14+ x_nxt = x1 ;
15+ for k = 1 : itr_num
16+ X(: ,k ) = x_nxt ;
17+ P = - gf( X(: ,k ) ) ;
18+ ii= 2 ;
19+ alpha_arr_check = .9 * ones(1 ,10000 );
20+ A_0 = 0.2 ;
21+ A_n1 = 4 ;
22+ A_p1 = 1 ;
23+ if gf( X(: ,k ))' * (((hf(X(: ,k )))) * gf( X(: ,k ) )) >= 0
24+ % disp('posdef')
25+ P = - inv((hf(X(: ,k )))) * gf( X(: ,k ) ) ;
26+ else
27+ % disp('indef')
28+ % hf(X(:,k))
29+ P = - inv((hf(X(: ,k )))) * gf( X(: ,k ) ) ;
30+ X(: ,k ) ;
31+ end
32+
33+ while ( phi(A_0 , X(: ,k ) , P ) > phi(0 , X(: ,k ) , P ) + c * A_0 * gphi(0 , X(: ,k ) , P ) )% eval( subs(phi, [Alpha , x1,x2,p1, p2 ] , [alpha_arr_check(ii) , X(1,k) ,X(2,k) , P(1) , P(2) ])) <= eval( subs(phi, [Alpha , x1,x2,p1, p2 ] , [0 , X(1,k) ,X(2,k) , P(1) , P(2) ])) + c * alpha_arr_check(ii) * eval( subs(gphi, [Alpha , x1,x2,p1, p2 ] , [alpha_arr_check(ii) , X(1,k) ,X(2,k) , P(1) , P(2) ])) )
34+
35+ % disp('in while')
36+ % disp(A_0)
37+ % disp(phi(A_0 , X(:,k) , P))
38+ % disp(phi(0, X(:,k) , P) + c* A_0 *gphi(0 , X(:,k) , P))
39+
40+ A_0 = -.5 * gphi(0 , X(: ,k ) , P )*A_n1 ^ 2 /(phi(A_n1 , X(: ,k ) , P )-phi(0 , X(: ,k ) , P )-gphi(0 , X(: ,k ) , P )*A_n1 );
41+
42+ % d1 = eval(subs(gphi,Alpha,alpha_arr_check(ii-1)) + subs(gphi,Alpha,alpha_arr_check(ii)) -3* (subs(phi,Alpha,alpha_arr_check(ii-1)) - subs(phi,Alpha,alpha_arr_check(ii)))/(alpha_arr_check(ii-1)-alpha_arr_check(ii)));
43+ % %subs (d1,)
44+ % d2 = sign(alpha_arr_check(ii)-alpha_arr_check(ii-1)) *sqrt(d1^2 - eval(subs(gphi,Alpha,alpha_arr_check(ii-1))*subs(gphi,Alpha,alpha_arr_check(ii)))) ;
45+ % alpha_arr_check(ii+1) = alpha_arr_check(ii) - (alpha_arr_check(ii) - alpha_arr_check(ii-1)) *( (eval(subs(gphi,Alpha,alpha_arr_check(ii))) + d2 - d1 /(eval( subs(gphi,Alpha,alpha_arr_check(ii)) - subs(phi,Alpha,alpha_arr_check(ii-1))) +2*d2 ) )) ;
46+ % d1
47+ % d2
48+
49+
50+ d1 = gphi(A_n1 , X(: ,k ) , P ) + gphi(A_0 , X(: ,k ) , P ) - 3 * (phi(A_n1 , X(: ,k ) , P ) - phi(A_0 , X(: ,k ) , P ))/(A_0 - A_n1 );
51+ d2 = sign (A_0 - A_n1 ) * sqrt(d1 ^ 2 - gphi(A_n1 , X(: ,k ) , P ) * gphi(A_0 , X(: ,k ) , P ));
52+ A_p1 = A_0 - (A_0 - A_n1 ) *( gphi(A_0 , X(: ,k ) , P ) + d2 - d1 ) / (A_0 - A_n1 + 2 * d2 );
53+ % A_p1 = A_0
54+
55+
56+ % AB = [A_n1^2 ,-A_0^2 ; -A_n1^3,A_0^3] * [phi(A_0 , X(:,k) , P)-phi(0, X(:,k) , P)-gphi(0 , X(:,k) , P)*A_0;
57+ % phi(A_n1 , X(:,k) , P)-phi(0, X(:,k) , P)-gphi(0 , X(:,k) , P)*A_n1 ] *1/(A_n1^2 * A_0^2*(A_0 - A_n1))
58+ % aa = AB(1) ;
59+ % bb = AB(2) ;
60+ % A_p1 = (-bb + sqrt(bb^2 - 3*aa*gphi(0 , X(:,k) , P)))/(3*aa)
61+ %
62+ % ii = ii + 1;
63+ A_n1 = A_0 ;
64+ A_0 = A_p1 ;
65+ % if abs(A_0 - A_n1) <= 0.001 || A_0 <= 0.01
66+ % A_0 = .5*A_n1
67+ % end
68+ end
69+
70+ alpha_arr(k ) = A_0 ;
71+ F(k ) = f(X(: ,k )) ;
72+ x_nxt = X(: ,k ) + alpha_arr(k ) * P ;
73+ P ;
74+ alpha_arr(k ) ;
75+
76+ end
77+
78+ % cvx_begin
79+ % variable x(2)
80+ % minimize(100*(x(2)-x(1)^2)^2+(1-x(1))^2 )
81+ % subject to
82+ %
83+ % cvx_end
84+ % x
85+ disp(' X' )
86+ X(: ,end )
87+ disp(' Alpha' )
88+ alpha_arr(end )
89+
90+ % figure
91+ %
92+ % subplot(1,2,1);
93+ % plot(1:itr_num , (alpha))
94+ %
95+ %
96+ % title(strcat(' x_0 = ',mat2str(x1)))
97+ % xlabel('iteration')
98+ % ylabel('alpha(BackTraking)')
99+ %
100+ %
101+ % subplot(1,2,2);
102+ % plot(1:itr_num , log(F))
103+ % %surf(X(1,:) , X(2,:) , F)
104+ % title(strcat('Newton_backtrack', ' x_0 = ',mat2str(x1) , ' F* = ' ,mat2str(F(end)) , ' X* = ' ,mat2str(X(:,end)) ))
105+ % xlabel('iteration')
106+ % ylabel('log(F_k*)')
107+
108+
109+ return
110+
111+ end
0 commit comments