4.24

所花时间:4小时

代码量:21

博客篇:1

工程数学

Newton法程序设计

一、实验目的

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

 

 

二、实验内容

1)求解无约束优化问题:

2)终止准则取

3)完成Newton法(牛顿法)的MATLAB编程、调试;

4)选取几个与实验二中相同的初始点,并给出相关实验结果的对比及分析(从最优解、最优值、收敛速度(迭代次数)等方面进行比较);

5)按照模板撰写实验报告,要求规范整洁。

 

 

 

三、算法步骤、代码、及结果

1. 算法步骤

步骤1:给定初始点 x0,及精度

步骤2:若梯度的范数<e ,停止,极小点为xk ,否则转【3】;

步骤3:计算负梯度,海森矩阵,令 dk=负梯度*海森矩阵的逆

步骤4:令 xk+1 = xk + dkk=k+1,转【2】。

 

 

2.代码

function [k,x,val] = dampnm(fun,gfun,Hess,x0,epsilon)
% 输入:% fun - 被优化的函数% gfun - 目标函数的梯度% Hess - 目标函数的Hessian矩阵
% x0 - 初始点% epsilon - 收敛阈值
k = 1;% 初始化迭代计数器
gk = feval(gfun, x0);% 计算初始梯度
Gk = feval(Hess, x0);% 计算初始Hessian矩阵
while norm(gk) > epsilon% 检查初始梯度是否已满足收敛条件
dk = -Gk\gk;% 求解线性方程组以找到搜索方向
x0 = x0 + dk;% 更新点 
gk = feval(gfun, x0); % 计算新点的梯度
Gk = feval(Hess, x0); % 计算新点的Hessian矩阵
k = k + 1;% 迭代计数器递增
if k > 10000 % 如果迭代次数太多,退出循环
warning('The method did not converge after 10000 iterations.');
break;
end
end
% 输出最终迭代结果
x = x0;
val = feval(fun, x0);
end

 

posted @ 2024-04-24 21:16  umiQa  阅读(8)  评论(0编辑  收藏  举报