5.20
function [x_opt, f_opt, iter] = steepest_descent()
% 定义目标函数
f = @(x) 100*(x(1)^2 - x(2))^2 + (x(1) - 1)^2;
% 计算目标函数的梯度
grad_f = @(x) [400*x(1)*(x(1)^2 - x(2)) + 2*(x(1) - 1); -200*(x(1)^2 - x(2))];
% 定义终止准则
epsilon = 1e-5;
% 设置初始点
x0_list = [0, 0; -1, 1; 2, -2]; % 可根据需要尝试不同的初始点
for k = 1:size(x0_list, 1)
% 初始化变量
iter = 0;
x_opt = x0_list(k, :)';
f_opt = f(x_opt);
grad_norm = norm(grad_f(x_opt));
% 最速下降法迭代过程
while grad_norm >= epsilon
% 计算搜索方向
p = -grad_f(x_opt);
% 更新变量
alpha = line_search(x_opt, p, f, grad_f);
x_opt = x_opt + alpha * p;
f_opt = f(x_opt);
grad_norm = norm(grad_f(x_opt));
% 更新迭代次数
iter = iter + 1;
end
% 输出结果
fprintf('初始点:%s\n', mat2str(x0_list(k, :)));
fprintf('最优解:%s\n', mat2str(x_opt));
fprintf('最优值:%f\n', f_opt);
fprintf('迭代次数:%d\n', iter);
disp('----------------------');
end
end
function alpha = line_search(x, p, f, grad_f)
% 简单的线搜索方法:固定步长
alpha = 0.01;
end
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署