minmax2dsolRosenbrock.m Rosenbrock function
Solutions to ex4, part b)
Contents
Unconstrained Optimization Example
"Classical" test function for optimization routines. Banana-shaped valley, min (1,1), value =0, steep walls, shallow bottom near min-point.

Take a=1, b=100
Plot the function to get an idea of where it is minimized
close all format compact a=1;b=100; f=@(x,y)(a-x).^2 + b*(y-x.^2).^2 fsurf(f,[-1.5,1.5 -1.5 3],'ShowContours','on') colorbar % title('f(x,y)=(a-x).^2 + b*(y-x.^2).^2, a=1,b=100') xlabel('x');ylabel('y') hold on plot3(1,1,0,'.r','MarkerSize',15)
f =
function_handle with value:
@(x,y)(a-x).^2+b*(y-x.^2).^2
Closer to min point
figure fsurf(f,[0.5,1.5 0.5 1.5],'ShowContours','on') xlabel('x');ylabel('y') hold on plot3(1,1,0,'.r','MarkerSize',15)
Contours
figure clf x=linspace(-1.5,1.5,200); y=linspace(-1.5,3,200); [X,Y]=meshgrid(x,y); contour(x,y,f(X,Y),60) title('f(x,y)=(a-x)^2 + b(y-x^2)^2, a=1,b=100') hold on contour(x,y,f(X,Y),[0,0.1]) grid on
Contours closer to min pt.
figure x=linspace(0.5,1.5,200); y=linspace(0.5,1.5,200); [X,Y]=meshgrid(x,y); contour(x,y,f(X,Y),60) hold on contour(x,y,f(X,Y),[0,0.001 0.005 0.01 0.02 0.1]) grid on
Z=f(X,Y); min(Z(:))
ans = 6.3444e-04
Minimization algorithm: "brute force" vectorization
Domain: [-1.5,1.5]x[-1.5,3] (Previous figure,larger domain)
N=[200 400 800 1600]; Nlen=length(N); minpts=zeros(3,Nlen); T=zeros(1,Nlen); for k=1:Nlen tic x=linspace(-1.5,1.5,N(k)); y=linspace(-1.5,3,N(k)); %x=linspace(0.5,1.5,N(k));y=x; % tic [X,Y]=meshgrid(x,y); % tic Z=f(X,Y); % tic [minz,minind]=min(Z(:)); T(k)=toc; minpts(:,k)=[X(minind);Y(minind);minz]; end format long minpts format short T ratios=T(2:end)./T(1:end-1) % 2^nd run (First takes for setup etc., so run at least twice.) %{ T = 0.0065 0.0025 0.0089 0.0387 ratios = 0.3855 3.5368 4.3532 %}
minpts =
Columns 1 through 3
1.017587939698493 0.996240601503759 1.000625782227785
1.032663316582914 0.992481203007519 1.000625782227785
0.001105646701661 0.000014153051440 0.000039600970082
Column 4
1.000938086303940
1.001876172607880
0.000000880083355
T =
0.0009 0.0034 0.0095 0.0721
ratios =
3.6201 2.7881 7.5580
%{ figure x=linspace(-1.5,1.5,50); y=linspace(-1.5,3,50); [X,Y]=meshgrid(x,y); surf(x,y,f(X,Y)) %}
See how fminsearch handles Rosenbrock.
Repeat definitions:
a=1;b=100; f=@(x,y)(a-x).^2 + b*(y-x.^2).^2
f =
function_handle with value:
@(x,y)(a-x).^2+b*(y-x.^2).^2
Objective function must have intial point in the form of a vector.
Just like we had in part a):
fun = @(x) f(x(1),x(2));
One can set optional arguments with optimset (remember odeset)
opts=optimset('Display','iter-detailed'); opts.TolFun=1e-10; opts.TolX=1e-10; opts.MaxIter=200; opts.UseParallel=1; % Presumably doesn't do anything good as % algorithm is purely sequential. % opts.MaxFunEvals=1000;
Call fminsearch with opts set above
tic [x,fval]=fminsearch(fun,[-1 2],opts); TfminS=toc minptfminS=[x fval]
Iteration Func-count min f(x) Procedure
0 1 104
1 3 84.7531 initial simplex
2 5 45.8275 expand
3 7 13.1861 expand
4 9 4.98422 reflect
5 11 4.98422 contract outside
6 13 4.98422 contract inside
7 15 4.98422 contract inside
8 17 4.98422 contract inside
9 19 4.98422 contract outside
10 21 4.95047 reflect
11 23 4.91586 contract inside
12 25 4.83461 expand
13 27 4.83461 contract inside
14 29 4.72643 expand
15 31 4.64513 expand
16 33 4.34096 expand
17 34 4.34096 reflect
18 36 4.33543 reflect
19 38 3.94834 expand
20 39 3.94834 reflect
21 41 3.41421 expand
22 43 3.41421 contract inside
23 45 3.38899 reflect
24 47 2.94889 expand
25 49 2.94889 contract inside
26 51 2.46132 expand
27 53 2.46132 contract inside
28 54 2.46132 reflect
29 56 2.01407 expand
30 58 2.01407 contract inside
31 60 1.69086 expand
32 62 1.69086 contract inside
33 63 1.69086 reflect
34 65 1.60541 reflect
35 67 1.58097 contract inside
36 69 1.34218 expand
37 70 1.34218 reflect
38 72 1.16421 reflect
39 74 1.16421 contract inside
40 76 1.14734 reflect
41 78 1.0409 reflect
42 79 1.0409 reflect
43 81 0.965985 reflect
44 83 0.964565 contract inside
45 85 0.807119 expand
46 87 0.807119 contract inside
47 89 0.780114 reflect
48 91 0.627386 expand
49 93 0.627386 contract inside
50 95 0.524722 expand
51 96 0.524722 reflect
52 98 0.430904 reflect
53 99 0.430904 reflect
54 101 0.354952 reflect
55 103 0.354952 contract inside
56 104 0.354952 reflect
57 106 0.299383 reflect
58 108 0.299383 contract inside
59 110 0.284164 expand
60 112 0.196288 expand
61 113 0.196288 reflect
62 115 0.176495 reflect
63 117 0.161974 contract inside
64 119 0.133641 reflect
65 120 0.133641 reflect
66 122 0.102843 reflect
67 124 0.102843 contract inside
68 126 0.0958024 reflect
69 128 0.0805126 reflect
70 129 0.0805126 reflect
71 131 0.0642292 reflect
72 133 0.0642292 contract inside
73 135 0.0546237 expand
74 137 0.0370172 expand
75 139 0.0262263 expand
76 141 0.0160178 contract outside
77 143 0.0111434 reflect
78 145 0.00647626 contract outside
79 146 0.00647626 reflect
80 148 0.00511538 reflect
81 150 0.000642341 contract inside
82 151 0.000642341 reflect
83 153 0.000642341 contract outside
84 155 0.00027343 contract inside
85 157 1.38286e-05 contract inside
86 159 1.38286e-05 contract inside
87 160 1.38286e-05 reflect
88 162 1.38286e-05 contract inside
89 164 1.38286e-05 contract inside
90 166 1.24616e-05 contract inside
91 168 3.74388e-06 contract inside
92 170 3.28362e-07 contract inside
93 172 3.28362e-07 contract outside
94 174 3.28362e-07 contract inside
95 176 1.58552e-07 contract outside
96 178 1.24728e-07 contract inside
97 180 1.82164e-08 contract inside
98 182 1.82164e-08 contract inside
99 184 1.82164e-08 contract outside
100 186 4.85119e-09 contract inside
101 187 4.85119e-09 reflect
102 189 3.56011e-09 contract inside
103 191 1.81979e-09 contract inside
104 193 1.70617e-10 contract inside
105 195 1.70617e-10 contract inside
106 197 1.70617e-10 contract outside
107 199 1.70617e-10 contract inside
108 201 1.09453e-10 reflect
109 203 1.15336e-11 contract inside
110 205 1.15336e-11 contract inside
111 207 1.15336e-11 contract outside
112 209 6.32026e-12 contract inside
113 211 3.99753e-12 contract outside
114 213 2.09421e-12 contract inside
115 215 2.28767e-13 contract inside
116 217 2.28767e-13 contract outside
117 219 2.28767e-13 contract inside
118 220 2.28767e-13 reflect
119 222 5.14407e-14 contract inside
120 224 3.64399e-14 contract inside
121 226 3.24846e-14 contract inside
122 228 4.26621e-15 contract inside
123 230 4.26621e-15 contract inside
124 232 4.26621e-15 contract inside
125 233 4.26621e-15 reflect
126 235 4.73054e-16 contract inside
127 237 4.73054e-16 contract inside
128 239 4.73054e-16 contract inside
129 240 4.73054e-16 reflect
130 242 8.19386e-17 contract inside
131 244 8.19386e-17 contract inside
132 246 8.19386e-17 contract inside
133 248 6.52299e-17 reflect
134 250 3.31553e-18 contract inside
135 252 3.31553e-18 contract inside
136 254 3.31553e-18 contract outside
137 256 3.31553e-18 contract inside
138 258 9.24237e-19 contract outside
139 260 4.04e-19 contract inside
140 262 4.04e-19 contract inside
141 264 2.05218e-19 contract inside
142 266 5.45955e-20 contract inside
143 268 5.45955e-20 contract inside
144 270 1.27595e-20 contract outside
145 272 7.55893e-21 contract inside
146 274 6.78047e-21 contract inside
147 276 1.91179e-21 contract inside
148 278 8.22208e-22 contract inside
149 280 8.05076e-22 contract inside
Optimization terminated:
the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-10
and F(X) satisfies the convergence criteria using OPTIONS.TolFun of 1.000000e-10
TfminS =
0.0305
minptfminS =
1.0000 1.0000 0.0000
opts.Display % Iterations: 149 % Accuracy great, because: opts.TolFun opts.TolX
ans =
'iter-detailed'
ans =
1.0000e-10
ans =
1.0000e-10
Timing: Slower than simple vector-min