5.18
% 定义目标函数
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;
% 定义最大迭代次数
max_iterations = 1000;
% 初始点列表
initial_points = [0, 0; -1, 1; 2, -2];
% 迭代过程函数
function [x_opt, f_opt, iterations] = gradient_descent(f, grad_f, x0, epsilon, max_iterations)
x = x0; % 初始化x
f_values = []; % 用于存储每次迭代的函数值
iterations = 0; % 迭代次数
while iterations < max_iterations
f_values = [f_values, f(x)]; % 记录当前迭代的函数值
grad = grad_f(x); % 计算梯度
alpha = 0.01; % 步长(学习率)选择为常数0.01
x = x - alpha * grad; % 更新x
iterations = iterations + 1; % 迭代次数加1
% 判断终止准则
if norm(grad) < epsilon
break;
end
end
x_opt = x; % 最优解
f_opt = f(x); % 最优函数值
end
% 使用最速下降法求解并输出结果
for i = 1:size(initial_points, 1)
x0 = initial_points(i, :);
[x_opt, f_opt, iterations] = gradient_descent(f, grad_f, x0, epsilon, max_iterations);
fprintf('初始点: [%d, %d]\n', x0);
fprintf('迭代次数: %d\n', iterations);
fprintf('最优函数值: %.6f\n', f_opt);
fprintf('最优解: [%.6f, %.6f]\n', x_opt);
fprintf('-------------------------------------\n');
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上本地化部署