5.25

实验三:Newton法程序设计
一、实验目的
掌握Hesse矩阵的计算方法和Newton法的基本思想及其迭代步骤;学会运用MATLAB编程实现常用优化算法;能够正确处理实验数据和分析实验结果及调试程序。

二、实验内容
(1)求解无约束优化问题: ;
(2)终止准则取 ;
(3)完成Newton法(牛顿法)的MATLAB编程、调试;
(4)选取几个与实验二中相同的初始点,并给出相关实验结果的对比及分析(从最优解、最优值、收敛速度(迭代次数)等方面进行比较);
(5)按照模板撰写实验报告,要求规范整洁。
三、算法步骤、代码、及结果
step1 选初值。 给定终止误差\epsion>=0\epsion>=0和初始点x0, 令k=0.
step 2 检验终止条件。 计算gk, 若||gk||<=\epsion, 则x∗=xk, 算法终止
step 3 确立搜索方向。 计算Gk, 由 Gkd=−gk=−求dNk
step 4 计算新点。 令xk+1=xk+dk,k=k+1, 转step2.

2. 代码
function [x_opt, f_opt, iterations] = newtons_method(f, gradient, hessian, x0, epsilon)
x = x0;
iterations = 0;

while norm(gradient(x)) > epsilon
H = hessian(x);
grad = gradient(x);
p = -inv(H)*grad;
alpha = backtracking_line_search(f, gradient, x, p);
x = x + alpha*p;
iterations = iterations + 1;
end

x_opt = x;
f_opt = f(x);
end

% 定义函数f(x)
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;

% 定义梯度向量gradient(x)
gradient = @(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];

% 定义Hessian矩阵hessian(x)
hessian = @(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 = [1; 1; 1; 1];
epsilon = 1e-6;

% 调用Newton法求解优化问题
[x_opt, f_opt, iterations] = newtons_method(f, gradient, hessian, x0, epsilon);
disp('最优解:');
disp(x_opt);
disp('最优值:');
disp(f_opt);
disp('迭代次数:');
disp(iterations);

function alpha = backtracking_line_search(f, gradient, x, p, rho, c)
% 参数说明:
% f: 目标函数,输入参数为x
% gradient: 目标函数的梯度函数,输入参数为x
% x: 当前点的位置向量
% p: 搜索方向向量
% rho: 回溯因子,通常取值在0到1之间,如0.5
% c: 充分下降系数,一个正数,通常较小,如0.1
rho=0.5
c=0.1
% 初始化步长alpha为1
alpha = 1;

% Armijo-Goldstein条件检查
while f(x + alpha*p) > f(x) + c*alpha*gradient(x)'*p
% 若不满足充分下降条件,则按rho的比例减小步长
alpha = alpha * rho;
end
end

 


3. 结果
rho = 0.5000
c =0.1000
最优解:
0.0028
-0.0003
0.0010
0.0010

最优值:
1.3481e-10

迭代次数:
15
四、心得体会
牛顿法与最速下降法一样是解无约束最优化问题的最早使用算法, 它的基本思想是用迭代点的梯度和二阶导数对目标函数进行二次函数逼近, 然后把二次函数的极小点作为新的迭代点, 并不断重复这一过程, 直至求出极小点。

 

posted @ 2024-06-18 09:21  晨观夕  阅读(1)  评论(0编辑  收藏  举报