You are on page 1of 13

ĐẠI HỌC ĐÀ NẴNG

TRƯỜNG ĐẠI HỌC BÁCH KHOA


KHOA ĐIỆN

BÁO CÁO BÀI TẬP GIỮA KỲ


MÔN HỌC: TOÁN NÂNG CAO

CHỦ ĐỀ:

GIẢI BÀI TOÁN TỐI ƯU HÀM MỤC TIÊU

Giảng viên hướng dẫn: TS. TRẦN THỊ MINH DUNG


Sinh viên thực hiện: NGUYỄN HỮU HOÀNG LONG
Số thứ tự: 41
Ngày sinh: 04/07/2001
Lớp học phần: xxNh91

Đà Nẵng, 2021
Bài KT GK Toán Nâng Cao Nguyễn Hữu Hoàng Long

MỤC LỤC

1. ĐỀ BÀI ................................................................................................................... 2
2. TRÌNH BÀY CỤ THỂ VỀ PHƯƠNG PHÁP NEWTON VÀ ARMIJO .............. 3
3. GIẢI BÀI TOÁN BẰNG CODING TRÊN MATLAB ......................................... 4
4. GIẢI BÀI TOÁN BẰNG OPTIMIZATION TOOLBOX TRONG MATLAB ... 10
5. NHẬN XÉT VÀ SO SÁNH GIỮA HAI PHƯƠNG PHÁP ................................ 12

1
Bài KT GK Toán Nâng Cao Nguyễn Hữu Hoàng Long

BÀI KIỂM TRA GIỮA KỲ


1. ĐỀ BÀI
1.1. Đề bài toán và các tham số đi kèm
1.1.1. Thông tin của sinh viên
Số thứ tự: 41
Ngày tháng năm sinh: 04/07/2001
1.1.2. Đề bài toán và giá trị ban đầu (𝒙𝟎 , 𝒚𝟎 )
Đề số 3:
4𝑥 4
𝑓 (𝑥, 𝑦) = + 2𝑎𝑥 2 𝑦 2 − 𝑥 − 𝑦 2
𝑎
Với 𝑎 = 41, phương trình trở thành:
4 4
𝑓 (𝑥, 𝑦) = 𝑥 + 82𝑥 2 𝑦 2 − 𝑥 − 𝑦 2
41
Giá trị ban đầu (𝑥0 , 𝑦0 ) = (0.1 × 4, 0.1 × 7) = (0.4, 0.7)
1.2. Lựa chọn phương án giải
Với đề bài trên, ta lựa chọn giải bài toán bằng phương pháp Newton và cập nhật giá
trị 𝛼 bằng hàm Armijo
1.3. Tính toán sơ bộ các biểu thức đầu vào
∂𝑓(𝑥, 𝑦) 8 3 ∂𝑓 (𝑥, 𝑦)
= 𝑥 + 164x𝑦 2 − 1, = 164𝑥 2 𝑦 − 2𝑦
∂𝑥 41 ∂𝑦
𝜕 2 𝑓(𝑥, 𝑦) 24 2 𝜕 2 𝑓(𝑥, 𝑦)
= 𝑥 + 164𝑦 2 , = 164𝑥 2 − 2
𝜕𝑥 2 41 𝜕𝑦 2
𝜕 2 𝑓(𝑥, 𝑦) 𝜕 2 𝑓(𝑥, 𝑦)
= = 328𝑥𝑦
𝜕𝑥𝜕𝑦 𝜕𝑦𝜕𝑥
∂𝑓 (𝑥, 𝑦)
8 3
∂𝑥 𝑥 + 164x𝑦 2 − 1
𝜵𝒇(𝑥, 𝑦) = = [41 ]
∂𝑓 (𝑥, 𝑦) 2
164𝑥 𝑦 − 2𝑦
[ ∂𝑦 ]
𝜕 2 𝑓(𝑥, 𝑦) 𝜕 2 𝑓(𝑥, 𝑦)
24 2
𝟐 𝜕𝑥 2 𝜕𝑥𝜕𝑦 𝑥 + 164𝑦 2 328𝑥𝑦
𝜵 𝒇(𝑥, 𝑦) = 2 = [41 ]
𝜕 𝑓(𝑥, 𝑦) 𝜕 2 𝑓(𝑥, 𝑦) 2
328𝑥𝑦 164𝑥 − 2
[ 𝜕𝑦𝜕𝑥 𝜕𝑦 2 ]

