工程数学实验二

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

 

posted @ 2023-05-11 11:48  庞司令  阅读(26)  评论(0)    收藏  举报