6.13学习任务
进行了工程数学的实验三的练习
实验三:Newton法程序设计
一、实验目的
掌握Hesse矩阵的计算方法和Newton法的基本思想及其迭代步骤;学会运用MATLAB编程实现常用优化算法;能够正确处理实验数据和分析实验结果及调试程序。
二、实验内容
(1)求解无约束优化问题: ;
(2)终止准则取 ;
(3)完成Newton法(牛顿法)的MATLAB编程、调试;
(4)选取几个与实验二中相同的初始点,并给出相关实验结果的对比及分析(从最优解、最优值、收敛速度(迭代次数)等方面进行比较);
(5)按照模板撰写实验报告,要求规范整洁。
三、算法步骤、代码、及结果
1. 算法步骤
1. 初始化:选择初始点 x0x_0x0,设置迭代计数器 k=0k = 0k=0,和设置收敛准则 ϵ\epsilonϵ。
2. 计算梯度和海森矩阵:计算目标函数在当前点 xkx_kxk 处的梯度 ∇f(xk)\nabla f(x_k)∇f(xk) 和海森矩阵 H(xk)H(x_k)H(xk)。
3. 计算搜索方向:通过解线性方程 H(xk)d=−∇f(xk)H(x_k) d = -\nabla f(x_k)H(xk)d=−∇f(xk) 来确定搜索方向 ddd。
4. 更新点:计算新的点 xk+1=xk+dx_{k+1} = x_k + dxk+1=xk+d。
5. 检查终止条件:如果满足终止条件(例如,∥∇f(xk)∥<ϵ\|\nabla f(x_k)\| < \epsilon∥∇f(xk)∥<ϵ),则停止迭代;否则,继续迭代。
6. 迭代:将 kkk 增加1,返回步骤2。
2. 代码
% 定义目标函数及其梯度和海森矩阵
f = @(x) (x(1) + 10*x(2))^2 + 5*(x(3) - x(4))^2 + (x(2) - 2*x(3))^4 + 10*(x(1) - x(4))^4;
grad_f = @(x) [2*(x(1) + 10*x(2)) + 40*(x(1) - x(4))^3;
20*(x(1) + 10*x(2)) + 4*(x(2) - 2*x(3))^3;
10*(x(3) - x(4)) - 8*(x(2) - 2*x(3))^3;
-10*(x(3) - x(4)) - 40*(x(1) - x(4))^3];
hes_f = @(x) [2+120*(x(1) - x(4))^2, 20, 0, -120*(x(1) - x(4))^2;
20, 200+12*(x(2) - 2*x(3))^2, -24*(x(2) - 2*x(3))^2, 0;
0, -24*(x(2) - 2*x(3))^2, 10+48*(x(2) - 2*x(3))^2, -10;
-120*(x(1) - x(4))^2, 0, -10, 10+120*(x(1) - x(4))^2];
% 初始值和终止准则
x0_list = [-2, 2, 0, 0; -3, 3, 0, 0; 0.5, -1.5, 0, 0]; % 多个不同的初始点
tol = 1e-5;
for i = 1:size(x0_list, 1)
x0 = x0_list(i,:);
x = x0';
iter = 0;
grad_norm = inf; % 初始化为正无穷
while grad_norm > tol
iter = iter + 1;
grad = grad_f(x);
hes = hes_f(x);
d = -hes \ grad;
x_new = x + d;
grad_norm = norm(grad);
x = x_new;
end
fprintf('Initial point (%g, %g, %g)\n', x0(1), x0(2), x0(3));
fprintf('Number of iterations: %d\n', iter);
fprintf('Optimal point: (%g, %g, %g)\n', x(1), x(2), x(3));
fprintf('Optimal function value: %g\n', f(x));
fprintf('\n');
end
3. 结果
untitled7
Initial point (-2, 2, 0)
Number of iterations: 16
Optimal point: (-0.00434983, 0.000434983, -0.00130495)
Optimal function value: 9.45523e-10
Initial point (-3, 3, 0)
Number of iterations: 17
Optimal point: (-0.00434983, 0.000434983, -0.00130495)
Optimal function value: 9.45523e-10
Initial point (0.5, -1.5, 0)
Number of iterations: 14
Optimal point: (0.00407796, -0.000407796, 0.00236522)
Optimal function value: 7.83089e-10