1. 无约束优化问题求解概述
在工程计算和数据分析中,我们经常需要寻找函数的最小值点。比如在智慧城市的交通流量优化中,需要找到使通行时间最短的信号灯配时方案;在电力系统调度中,需要寻找发电成本最低的机组组合。这类问题可以抽象为无约束优化问题:
min f(x), x∈Rⁿ
其中f(x)是我们需要最小化的目标函数。本文将重点讨论两种经典的迭代优化算法——梯度下降法和共轭梯度法,并给出可直接复用的MATLAB实现。
实际工程中的优化问题往往需要考虑约束条件,但无约束优化算法是解决更复杂问题的基础。掌握这些核心算法,对理解现代优化技术至关重要。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 梯度下降法原理与实现
2.1 算法核心思想
梯度下降法就像蒙眼下山:每次用脚试探周围最陡的下坡方向,然后迈出一步。数学上,这个"最陡方向"就是负梯度方向:
dₖ = -∇f(xₖ)
迭代公式为:
xₖ₊₁ = xₖ + αₖdₖ
其中αₖ是步长,决定了每次迭代走多远。步长选择是算法的关键——太大容易震荡,太小收敛缓慢。
2.2 MATLAB实现解析
我们来看一个加入了Armijo线搜索的稳健实现:
matlab复制function [x,val,k] = grad_descent(fun,gfun,x0)
maxk = 5000; % 最大迭代次数
rho = 0.5; % 步长衰减系数
sigma = 0.4; % Armijo条件参数
k = 0; % 迭代计数器
epsilon = 1e-5; % 收敛阈值
while(k < maxk)
g = feval(gfun,x0); % 计算当前梯度
d = -g; % 确定搜索方向
if(norm(d) < epsilon), break; end % 检查收敛
% Armijo非精确线搜索
m = 0;
while(m < 20)
if(feval(fun,x0 + rho^m*d) < feval(fun,x0) + sigma*rho^m*g'*d)
