Hàm Rosenbrock được cho bởi phương trình sau:
Trong bài này chúng ta sẽ vẽ hàm Rosenbrock và tìm cực trị của hàm số này với MATLAB.
Bằng cách đạo hàm thông thường, chúng ta có thể tìm được cực tiểu của hàm Rosenbrock là
đạt được tại .
Thực hiện với MATLAB như sau:
Bước 1: Đầu tiên, chúng ta định nghĩa hai vector x, y xác định các giá trị trong miền mà ta muốn vẽ đồ thị. Sau đó chúng ta định nghĩa các ma trận X, Y, Z với X(i, j) = x(i),
Y (i, j) = y (j), và Z(i, j) = f (X(i, j)), Y (i, j)). Ở đây, miền giá trị của các vector x, y được lấy như sau:
% The RosenbrockFunction2D function - MATLAB code
xmin = -1.5;
xmax = 1.5;
delta = 0.1;
ymin = -1;
ymax = 1.5;
x = [xmin:delta:xmax];
y = [ymin:delta:ymax];
[X,Y] = meshgrid(x,y);
% The RosenbrockFunction2D function was written with the capability to
% input two matrices and output a matrix.
Z = 100*(X-Y.^2).^2+(1.-X).^2;
% Let’s check that X,Y,Z are really matrices of the appropriate size.
str = fprintf('The size of x is %d x %d\n', size(x));
str = fprintf('The size of X is %d x %d\n', size(X));
str = fprintf('The size of Z is %d x %d\n', size(Z));
% The size of x is 1 x 31. The size of X is 26 x 31. The size of Z is 26 x 31.
Bước 2: Vẽ mặt z = f (x, y) sử dụng lệnh surf. Trong hình vẽ này, chiều cao sẽ tỷ lệ với màu sắc. Đồng thời ta cũng đánh dấu điểm cực tiểu (minimum) bằng một dấu chấm lớn (dot) màu tím.
Bước 3: Sau khi vẽ hình, chúng ta có thể quay nó theo ý muốn. Khi đã thấy vừa ý với góc nhìn hình vẽ, ta có thể tìm view point bằng lệnh [az,el]=view rồi sau đó gõ lại lệnh đó trong script.
figure(1)
surf(X,Y,Z)
% You need the following command to add a second plot to the figure.
hold on
plot3(1,1,5,'m.','markersize',30)
hold off
az=170;
el=30;
view(az,el);
hax=gca;
% To find out what gca does type: help gca
set(hax,'fontname','helvetica','fontsize',12);
title('Rosenbrock Banana')
xlabel('x')
ylabel('y')
zlabel('z')
ticks=[-2:1:2];
set(hax,'xtick',ticks,'xticklabel',ticks)
set(hax,'ytick',ticks,'yticklabel',ticks)
set(hax,'ztick',[0:500:1000],'zticklabel',[0:500:1000])
% Tighten up the view
zlim([0,1000])
Bước 4: Tìm cực trị dùng Optimization Toolbox
% Định nghĩa inline hàm mục tiêu (objective function):
banana = @(x)100*(x(2)-x(1)^2)^2+(1-x(1))^2;
[x,fval] = fminsearch(banana,[-1.2, 1])
% Kết quả:
x =
1.0000 1.0000
fval =
8.1777e-010