最速下降法求解最优化问题matlab代码
时间: 2024-12-06 20:05:09 浏览: 43
最速下降法(Gradient Descent)是一种常用的数值优化算法,用于寻找函数的局部最小值。在MATLAB中,可以使用`fminunc`函数结合自定义的梯度向量来实现。下面是一个简单的例子,假设我们有一个单变量函数`fun(x)`:
```matlab
function [x_min, f_min] = gradient_descent(fun, x0, alpha, max_iter)
% x0: 初始点
% alpha: 学习率
% max_iter: 最大迭代次数
% 检查输入
if nargin < 4
max_iter = 100; % 默认最大迭代次数
end
x = x0;
f_x = fun(x); % 计算初始点的函数值
for iter = 1:max_iter
% 计算梯度
grad = diff(fun,x);
% 更新步长
x = x - alpha * grad;
% 如果收敛条件满足(例如,梯度接近零),则停止
if abs(grad) < 1e-6
break;
end
f_x_new = fun(x); % 计算新的函数值
% 如果新函数值更大,则更新步长并继续
if f_x_new > f_x
alpha = alpha / 2; % 学习率衰减
else
f_x = f_x_new; % 更新最小函数值
end
end
% 返回结果
x_min = x;
f_min = f_x;
end
% 使用该函数求解特定问题
fun = @(x) x.^2; % 示例二次函数
x0 = -5; % 初始猜测
[x_min, f_min] = gradient_descent(fun, x0, 0.1, 1000);
disp(['最小值位置:', num2str(x_min)])
disp(['最小函数值:', num2str(f_min)])
阅读全文