5.24
实验二:最速下降法程序设计
一、实验目的
通过最速下降法的程序设计,为今后的约束优化方法的学习和编程奠定基础;掌握负梯度方向的定义和最速下降法的迭代公式 ;通过此次实验,进一步巩固最速下降法的基本原理和思想。
二、实验内容
(1)求解无约束优化问题: ;
(2)终止准则取 ;
(3)完成最速下降法(负梯度法)的MATLAB编程、调试;
(4)要求选取多个不同的初始点,并给出迭代次数,最优函数值等相关信息,有能力的同学尝试画出最优值随迭代次数变化的曲线图;
(5)按照模板撰写实验报告,要求规范整洁。
三、算法步骤、代码、及结果
1. 算法步骤
2. 代码
% 定义目标函数
f = @(x) (x(1)+x(2))^2 + 5*(x(3)-x(4))^2 + (x(2)-2*x(3))^4 + 10*(x(1)-x(4))^4;
% 定义目标函数的梯度
grad_f = @(x) [2*(x(1)+x(2)) + 40*(x(1)-x(4))^3; 2*(x(1)+x(2)) + 4*(x(2)-2*x(3))^3; 10*(x(3)-x(4)) - 8*(x(2)-2*x(3))^3; -10*(x(3)-x(4)) - 40*(x(1)-x(4))^3];
% 最大迭代次数
max_iter = 1000;
% 步长
alpha = 0.001;
% 梯度阈值
epsilon = 1e-5;
% 初始点
initial_points = [randn(4, 1), randn(4, 1), randn(4, 1)];%返回三个随机 4*1 的矩阵
for j = 1:size(initial_points, 2)
x = initial_points(:, j);
for i = 1:max_iter
% 计算梯度
gradient = grad_f(x);
% 判断梯度是否满足阈值
if norm(gradient) < epsilon
break;
end
% 更新x
x = x - alpha * gradient;
end
fprintf('初始点%d: \n', j);
disp('=================');
fprintf('迭代次数: %d \n', i);
fprintf('最优解: %s \n', mat2str(x));
fprintf('目标函数值: %f \n', f(x));
disp('=================');
end
3. 结果
>> untitled
初始点1:
=================
迭代次数: 1000
最优解: [-0.0951301926067962;0.198948488840756;0.0899232311403723;0.0784813990587053]
目标函数值: 0.020518
=================
初始点2:
=================
迭代次数: 1000
最优解: [0.049943928319955;-0.101847129464688;-0.097676457625489;-0.0918755912507537]
目标函数值: 0.006984
=================
初始点3:
=================
迭代次数: 1000
最优解: [0.156528906885546;-0.311776403571521;-0.0623126944865568;-0.0422957770903173]
目标函数值: 0.042959
=================
>>
四、心得体会
在实现和运行最速下降法的过程中,我有以下几点实验体会:调整步长的重要性:步长是影响梯度下降法性能的重要参数。过大的步长可能导致算法无法收敛,而过小的步长可能导致收敛速度缓慢。因此,需要仔细选择合适的步长,可以通过尝试不同的步长值来调整算法的性能。初始点的选择:不同的初始点可能导致不同的最优解和收敛速度。在实验中,我尝试了多个不同的初始点,并观察了它们对算法性能的影响。有时候,初始点的选择可以影响算法的收敛性和稳定性。终止准则的调整:终止准则是判断算法何时停止迭代的重要条件。在实验中,我采用了梯度的范数作为终止准则,并观察了其对算法收敛性的影响。合理设置终止准则可以节省计算资源并提高算法效率。实验结果分析:通过实验结果的分析,我可以更好地理解目标函数的性质和梯度下降算法的工作原理。观察最优解、目标函数值和迭代次数等指标可以帮助我评估算法的优化性能,并为进一步优化参数和调整算法提供参考。
总的来说,通过实验,我更深入地理解了最速下降法的原理和实现方式,以及调整参数对算法性能的影响。这种实践经验对于我在以后更好地使用和理解优化算法将会非常有帮助
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义