今日代码:
% 定义目标函数 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_iterations = 1000; % 初始点列表 initial_points = [0, 0; -1, 1; 2, -2]; % 迭代过程函数 function [x_opt, f_opt, iterations] = gradient_descent(f, grad_f, x0, epsilon, max_iterations) x = x0; % 初始化x f_values = []; % 用于存储每次迭代的函数值 iterations = 0; % 迭代次数 while iterations < max_iterations f_values = [f_values, f(x)]; % 记录当前迭代的函数值 grad = grad_f(x); % 计算梯度 alpha = 0.01; % 步长(学习率)选择为常数0.01 x = x - alpha * grad; % 更新x iterations = iterations + 1; % 迭代次数加1 % 判断终止准则 if norm(grad) < epsilon break; end end x_opt = x; % 最优解 f_opt = f(x); % 最优函数值 end % 使用最速下降法求解并输出结果 for i = 1:size(initial_points, 1) x0 = initial_points(i, :); [x_opt, f_opt, iterations] = gradient_descent(f, grad_f, x0, epsilon, max_iterations); fprintf('初始点: [%d, %d]\n', x0); fprintf('迭代次数: %d\n', iterations); fprintf('最优函数值: %.6f\n', f_opt); fprintf('最优解: [%.6f, %.6f]\n', x_opt); fprintf('-------------------------------------\n'); end
标签:总结,opt,迭代,18,fprintf,iterations,今日,x0,grad From: https://www.cnblogs.com/psh888/p/17413306.html