-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmy_func.m
More file actions
77 lines (63 loc) · 1.98 KB
/
my_func.m
File metadata and controls
77 lines (63 loc) · 1.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
%% Steepest Descent
clear
MAXITER = 10^4;
alpha = 1;
x=[1.2;1.2];
c=10^(-4);
rho=1/2;
Grad_Rosenbrock(x(1),x(2));
f_x_array = Rosenbrock(x(1),x(2));
k = 0;
display(sprintf('x^T \t\t\t\t\tRosenbrock \t\t\t p^SD \t\t\t\t\talpha \t\titer'));
%stopping condition
while (abs(Rosenbrock(x(1),x(2)))) > (10^(-8))
%search direction
p_k = P_k(x(1),x(2));
%check armijo condition
while (Rosenbrock(x(1)+alpha*p_k(1),x(2)+alpha*p_k(2))) > ...
( Rosenbrock(x(1),x(2)) + ...
c*alpha*P_k(x(1),x(2))'*Grad_Rosenbrock(x(1),x(2)) ...
)
% update alpha
alpha=rho*alpha;
end
%update the minimizer
x = x + alpha*P_k(x(1),x(2));
alpha = 1;
if mod(k,1000) == 0
display(sprintf('[%1.6f,%1.6f]\t\t[%1.6f]\t\t[%1.6f,%1.6f]\t\t%1.6f\t%1.6f',...
x(1),x(2),Rosenbrock(x(1),x(2)), P_k(x(1),x(2)) , alpha, k));
end
k=k+1;
f_x_array = [f_x_array,Rosenbrock(x(1),x(2))];
if k > MAXITER
break;
end
end
display(sprintf('[%1.6f,%1.6f]\t\t[%1.6f]\t\t[%1.6f,%1.6f]\t\t\t%1.6f\t%1.6f',...
x(1),x(2),Rosenbrock(x(1),x(2)), P_k(x(1),x(2)) , alpha, k));
%% Newton Method Solution
%
clear
alpha = 1;
x=[-1.2;1];
c=10^(-4);
rho=1/2;
f_x_array = Rosenbrock(x(1),x(2));
k = 0;
display(sprintf('x^T \t\t\t\t\t\t\tRosenbrock \t\t\t\t p_k \t\t\t\t\t\t\t\t alpha \t\t\titer'));
while abs(Rosenbrock(x(1),x(2))) > (10^(-8))
p_k_newton = P_k_newton(x(1),x(2));
while (Rosenbrock(x(1)+alpha*p_k_newton(1),x(2)+alpha*p_k_newton(2))) > ...
( Rosenbrock(x(1),x(2)) + ...
c*alpha*P_k_newton(x(1),x(2))'*Grad_Rosenbrock(x(1),x(2)) ...
)
alpha=rho*alpha;
end
x = x + alpha*P_k_newton(x(1),x(2));
f_x_array = [f_x_array,Rosenbrock(x(1),x(2))];
display(sprintf('[%1.6f,%1.6f]\t\t\t[%1.6f]\t\t\t\t[%1.6f,%1.6f]\t\t\t\t\t%1.6f\t\t%1.6f',...
x(1),x(2),Rosenbrock(x(1),x(2)), P_k_newton(x(1),x(2)) , alpha, k));
k=k+1;
alpha=1;
end