上机实验二:最速下降法程序设计
1、基本要求
通过最速下降法的程序设计,为今后的约束优化方法的学习和编程奠定基础;掌握负梯度方向的定义和最速下降法的迭代;通过此次实验,进一步巩固最速下降法的基本原理和思想。
2、主要内容
(1)求解无约束优化问题
(2)终止准则取;
(3)完成最速下降法(负梯度法)的MATLAB编程、调试;
(4)要求选取多个不同的初始点,并给出迭代次数,最优函数值等相关信息,有能力的同学尝试画出最优值随迭代次数变化的曲线图;
(5)按照模板撰写实验报告,要求规范整洁。
3、操作要点
(1)最速下降法Matlab的实现;
(2)学会分析实验结果;
(3)撰写实验报告;
4、主要仪器设备
微机及Matlab软件
% 定义目标函数 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
运行结果:
MinHJ Initial point (-2, 2) Number of iterations: 10000 Optimal point: (1.02229, 1.04527) Optimal function value: 0.000500858 Initial point (-3, 3) Number of iterations: 10000 Optimal point: (1.07711, 1.16049) Optimal function value: 0.00595669 Initial point (0.5, -1.5) Number of iterations: 10000 Optimal point: (0.999932, 0.999864) Optimal function value: 4.58761e-09
标签:上机,point,iter,实验,数学,Optimal,x0,grad,最速 From: https://www.cnblogs.com/tianminggeng/p/17401304.html