2
Bài KT GK Toán Nâng Cao Nguyễn Hữu Hoàng Long

2. TRÌNH BÀY CỤ THỂ VỀ PHƯƠNG PHÁP NEWTON VÀ ARMIJO


2.1. Phương pháp NEWTON
Với hàm mục tiêu là: 𝑓(𝑥)
∂𝑓(𝑥)
Để thực hiện được phương pháp Newton thì hàm mục tiêu 𝑓(𝑥) phải khả trình
∂𝑥
𝜕2 𝑓(𝑥)

𝜕𝑥 2

Với gradient là vector

∂𝑓 ∂ 𝑇
𝒈(𝑘 ) = 𝜵𝒇(𝒙𝑘 ) = [ … ]
∂𝑥1 ∂𝑥𝑁
Và Hessian là
𝜕2𝑓 𝜕2

𝜕𝑥1 2 𝜕𝑥1 𝜕𝑥𝑁
𝑯(𝑘 ) = 𝜵𝟐 𝒇(𝒙𝑘 ) = … 0 …
𝜕2 𝜕2𝑓

[𝜕𝑥𝑁 𝜕𝑥1 𝜕𝑥𝑁 2 ]
Lúc đó ta có phương trình cập nhật là

𝒙(𝑘 + 1) = 𝒙(𝑘 ) − 𝜶𝑯−𝟏 (𝑘 )𝒈(𝑘)

Trong đó, 0 < 𝛼 ≤ 1 được cho trước hoặc được tính ở mỗi bước thông qua các
phương pháp giải như Bisection, Armijo, Back-tracking,…
2.2. Phương pháp Armijo
Cho trước 2 thông số: 𝜖 ∈ (0,1), 𝜎 > 1

Ta có: ℎ̅(𝑎) = ℎ(0) + 𝛼𝜖∆ℎ(0)


𝛼 ∗ được chấp nhận bởi luậ Armijo nếu:

ℎ(𝛼 ∗ ) < ℎ̅(𝛼 ∗ )


