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
复制代码

 

posted @   摆烂达人  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示