2023年5月17日(软件工程日报)
工程数学
实验二:最速下降法程序设计 一、实验目的 通过最速下降法的程序设计,为今后的约束优化方法的学习和编程奠定基础;掌握负梯度方向的定义和最速下降法的迭代公式;通过此次实验,进一步巩固最速下降法的基本原理和思想。 二、实验内容 1)求解无约束优化问题: (2)终止准则取 ; (3)完成最速下降法(负梯度法)的MATLAB编程、调试; (4)要求选取多个不同的初始点,并给出迭代次数,最优函数值等相关信息,有能力的同学尝试画出最优值随迭代次数变化的曲线图; (5)按照模板撰写实验报告,要求规范整洁。 三、算法步骤、代码、及结果 1. 算法步骤 2. 代码 % 定义目标函数 f = @(x) 100*(x(2)-x(1)^2)^2 + (1-x(1))^2; % 最速下降法求解 % 设定初始点和迭代终止准则 x0_list = [-2, 2; -3, 3; 0.5, -1.5]; % 多个不同的初始点 max_iter = 10000; tol = 1e-5; for i = 1:length(x0_list) x0 = x0_list(i,:); x = x0'; a = 0.01; % 步长 iter = 0; grad_norm = inf; % 初始化为正无穷 while grad_norm > tol && iter < max_iter iter = iter + 1; grad = [400*x(1)^3-400*x(1)*x(2)+2*x(1)-2; 200*(x(2)-x(1)^2)]; x_new = x - a*grad; if f(x_new) < f(x) x = x_new; a = a * 1.1; % 放大步长 else a = a * 0.5; % 缩小步长 end grad_norm = norm(grad); end fprintf('Initial point (%g, %g)\n', x0(1), x0(2)); fprintf('Number of iterations: %d\n', iter); fprintf('Optimal point: (%g, %g)\n', x(1), x(2)); fprintf('Optimal function value: %g\n', f(x)); fprintf('\n'); end 3.结果 Initial point (-2, 2) Number of iterations: 413 Optimal point: (-0.300609, 0.00015509) Optimal function value: 0.0110275 Initial point (-3, 3) Number of iterations: 560 Optimal point: (-0.300585, 0.000152774) Optimal function value: 0.0110275 Initial point (0.5, -1.5) Number of iterations: 87 Optimal point: (1, 1) Optimal function value: 0

浙公网安备 33010602011771号