clear all;
close all;
clc;
% 定义目标函数
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_iter = 1000;
% 定义初始点
initial_points = [0.8 0.8; -1.2 1.0; -0.2 -0.2; 1.2 1.2; 0.0 0.5];
% 遍历每个初始点
for i = 1:size(initial_points, 1)
x0 = initial_points(i, :)'; % 初始点
x = x0;
iter = 0;
alpha = 0.01; % 步长
% 开始迭代
while norm(grad_f(x)) > epsilon && iter < max_iter
d = -grad_f(x); % 负梯度方向
x_new = x + alpha * d; % 更新点
if f(x_new) < f(x)
x = x_new;
else
alpha = alpha / 2; % 步长减半
end
iter = iter + 1;
end
% 输出结果
fprintf('初始点: [%f, %f]\n', x0(1), x0(2));
fprintf('迭代次数: %d\n', iter);
fprintf('最优解: [%f, %f]\n', x(1), x(2));
fprintf('最优函数值: %f\n', f(x));
fprintf('\n');
end
标签:定义,工程,iter,alpha,实验,1.2,数学,fprintf,x0 From: https://www.cnblogs.com/psh888/p/17390631.html