{
ℎ(𝜎𝛼 ∗ ) ≥ ℎ̅(𝜎𝛼 ∗ )

Thuật toán:
Cho 𝑡 = 0, và chọn 𝛼 (0) = 𝑎 > 0

Nếu ℎ(𝛼(𝑡 )) < ℎ̅(𝛼 (𝑡 )), chọn 𝛼(𝑡 ) và dừng lại


1
Nếu ℎ(𝛼(𝑡 )) > ℎ̅(𝛼(𝑡 )), ta viết 𝛼 (𝑡 + 1) = 𝛼 (𝑡 )
𝜎

3
Bài KT GK Toán Nâng Cao Nguyễn Hữu Hoàng Long

3. GIẢI BÀI TOÁN BẰNG CODING TRÊN MATLAB


3.1. Pseudo code

3.2. Giải bài toán bằng Coding trên MATLAB


3.2.1. Các hàm đi kèm
3.2.1.1. Hàm func(x)
function f = func(x)
f=(4/41)*x(1)^4+82*x(1)^2*x(2)^2-x(1)-x(2)^2;
end

3.2.1.2. Hàm grad(x)


function g = grad(x)
g=[(8/41)*x(1)^3+164*x(1)*x(2)^2-1;
164*x(1)^2*x(2)-2*x(2)];
end

4
Bài KT GK Toán Nâng Cao Nguyễn Hữu Hoàng Long

3.2.1.3. Hàm hex(x)


function h = hex(x)
h = [(24/41)*x(1)^2+164*x(2)^2, 328*x(1)*x(2);
328*x(1)*x(2), 164*x(1)^2-2];
end

3.2.1.4. Hàm Armijo(x,d)


function [alpha] = Armijo(x,d)
a = 0.2;
epsilon = 0.1;
sigma = 2;
obj=func(x);
newobj = func(x - a*d);
g = grad(x);
t = 1;
while (newobj-obj)/a>epsilon*g'*d
a = a*sigma;
newobj = func(x - a*d);
t = t+1;
end
alpha=a;
end

3.2.2. Code chính giải bài toán


%Xóa dữ liệu nền
clearvars
clc

%Giới thiệu
disp('BAI KIEM TRA GIUA KY')
disp('NGUYEN HUU HOANG LONG')
disp('MSSV: 105190397')
disp('GVHD: TRAN THI MINH DUNG')
disp('----------o0o----------')

%Khai báo các thông số


N = 100;
epsilon = 1E-6;
x = zeros(2,N);
f = zeros(1,N);
f(1) = 0;
n = 1;
nfinal = N;

%Nhập INPUT
x(:,1) = input('Nhập giá trị x0, y0 theo cú pháp
[x0;y0]: ');

5
Bài KT GK Toán Nâng Cao Nguyễn Hữu Hoàng Long

%Giải bài toán theo phương pháp NEWTON, cập nhật alpha
bằng hàm Armijo
fprintf('\n');
while (n <= N)
f(n) = func(x(:,n));
G = grad(x(:,n));
H = hex(x(:,n));
if (mod(n,5) == 1)
fprintf('k = %2.0f x = %5.4f y = %5.4f f =
%12.8f\n',n-1,x(1,n),x(2,n),f(n));
end
if (abs(grad(x(:,n))) <= epsilon)
nfinal = n;
fmin = f(n);
fprintf('\nChương trình đã dừng lại do tìm thấy
được nghiệm cục bộ');
break;
end
d = H\G;
a = Armijo(x(:,n),d);
x(:,n+1) = x(:,n) - a*d;
n = n + 1;
if ((abs(x(1,n+1)-x(1,n)) <= epsilon) &&
(abs(x(2,n+1)-x(2,n))<= epsilon))
nfinal = n;
fmin = f(n);
fprintf('\nChương trình đã dừng lại do x(k+1)-
x(k) gần bằng 0');
break;
end
end

% Hiển thị OUTPUT


fprintf('\nTại k = %2.0f',n-1);
fprintf('\nGiá trị tối ưu tính ra được là: f =
%12.8f',f(nfinal));
fprintf('\nTại nghiệm cục bộ là: x = %5.4f và y =
%5.4f\n',x(1,n),x(2,n))

6
Bài KT GK Toán Nâng Cao Nguyễn Hữu Hoàng Long

% Vẽ biểu đồ
figure('Color','White')
set(gcf,'position',[20,300,750,400])
plot(0:nfinal - 1,x(1,1:nfinal),'*-
','DisplayName','x','color','#FFC641','Linewidth',2)
hold on;
plot(0:nfinal - 1,x(2,1:nfinal),'*-
','DisplayName','y','color','#0072BD','Linewidth',2)
title('Newton''s Method Solution: $f(x) =
{\frac{4}{41}}x^4+82x^2y^2-x-
y^2$','FontSize',20,'Interpreter','latex')
xlabel('$Iteration$','FontSize',16,'Interpreter','latex'
)
ylabel('$x$ $and$
$y$','FontSize',16,'Interpreter','latex')
grid on
legend

figure('Color','White')
set(gcf,'position',[780,300,750,400])
k=(0:1:nfinal-1);
fplot=f(1:1:nfinal);
plot(k,fplot,'-*','DisplayName','f(x,y)','color',
'#FF5D56','Linewidth',2)
title('Newton''s Method Solution: $f(x) =
{\frac{4}{41}}x^4+82x^2y^2-x-
y^2$','FontSize',20,'Interpreter','latex')
xlabel('$Iteration$','FontSize',16,'Interpreter','latex'
)
ylabel('$f(x,y)$','FontSize',16,'Interpreter','latex')
grid on
legend
hjk

7
Bài KT GK Toán Nâng Cao Nguyễn Hữu Hoàng Long

3.3. Kết quả tính toán


3.3.1. Kết quả hiển thị trên cửa sổ làm việc chính của MATLAB

8
Bài KT GK Toán Nâng Cao Nguyễn Hữu Hoàng Long

3.3.2. Các đồ thị đầu ra của thuật toán


3.3.2.1. Đồ thị của 2 biến x, y

3.3.2.2. Đồ thị giá trị của hàm f(x,y)

9
Bài KT GK Toán Nâng Cao Nguyễn Hữu Hoàng Long

4. GIẢI BÀI TOÁN BẰNG OPTIMIZATION TOOLBOX TRONG MATLAB


4.1. Hàm fandgrad(x) đi kèm
function [f,g] = fandgrad(x)
f = (4/41)*x(1)^4+82*x(1)^2*x(2)^2-x(1)-x(2)^2;
if nargout > 1 %Yêu cầu của gradient
g=[(8/41)*x(1)^3+164*x(1)*x(2)^2-1;
164*x(1)^2*x(2)-2*x(2)];
end

4.2. Code chính giải bài toán


%Xóa dữ liệu nền
clearvars
clc

%Giới thiệu
disp('BAI KIEM TRA GIUA KY')
disp('NGUYEN HUU HOANG LONG')
disp('MSSV: 105190397')
disp('GVHD: TRAN THI MINH DUNG')
disp('----------o0o----------')

%Nhập INPUT
x0 = input('Nhập giá trị x0, y0 theo cú pháp [x0;y0]: ');

%Giải bài toán bằng Optimization Toolbox


fun = @fandgrad;
options =
optimset('Display','iter','PlotFcns',@optimplotfval);
x = fminunc(fun,x0,options);
fmin = func(x);

% Hiển thị OUTPUT


fprintf('\nGiá trị tối ưu tính ra được là: f =
%12.8f',fmin);
fprintf('\nTại nghiệm tối ưu cực bộ là: x = %5.4f và y
= %5.4f\n',x(1),x(2))

10
Bài KT GK Toán Nâng Cao Nguyễn Hữu Hoàng Long

4.3. Kết quả tính toán


4.3.1. Kết quả hiển thị trên cửa sổ làm việc chính của MATLAB

11
Bài KT GK Toán Nâng Cao Nguyễn Hữu Hoàng Long

4.3.2. Đồ thị đầu ra của thuật toán

5. NHẬN XÉT VÀ SO SÁNH GIỮA HAI PHƯƠNG PHÁP


5.1. Kết quả của hai phương pháp
5.1.1. Giải bài toán bằng coding trên matlab
Giá trị tối ưu tính ra được là: f = -0.11041702
Tại nghiệm tối ưu cục bộ là: x = 0.1104 và y = 0.2349
5.1.2. Giải bài toán bằng optimization toolbox trong matlab
Giá trị tối ưu tính ra được là: f = -1.02632
Tại nghiệm tối ưu cục bộ là: x = 1.3684 và y = 0.0000
5.2. Nhận xét
Kết quả của hai phương pháp không giống nhau nhưng đồ thị đầu ra của hai phương
pháp có hình dạng tương đồng
Những lý do có thể dẫn đến tình trạng này:
− Hai phương pháp giải bằng hai cách khác nhau: coding trên Matlab sử dụng
phương pháp Newton, còn hàm fminunc dựa vào Gradient để giải
− Cách đặt stopping criteria khác nhau

12

You might also like