matlab实验2-最速下降法
steepest_descent.m:
function [x, fval, iter, fval_history] = steepest_descent(x0, max_iter, epsilon)
% 最速下降法求解无约束优化问题
% 输入参数:
% x0: 初始点
% max_iter: 最大迭代次数
% epsilon: 终止准则阈值
% 输出参数:
% x: 最优解
% fval: 最优函数值
% iter: 迭代次数
% fval_history: 函数值历史记录
x = x0;
iter = 0;
fval_history = zeros(max_iter, 1);
while iter < max_iter
% 计算当前点的梯度
grad = gradient(x);
% 判断是否满足终止准则
if norm(grad) < epsilon
break;
end
% 计算搜索方向(负梯度方向)
d = -grad;
% 一维搜索求步长
alpha = golden_section(x, d);
% 更新迭代点
x = x + alpha * d;
% 记录当前函数值
fval_history(iter + 1) = objective(x);
iter = iter + 1;
end
% 最终函数值
fval = objective(x);
% 裁剪函数值历史记录
fval_history = fval_history(1:iter);
end
function f = objective(x)
% 目标函数
f = 100 * (x(2) - x(1)^2)^2 + (1 - x(1))^2;
end
function g = gradient(x)
% 目标函数的梯度
g = zeros(2, 1);
g(1) = -400 * x(1) * (x(2) - x(1)^2) - 2 * (1 - x(1));
g(2) = 200 * (x(2) - x(1)^2);
end
function alpha = golden_section(x, d)
% 黄金分割法进行一维搜索
a = 0;
b = 1;
rho = (sqrt(5) - 1) / 2;
epsilon = 1e-5;
lambda = a + (1 - rho) * (b - a);
mu = a + rho * (b - a);
f_lambda = phi(lambda, x, d);
f_mu = phi(mu, x, d);
while abs(b - a) > epsilon
if f_lambda > f_mu
a = lambda;
lambda = mu;
mu = a + rho * (b - a);
f_lambda = f_mu;
f_mu = phi(mu, x, d);
else
b = mu;
mu = lambda;
lambda = a + (1 - rho) * (b - a);
f_mu = f_lambda;
f_lambda = phi(lambda, x, d);
end
end
alpha = (a + b) / 2;
end
function f = phi(alpha, x, d)
% 一维搜索的目标函数
x_new = x + alpha * d;
f = objective(x_new);
end
main.m:
% 测试不同初始点
initial_points = [
-1.2, 1;
0.5, 0.5;
2, 2;
-2, -2
];
max_iter = 1000;
epsilon = 1e-6;
for i = 1:size(initial_points, 1)
x0 = initial_points(i, :)';
[x, fval, iter, fval_history] = steepest_descent(x0, max_iter, epsilon);
fprintf('\n初始点: [%.2f, %.2f]\n', x0(1), x0(2));
fprintf('最优解: [%.6f, %.6f]\n', x(1), x(2));
fprintf('最优函数值: %.6f\n', fval);
fprintf('迭代次数: %d\n', iter);
% 绘制函数值随迭代次数的变化曲线
figure;
plot(0:iter-1, fval_history, 'b-', 'LineWidth', 1.5);
title(sprintf('初始点 [%.2f, %.2f] 的收敛曲线', x0(1), x0(2)));
xlabel('迭代次数');
ylabel('函数值');
grid on;
end

浙公网安备 33010602011771号