HỌ VÀ TÊN ĐỖ ĐOÀN TUẤN HÙNG LỚP 20TDHCLC2 MSSV 105200407 NHÓM 20N36 Đợt 3 BÀI 1 Code matlab % Hàm mục tiêu g = @(x, y) 2 * x * y + 2 * x x ^2 2 * y ^2; % Gradient của hàm mục tiêu theo biến x grad g x[.]
HỌ VÀ TÊN: ĐỖ ĐOÀN TUẤN HÙNG LỚP: 20TDHCLC2 MSSV: 105200407 NHÓM: 20N36 Đợt BÀI 1: Code matlab % Hàm mục tiêu g = @(x, y) * x * y + * x - x.^2 - * y.^2; % Gradient hàm mục tiêu theo biến x grad_g_x = @(x, y) * y + - * x; % Gradient hàm mục tiêu theo biến y grad_g_y = @(x, y) * x - * y; % Vị trí ban đầu x = 1.0; y = 2.0; % Các đối số cho phương pháp Armijo Rule alpha = 1; beta = 1; max_iter = 100; % Áp dụng phương pháp Armijo Rule để tìm kích thước bước tối ưu step_size = armijo_rule_2d(g, grad_g_x, grad_g_y, x, y, alpha, beta, max_iter); % Cập nhật vị trí gradient descent với kích thước bước tối ưu x_new = x - step_size * grad_g_x(x, y); y_new = y - step_size * grad_g_y(x, y); % Hiển thị kết fprintf('Vị trí ban đầu: x = %f, y = %f\n', x, y); fprintf('Kích thước bước tối ưu: %f\n', step_size); fprintf('Vị trí mới: x = %f, y = %f\n', x_new, y_new); Kết quả: BÀI 2: Code matlab % Hàm mục tiêu g = @(x, y) x * y.^2; % Gradient hàm mục tiêu theo biến x grad_g_x = @(x, y) y.^2; % Gradient hàm mục tiêu theo biến y grad_g_y = @(x, y) * x * y; % Vị trí ban đầu x = 1.0; y = 2.0; % Các đối số cho phương pháp Armijo Rule alpha = 1; beta = 1; max_iter = 100; % Áp dụng phương pháp Armijo Rule để tìm kích thước bước tối ưu step_size = armijo_rule_2d(g, grad_g_x, grad_g_y, x, y, alpha, beta, max_iter); % Cập nhật vị trí gradient descent với kích thước bước tối ưu x_new = x - step_size * grad_g_x(x, y); y_new = y - step_size * grad_g_y(x, y); % Hiển thị kết fprintf('Vị trí ban đầu: x = %f, y = %f\n', x, y); fprintf('Kích thước bước tối ưu: %f\n', step_size); fprintf('Vị trí mới: x = %f, y = %f\n', x_new, y_new); Kết quả: BÀI 3: Code matlab % Hàm mục tiêu f = @(x) x.^3 - * x.^2 + * x - 8; % Gradient hàm mục tiêu grad_f = @(x) * x.^2 - 12 * x + 9; % Vị trí ban đầu x = 5.0; % Các đối số cho phương pháp Armijo Rule alpha = 1; beta = 1; max_iter = 100; % Áp dụng phương pháp Armijo Rule để tìm kích thước bước tối ưu step_size = armijo_rule(f, grad_f, x, alpha, beta, max_iter); % Cập nhật vị trí gradient descent với kích thước bước tối ưu x_new = x - step_size * grad_f(x); % Hiển thị kết disp(['Vị trí ban đầu: ', num2str(x)]); disp(['Kích thước bước tối ưu: ', num2str(step_size)]); disp(['Vị trí mới: ', num2str(x_new)]); Kết quả: BÀI 4: Code matlab % Hàm mục tiêu f = @(x) (x-2).^2 + cos(x); % Gradient hàm mục tiêu grad_f = @(x) * (x-2) - sin(x); % Vị trí ban đầu x = 5.0; % Các đối số cho phương pháp Armijo Rule alpha = 1; beta = 1; max_iter = 100; % Áp dụng phương pháp Armijo Rule để tìm kích thước bước tối ưu step_size = armijo_rule(f, grad_f, x, alpha, beta, max_iter); % Cập nhật vị trí gradient descent với kích thước bước tối ưu x_new = x - step_size * grad_f(x); % Hiển thị kết disp(['Vị trí ban đầu: ', num2str(x)]); disp(['Kích thước bước tối ưu: ', num2str(step_size)]); disp(['Vị trí mới: ', num2str(x_new)]); Kết quả: BÀI 5: Code matlab % Hàm mục tiêu f = @(x) exp(x) - * x.^2; % Gradient hàm mục tiêu grad_f = @(x) exp(x) - * x; % Vị trí ban đầu x = 5.0; % Các đối số cho phương pháp Armijo Rule alpha = 1; beta = 1; max_iter = 100; % Áp dụng phương pháp Armijo Rule để tìm kích thước bước tối ưu step_size = armijo_rule(f, grad_f, x, alpha, beta, max_iter); % Cập nhật vị trí gradient descent với kích thước bước tối ưu x_new = x - step_size * grad_f(x); % Hiển thị kết fprintf('Vị trí ban đầu: %f\n', x); fprintf('Kích thước bước tối ưu: %f\n', step_size); fprintf('Vị trí mới: %f\n', x_new); Kết quả: BÀI 6: Code Matlab % Hàm mục tiêu g = @(x, y) x - y + * x.^2 + 2*x*y + y.^2; % Gradient hàm mục tiêu theo biến x grad_g_x = @(x, y) + * x + * y; % Gradient hàm mục tiêu theo biến y grad_g_y = @(x, y) -1 + * x+2 * y; % Vị trí ban đầu x = 1.0; y = 2.0; % Các đối số cho phương pháp Armijo Rule alpha = 1; beta = 1; max_iter = 100; % Áp dụng phương pháp Armijo Rule để tìm kích thước bước tối ưu step_size = armijo_rule_2d(g, grad_g_x, grad_g_y, x, y, alpha, beta, max_iter); % Cập nhật vị trí gradient descent với kích thước bước tối ưu x_new = x - step_size * grad_g_x(x, y); y_new = y - step_size * grad_g_y(x, y); % Hiển thị kết fprintf('Vị trí ban đầu: x = %f, y = %f\n', x, y); fprintf('Kích thước bước tối ưu: %f\n', step_size); fprintf('Vị trí mới: x = %f, y = %f\n', x_new, y_new); Kết quả: Code function biến: function step_size = armijo_rule(f, grad_f, x, alpha, beta, max_iter) step_size = 1.0; iter_count = 0; while iter_count < max_iter f_val = f(x); grad_val = grad_f(x); new_f_val = f(x - step_size * grad_val); if new_f_val